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

变量作用域
局部变量
function jb()
{
var a="我是局部变量"
return a;
}全局变量
var a="我是全局变量"
function jb()
{
console.log(a)
}
console.log(a)自执行函数
在页面加载阶段,自执行函数即可自动运行。
!(function()
{
console.log(2)
}
)()感叹号(!)前缀表示该函数执行成功。

拆解自执行函数的执行过程
对于如下所示的函数,若直接尝试运行:
function()
{
console.log(2)
}若未使用var声明变量,则会报错。

var a =function()
{
console.log(2)
}
将函数用括号包裹后不会报错,因为此时它被视为一个整体,可理解为无名称的方法,即闭包。

在括号后追加另一组括号,即可表示执行该函数。
(function()
{
console.log(2)
}
)()
在JS逆向过程中,利用这种方式可将函数的执行权传递给另一个函数,从而实现逆向分析。
内部函数的外部调用方法
!(function()
{
function jm()
{
console.log(2)
}
jm()
}
)()可以看到,内部函数是可以被调用的。

若尝试在外部直接调用内部函数:
!(function()
{
function jm()
{
console.log(2)
}
}
)()
jm()将会导致报错。

解决此问题的方法是在外部定义一个变量,并将内部函数jm赋值给该变量。
var jm_;
!(function()
{
function jm()
{
console.log(2)
}
jm_ = jm;
}
)()
jm_()
这一技巧在JS逆向中非常便捷。
因为一个网站的加密逻辑通常仅包含一个或几个函数。
大致流程如下:
用户输入明文的数据 -> 方法1 -》 发包函数 。。。 -》 加密函数我们只需提取加密函数,使用Python或易语言模拟发包,并执行该JS加密函数。
若加密函数嵌套在内部,此时便可通过全局变量的方式将其提取至外部。
变量类型的转换
任何类型的变量与字符串进行运算时,结果都会转换为字符串。
变量+字符串=字符串例如,将一个方法与字符串相加,结果将变为字符串。
var jm_;
!(function()
{
function jm()
{
console.log(2)
}
jm_ = jm;
}
)()
jm_+""
JS BOM
参考链接:https://www.runoob.com/js/js-window.html
BOM代表浏览器环境,脱离浏览器环境后无法直接调用的部分即属于BOM范畴。
至此,关于JS逆向教程中作用域和自执行函数的介绍完毕,更多相关内容请搜索本站历史文章或继续浏览后续文章,希望大家多多支持本站!
什么时候该用JS构造器:与工厂模式、字面量的选择对比
2026-11-05 16:18:22
推荐几款轻量级JS照片墙开源库及对比
2026-11-05 15:56:19
JavaScript递归写法有哪些常见陷阱及避免方法
2026-11-05 14:53:38
JS数组浅拷贝与深拷贝怎么选?场景与方法总结
2026-11-05 14:41:02
p5.js 中 setup() 和 draw() 函数的执行机制详解
2026-11-05 12:32:38
