1.?何重????дԴ??
2.重写 CryptoJS二、WordArray 与位操作
?写源????дԴ??
理解抽象语法树(AST)及其在JavaScript逆向工程中的应用,是码何深入解析混淆代码的关键。AST是重写一种描述源代码抽象语法结构的树状形式,它为理解、源码修改以及重写代码提供了一种通用的文件源码客专辑平台表示方式。在本篇文章中,何重我们将探索AST的写源用途、如何使用Babel进行代码转换,码何以及在逆向工程中的重写应用实例。
AST在JavaScript中可以使用在线解析工具如astexplorer.net/,源码通过选择语言、文件编译器和操作选项,何重将代码转换为语法树,写源便于深入分析。码何
在编译过程的net core app源码三个阶段中,词法分析、语法分析和代码生成,AST起着核心作用,它在语法分析阶段生成,为后续代码生成提供结构化表示。
词法分析阶段识别单词序列,生成token符号流;语法分析阶段将单词序列组合成语法短语,形成AST;代码生成阶段将AST转换为可执行代码。
Babel作为JavaScript编译器,具备解析、转换和生成代码的多种功能。利用Babel,可以将JavaScript代码转换为AST语法树,再进行操作后,生成新代码。wordpress收费插件源码
Babel的各个功能包,如@babel/core、@babel/parser、@babel/traverse和@babel/generator等,提供了丰富的方法,用于代码解析、遍历和生成。
在逆向解混淆中,主要使用Babel的@babel/parser将代码解析为AST,@babel/traverse遍历AST进行修改,@babel/generator将修改后的AST重新生成代码。
具体操作如修改变量名、值,增加或删除代码块等,通过遍历AST结构进行实现。车辆检测软件源码例如,使用@babel/traverse遍历所有节点,根据节点类型进行修改,如数字增加后再乘以2,字符串替换为特定值。
在处理相同类型的节点时,可以使用@babel/traverse的visitor对象,遍历所有节点并应用统一的处理逻辑。例如,对所有变量进行统一操作,增加或修改内容。
通过@babel/types构建新的AST节点,可以实现更复杂的代码操作,如在现有代码中添加新的变量声明。
AST的koa洋葱模型源码使用在逆向工程中尤为重要,它为理解混淆代码提供了直观的结构化表示,通过操作AST,可以更高效地恢复原始代码逻辑,进行代码分析与修改。
通过学习和实践Babel的使用,结合在线解析工具和深入理解AST的原理,可以逐步掌握逆向解混淆的技术,为深入分析和重构复杂代码奠定基础。
重写 CryptoJS二、WordArray 与位操作
源码地址: entronad/crypto-es 重写 CryptoJS一、ECMAScript 类与继承
位操作是各种编码、散列、加密算法的基础。位操作对象本质上是一段连续的比特序列。在性能上,直接操作连续内存位是最佳选择。C++中的数组与指针、ECMAScript 6中的ArrayBuffer提供了此功能。然而,JavaScript最初作为浏览器脚本语言设计,并未直接提供内存操作特性。但通过二进制位操作符,仍可实现对连续比特序列的位操作。
标准规定,在位操作运算中,不论操作数为何种类型,均通过ToInt()转换为位有符号整数,进行位运算。因此,通过拼接位有符号整数,可以实现对连续比特序列的位操作。CryptoJs正是基于此原理,实现了名为WordArray的类,作为连续比特序列的抽象,用于各种位操作。WordArray是CryptoJs中最核心的类,所有主要算法的操作对象都是WordArray实例。理解WordArray是理解CryptoJs算法的基础。
WordArray定义在core.js中。它直接继承自Base类,包含words和sigBytes两个成员变量。words为位有符号整数的数组,通过顺序拼接数组中的数形成比特序列。JavaScript中的位有符号整数通过补码转换为二进制,具体表示形式不重要,实际使用中比特序列多用字节或进制表示。位等价于4个字节,或8个进制数。
编码算法的对象为字符,实际比特序列长度通常是整字节,即8的倍数,但不一定是的倍数。因此仅通过words数组不能反映实际长度,可能有多余位。sigBytes变量表示实际有效字节数。可直接传入这两个字段构建实例。
为了方便sigBytes对words数组的控制,WordArray定义了一个名为clamp的方法。此方法用于压缩,移除非有效字节。保留全部有效字节,去除末段无有效字节的word。对于中间段非全有效字节的情况,首先计算去除位数,生成掩码,通过与sigBytes右移操作找到分界word下标,与掩码取与,将无效字节置零。
concat方法用于拼接两个WordArray实例,主要麻烦在于处理分界word。在CryptoJS内部,WordArray是算法操作和结果的主要载体。然而,外部使用者通常期望获得特定编码方式的字符串结果。因此,WordArray提供了重写的toString方法。
考虑到words数组为引用类型,clone方法需要重写,通过slice复制一份拷贝。此外,还提供静态函数生成指定字节长度的随机WordArray。由于Math.random()提供的非安全随机数且为位浮点数,生成过程中进行了适当处理。