JS逆向基础:作用域、自执行函数与变量类型转换详解

作者:闭包旅人

时间:2026-10-27

浏览:129

本文详解JS逆向中的核心概念,包括局部与全局变量的区别、自执行函数的原理及其在加密函数提取中的应用。通过解析自执行函数的拆解过程、内部函数的外部调用技巧以及变量类型转换规则,帮助开发者掌握利用Python或易语言模拟JS加密逻辑的关键方法。

文章目录

JS逆向教程第24讲:作用域和自执行函数

JS逆向教程第24讲:作用域和自执行函数

变量作用域

局部变量

function jb()
{
	var a="我是局部变量"
	return a;
}

全局变量

var a="我是全局变量"
function jb()
{
	console.log(a)
}
console.log(a)

自执行函数

在页面加载阶段,自执行函数即可自动运行。

!(function()
{
	console.log(2)
}
)()

感叹号(!)前缀表示该函数执行成功。

JS逆向教程第24讲:作用域和自执行函数

拆解自执行函数的执行过程

对于如下所示的函数,若直接尝试运行:

function()
{
	console.log(2)
}

若未使用var声明变量,则会报错。

JS逆向教程第24讲:作用域和自执行函数

var a =function()
{
	console.log(2)
}

JS逆向教程第24讲:作用域和自执行函数

将函数用括号包裹后不会报错,因为此时它被视为一个整体,可理解为无名称的方法,即闭包。

JS逆向教程第24讲:作用域和自执行函数

在括号后追加另一组括号,即可表示执行该函数。

(function()
{
	console.log(2)
}
)()

JS逆向教程第24讲:作用域和自执行函数

在JS逆向过程中,利用这种方式可将函数的执行权传递给另一个函数,从而实现逆向分析。

内部函数的外部调用方法

!(function()
{
    function jm()
    {
        console.log(2)
    }
    jm()
}
)()

可以看到,内部函数是可以被调用的。

JS逆向教程第24讲:作用域和自执行函数

若尝试在外部直接调用内部函数:

!(function()
{
    function jm()
    {
        console.log(2)
    }
}
)()
jm()

将会导致报错。

JS逆向教程第24讲:作用域和自执行函数

解决此问题的方法是在外部定义一个变量,并将内部函数jm赋值给该变量。

var jm_;
!(function()
{
    function jm()
    {
        console.log(2)
    }
    jm_ = jm;
}
)()
jm_()

JS逆向教程第24讲:作用域和自执行函数

这一技巧在JS逆向中非常便捷。

因为一个网站的加密逻辑通常仅包含一个或几个函数。

大致流程如下:

用户输入明文的数据 -> 方法1 -》 发包函数 。。。 -》 加密函数

我们只需提取加密函数,使用Python或易语言模拟发包,并执行该JS加密函数。

若加密函数嵌套在内部,此时便可通过全局变量的方式将其提取至外部。

变量类型的转换

任何类型的变量与字符串进行运算时,结果都会转换为字符串。

变量+字符串=字符串

例如,将一个方法与字符串相加,结果将变为字符串。

var jm_;
!(function()
{
    function jm()
    {
        console.log(2)
    }
    jm_ = jm;
}
)()
jm_+""

JS逆向教程第24讲:作用域和自执行函数

JS BOM

参考链接:https://www.runoob.com/js/js-window.html

BOM代表浏览器环境,脱离浏览器环境后无法直接调用的部分即属于BOM范畴。

至此,关于JS逆向教程中作用域和自执行函数的介绍完毕,更多相关内容请搜索本站历史文章或继续浏览后续文章,希望大家多多支持本站!

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章