吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4360|回复: 9
收起左侧

[Web逆向] 某酷ckey签名生成算法系列--(三)ast代码控制流平坦化

  [复制链接]
漁滒 发表于 2021-12-26 13:39

@TOC

1.png
观察三个switch的值分别是Ci、mi和Ai。而这三个值又因为li的确定而确定的。也就是说已知li的值,就可以分别计算出Ci、mi和Ai,就可以确定执行的是哪一条语句。那么反过来,如果已知Ci、mi和Ai三个值,也可以反向计算出li的值了。

那么按照这个思路。就可以把多重的case的值计算出其对应最上一层的值,变成最简单的switch结构,形如下面

******省略代码******
for (var li = 16996; void 0 !== li;) {
    var Ci = 31 & li,
        fi = li >> 5,
        mi = 31 & fi,
        bi = fi >> 5,
        Ai = 31 & bi;

    switch (Ci) {
      case 0:
        switch (mi) {
          case 0:
            switch (Ai) {
              case 0:
                Dn.push(0), li = 11522;
                break;
              case 1:
                L = mo, li = 24641;
                break;
******省略代码******

上面这样的代码,应该被压缩成下面

******省略代码******
for (var li = 16996; void 0 !== li;) {
        switch (li) {
              case 0:
                Dn.push(0), li = 11522;
                break;

              case 1024:
                L = mo, li = 24641;
                break;
******省略代码******

使得原来需要处理三个变量的结构,直接变成只需要处理一个变量,调试上去会变得简单很多。

2.png
接着下来调试发现,一条语句里面是一个逗号表达式,一次就执行完了,没有办法一句一句的分析,所以想把这些逗号表达式都分开,更加清晰的来分析

3.png
这里用蔡老板的代码直接搞定,这一步相对是简单的,就不太详细说了,看看效果对比

4.png
此时可以看到,所有的逗号表达式都变成了一条一条的语句了,为后面的去除控制流平坦化提供了可能。

这时即使调试代码,依然会发现运行过程中,代码一直上下跳转,而不是从上往下的执行,需要想办法把这种跳来跳去的情况去除。

5.png

仔细观察可以发现,每一个case的最后一句,总是指向他的下一个case,那么如果把每一个case,按照这样拼接起来,那么函数执行的时候,不就不会再跳来跳去的了

******省略代码******
  case 0:
        Dn.push(0);
        li = 11522;
        break;
******省略代码******

拼接一次变成

******省略代码******
  case 0:
        Dn.push(0);
        li = z ? 8833 : 15362;
        break;

******省略代码******

经过非常多次拼接后,使得每一个switch仅仅只有一个case。
6.png

switch中只有一个case,不是相当于没有这个结构吗,最后直接去掉这个switch结构,仅仅保留函数内容

7.png
这个时候控制流平坦化已经去除完成,整个代码已经是从上往下的执行了。但是代码中的字符串还是被混淆的,形如下面。下一章尝试还原这些字符串

8.png

免费评分

参与人数 7吾爱币 +10 热心值 +7 收起 理由
triangle111 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
projectD + 1 + 1 我很赞同!
ofo + 3 + 1 发现好多复杂的算法中都有无用的脏代码,增加代码长度的?
GY19699 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
zhchxu123 + 1 + 1 谢谢@Thanks!
天空宫阙 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zhchxu123 发表于 2021-12-26 15:12
学到了学到了,每天看一看
zztoozzt 发表于 2021-12-26 16:44
大佬太强了,我现在还在学习研究你上次分享的猿人学第二题思路
xlsz 发表于 2021-12-26 17:08
mark68 发表于 2021-12-27 17:32
还是有点太难对于我来说。。
ll090822 发表于 2021-12-29 08:41
谢谢分享,学习的好东西
头像被屏蔽
hua111 发表于 2022-1-17 15:17
提示: 作者被禁止或删除 内容自动屏蔽
Ram9943 发表于 2022-3-14 11:48
大佬厉害
lijun19990416 发表于 2022-8-8 09:43
大佬,能不能发一下相应的代码呀
rmin 发表于 2022-9-5 17:57
大佬,想咨询一下如果是出现那种控制流死循环的情况下,有没有什么好方法来进行处理。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 21:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表