吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

[Web逆向] 某酷ckey签名生成算法系列--(二)ast代码结构逻辑反混淆

[复制链接]
漁滒 发表于 2021-12-24 22:15

@TOC

首先格式化一下代码看看

1.png

这里面的代码混淆的老母亲都不认得了。有多个switch,非常长的三元表达式,逗号表达式等等,使得即使手动单部调试,也非常的难以进行。那么这时就需要对源代码进行一些处理,使得它能够方便调试,同时更加容易阅读。

此时就需要用到AST了,来对源代码进行反混淆,并且替换本地js进行调试,ast的相关说明文章
1.《JavaScript AST其实很简单》一、相关基础知识与环境配置
2.《JavaScript AST其实很简单》二、Step1-函数调用还原
3.《JavaScript AST其实很简单》三、Step2-对象调用还原
4.《JavaScript AST其实很简单》四、Step3-分支流程判断
5.《JavaScript AST其实很简单》五、Step4-平坦化控制流

本系列文章反混淆使用的是nodejs中的babel库,亲测相当之好用

2.png

最开始看到的就是这种超级长的三元表达式,我们知道最简单的三元表达式类似于下面的样子

a > b ? c : d

他是在前面条件成立时执行c部分的代码块,否则执行d部分的代码块。这与if判断的逻辑极为相似,如果把上面的代码改一下,变成if的语句,看起来将会相对简单点

if(a > b){
        c;
}else{
        d;
}

此时代码可以说是一目了然。当形如上面多个三元表达式嵌套的时候,如果改成if的形式,会不会使得代码看起来相对好阅读一点呢,来尝试一下使用ast还原这种三元表达式

3.png

还原后的代码看上去有了规律可循,不再是一行直接执行完成,连调试都没有办法进行。那么还原了这个就可以进行调试了吗?实际上还是很难调试的,还需要继续反混淆和优化

4.png
可以看到代码中有一些try的代码块,在网页端调试的时候,一般情况下只需要注意try里面的部分,catch的部分不需要,那么就可以将try中的代码提取出来,减少代码的数量

5.png
这时代码看起来更加简洁了。这时进行调试的话,代码会不断反复横跳,导致心跳爆炸,那么还需要想办法继续来反混淆这个js,再回来看看直接反混淆出来的if语句

6.png

仔细观察可以发现,每一个if判断的AI值(每一个函数的变量名不一样)都有一个与之唯一对应的执行语句。那么这种语法结构就和switch的结构非常相似。

****省略代码******
if (12 == Ai) {
  N = Se[vo],Q = N[Z](), li = Q ? 11460 : 1475;
} else {
  if (12 > Ai) {
    if (5 == Ai) {
      li = 8804;
    } else {
****省略代码******

那么按照上面的逻辑,可以改写为下面的形式

****省略代码******
switch (Ai) {
        case 12:
                N = Se[vo],Q = N[Z](), li = Q ? 11460 : 1475;
        case 5:
                li = 8804;
****省略代码******

继续尝试还原一下看看
7.png

这是看起来,感觉更加有规律找了,调试起来到switch的时候,也可以快速知道它执行的是哪一行的代码

8.png

此时代码还有很多这种没有参数的立即执行函数,但是有一些函数又没有这个立即执行函数,为了使代码更加相似,方便后续的还原,这里需要去掉这些立即执行函数,直接把所有的立即执行函数的函数内容抽出来就可以

9.png
这时的代码一致性更加高,使得后续捕获特征更加容易了

10.png
但是经过上面的操作,使得原本两层的switch变成了三层,函数结构貌似变得更加复杂了。如果可以把多层的switch全部变成一层,那么调试起来就方便多了,将在下一章继续讲解。

免费评分

参与人数 7吾爱币 +9 热心值 +7 收起 理由
pyw + 1 + 1 我很赞同!
开心熊猫741 + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
seetimeuc + 1 + 1 谢谢@Thanks!
ofo + 3 + 1 支持算法大佬
开火包 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
bfvA178 + 1 + 1 热心回复!

查看全部评分

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

EvilRecluse 发表于 2021-12-24 22:16
支持一下漁滒
漁滒NB
徽州公子 发表于 2021-12-24 22:21
Meffy 发表于 2021-12-25 14:59
头像被屏蔽
shayu2021 发表于 2021-12-25 18:48
提示: 作者被禁止或删除 内容自动屏蔽
erui 发表于 2021-12-25 22:52
这个难度大多了,看代码都头痛,里面使用了很多的switch
gaoliying 发表于 2021-12-26 09:03
支持大佬!感谢楼主分享了!
aa110788 发表于 2021-12-26 11:03
看着很厉害 的样子
lykenan 发表于 2021-12-27 08:50
感谢分享
ptzhuf 发表于 2021-12-27 11:09
不知道能用多久啊, 以前干的一段时间就换算法了 哈哈哈.
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-16 02:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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