js逆向教程24-作用域和自执行函数

变量作用域
局部变量
function jb()
{
	var a="我是局部变量"
	return a;
}全局变量
var a="我是全局变量"
function jb()
{
	console.log(a)
}
console.log(a)自执行函数
在加载的时候 这个自执行函数就能自己运行
!(function()
{
	console.log(2)
}
)()!表示运行成功
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-osycqurs-1673098150122)(02 - 副本.assets/image-20230107205816596.png)]](https://images.3wcode.com/3wcode/20240515/b_0_202405151115424341.jpg)
拆解只执行函数的过程
对于这样一个函数 直接运行:
function()
{
	console.log(2)
}除非前面有个var 否则会报错
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zfkxxpee-1673098150123)(02 - 副本.assets/image-20230107210015165.png)]](https://images.3wcode.com/3wcode/20240515/b_0_202405151115424783.jpg)
var a =function()
{
	console.log(2)
}![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sdiiqnnj-1673098150123)(02 - 副本.assets/image-20230107210128558.png)]](https://images.3wcode.com/3wcode/20240515/b_0_202405151115435725.jpg)
用括号括起来 也不会报错,因为括起来之后就是一个整体,你可以将它理解为一个没有方法名称的方法、也就是闭包。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wx4vldez-1673098150124)(02 - 副本.assets/image-20230107210241014.png)]](https://images.3wcode.com/3wcode/20240515/b_0_202405151115434126.jpg)
在括号后面再加一个括号就表示执行这个函数
(function()
{
	console.log(2)
}
)()![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvp8w9tf-1673098150124)(02 - 副本.assets/image-20230107210352958.png)]](https://images.3wcode.com/3wcode/20240515/b_0_202405151115445067.jpg)
再js逆向中,通过这种方式 可以将一个函数的执行传给另一个函数执行 从而实现逆向。
内部函数如何外部调用
!(function()
{
    function jm()
    {
        console.log(2)
    }
    jm()
}
)()可以看到内部函数也可以被掉哟个
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qrkxolma-1673098150125)(02 - 副本.assets/image-20230107210628006.png)]](https://images.3wcode.com/3wcode/20240515/b_0_202405151115441996.jpg)
如果将内部函数放到外部调用:
!(function()
{
    function jm()
    {
        console.log(2)
    }
}
)()
jm()就会报错
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hy3eddco-1673098150126)(02 - 副本.assets/image-20230107210759134.png)]](https://images.3wcode.com/3wcode/20240515/b_0_202405151115459396.jpg)
要解决这个问题 可以在外部定义一个变量,然后将内部的jm赋值给这个变量
var jm_;
!(function()
{
    function jm()
    {
        console.log(2)
    }
    jm_ = jm;
}
)()
jm_()![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-efhxfnnc-1673098150126)(02 - 副本.assets/image-20230107211022534.png)]](https://images.3wcode.com/3wcode/20240515/b_0_202405151115452310.jpg)
这里就非常方便我们进行js逆向
因为一个网站的加密就1个或者几个函数,
大概流程是这样
用户输入明文的数据 -> 方法1 -》 发包函数 。。。 -》 加密函数
我们只需要将加密函数拿出来,用python或者易语言去模拟发包,执行这个js的加密函数,
这个加密函数可能嵌套再里面 这个时候 就可以用全局变量的方式 将它拿到外面。
变量类型的转换
所有类型的变量 加上字符串 就会变成字符串
变量+字符串=字符串
比如一个方法 加上字符串,就会变成字符串
var jm_;
!(function()
{
    function jm()
    {
        console.log(2)
    }
    jm_ = jm;
}
)()
jm_+""![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dphyt04n-1673098150127)(02 - 副本.assets/image-20230107212111686.png)]](https://images.3wcode.com/3wcode/20240515/b_0_202405151115465980.jpg)
js bom
https://www.runoob.com/js/js-window.html
它是一种浏览器环境,脱离了浏览器在外部不能直接调用的就是bom
到此这篇关于js逆向教程作用域和自执行函数介绍的文章就介绍到这了,更多相关作用域和自执行函数内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
            
                                            
                                            
                                            
发表评论