AST反混淆实战|找出某里滑块226混淆代码隐藏的字符串

关注它,不迷路。       

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!

1. 常见的字符串

在还原控制流之后,接下来的动作就是还原字符串了,在混淆代码中,可以看到类似这样的代码:

var f = "\u01de\u01dc\u01d1\u01d1";
var m = "";
var b = 0;
while (b < f.length) {
    var j = 445 ^ f.charCodeAt(b);
    m += String.fromCharCode(j);
    b++;
}

它可以置换成:

var m = 'call';

以及这样的代码:

U = "\u0307\u0366\u0314\u0334\u0355\u0368\u0309\u037b\u031c\u0369\u0304\u0361\u030f\u037b\u0308\u0333\u0341\u0324\u0350\u0325\u0357\u0339\u0319\u036d\u0305\u036c\u031f\u0344\u0325\u037e\u034f\u0312\u034f\u036e\u0353\u036e\u030f\u0354\u0364\u0339";
se = "";
$ = 0;
ke = 0;
while (ke < U.length) {
    if (!ke) {
        $ = 881;
    }
    Ee = U.charCodeAt(ke);
    De = Ee ^ $;
    $ = Ee;
    se += String.fromCharCode(De);
    ke++;
}

它可以置换成:

se = 'var a=arguments;return this[a[1]]!==a[0]';

还有这样的代码:

ae = "c";
ae += "han";
ae += "nel";
ae += "Inter";
ae += "pretation";

它可以置换成:

ae = 'channelInterpretation';

以上的还原,根据特征的不同,需要编写不同的还原插件。这样的替换,大大减少了代码量。让分析变得更容易。

上面的字符串是很容易被发现并还原的。还有一类字符串需要研究代码才能发现并将其还原。

2. 隐藏的字符串

再将整个混淆代码还原后,其实可以发现他的函数 函数 i,是个递归函数,其实也是一个个函数组成,如:

32c456307cd7fdbb322fce90421cbc02.png

通过不同的实参,来执行不同的语句,其实是可以看成一个个的函数。

这个时候,可以发现有个 "函数" 比较特殊,有很多的函数调用:

4e2c6df1eeba37a3fcaace352d683ed4.png

可以看到,实参都一样,并且,还有一个特殊的地方,就是它的前一个语句还后一个语句,基本都是一样的:

s.push(2285859110262, 1, 2);
i(29, 2, -1);
Ke = s.pop();

基本都是这种类型,在混淆代码中还比较多,先是变量 s push一些数值进去,经过 i 函数的处理后,再 pop给其他的变量。

来看看 i(29,2,-1)到底是干嘛的:

f584e9810b0c5fcfc12a15456f83f2d4.png

这不就和上面的比较类似嘛,最后 s 有个 push的动作,函数结束后,又 pop了,因此可以断定,它就是保存了结果(字符串),然后再pop给其他的变量使用。

3. 代码改写

将代码抠出来并改写:

0f5d850a8ad3a43fc5c0a3d8a412ae77.png

  1. 先是定义了一个变量 s,

  2. 然后将 if (29 == o) 里面的代码抠出来,并改成成函数

  3. 根据代码中的提示,给 s push几个数值,然后调用 i_29函数,然后再将 s 给 pop出来。

  4. 得到 pop出来的值 :toString.

07b17cfb9ffb220f323297491aae34fa.png

有个这个函数,就可以将 类似上面的代码全部进行还原了。如下面的代码:

s.push(19, 2319055194983, 2, 1);
i(29, 2, -1);
fo = s.pop();

可以置换成:

fo = "toString";

完美!

今天的文章就分享到这里,后续分享更多的技巧,敬请期待。

74839f004e2fd89b55b76c8c2c4228be.jpeg

欢迎加入知识星球,学习更多AST和爬虫技巧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值