分析和反混淆复杂的 JS 代码

逆向工程 调试 混淆 javascript
2021-07-03 05:37:42

我正在寻找逆向工程这里发现的一段非常丑陋的 JS

据我所知,这个脚本会在我的浏览器上生成并设置一些 cookie,以在网站上识别它。去混淆它似乎非常困难,因为它是由 Jscrambler 加密的,而且它太大了,似乎没有像https://beautifier.io/这样的网站可以用它做任何事情。

目标是能够手动生成这些 cookie 并将它们发布到站点,这样我就不需要浏览器来访问站点。

我的问题是:

1)有没有办法调试此代码,例如识别哪些行生成和设置cookie?我曾尝试在 cookie 集上设置断点,但似乎没有帮助。

2) 像我这样的 JS 菜鸟可以轻松地对此进行反混淆吗?我应该使用哪些工具?

编辑:如果有人可以参与,我愿意补偿。

1个回答

它只需要大量的时间,但没有无法反混淆的 JavaScript 代码。

我第一次在这里看到一段没有任何明显弱点的混淆 js。

但是beauty之后的起点是找到基本的var赋值,然后用它的值准确地替换var的出现

重申

步骤1

每次更换;使用;\n为此,您必须使用能够替换正则表达式的编辑器,例如 VSCode 或 Sublime Text(以及许多其他的)我每行只有一条指令

第2步

看第一个任务

T8jj.W4C="3421";

我将用值替换T8jj.h6C以下代码中出现的每个"3063"但是之前,使用正则表达式搜索,我会确保只有一种赋值的发生,否则我会做一个更微妙的替换。

在这种情况下,只有一项任务!很好,所以使用正则表达式来替换

\bT8jj\.W4C\b

"3421"

笔记 !!!!我们使用了单词分隔符并输入了转义的点,否则你可能会错误地替换 ASDAS T8jj E W4CS DFSDFD,这会产生错误!

第一个 regexp 避免最终改变 new 的未来 occurrency。不要忘记尾随,"因为对 js 来说在语法上很重要。3421是整数,"3421"是字符串。

例如,在 roww 22233 这将替换

I(g9L.r3y(+T8jj.W4C));

I(g9L.r3y(+"3421"));

所以字符串或数字是非常不同的!

您现在认为“我可以删除第一行,因为不再需要它;现在每个参考点都获得了文字价值。” 错误的 !一些混淆器使用字符串连接和其他技术让你陷入陷阱,所以永远不要删除代码!

仅剩 44042 行!

重申

bx8jj.h8C 

有多个分配,因此必须在下一次分配之前仅用“3871”替换,相同的变量接收到“1964”的分配值

建议

  • 使用尾随 \b 并替换 . 和 。搜索时;
  • 如果你只有一个结果或根本没有结果,不要删除作业;混淆代码中的某些点可以使用字符串连接或使用 unicode 字符和 eval 来读取变量值;
  • 用它们的字面值替换 unicode-only 字符串的出现;这将加速代码反混淆;例如'\x6e\x65\x73\x74\x65\x64''nested';