首页
社区
课程
招聘
[原创]F5 Shape最新版逆向分析-加解密和补环境
发表于: 2024-4-24 18:51 10889

[原创]F5 Shape最新版逆向分析-加解密和补环境

2024-4-24 18:51
10889

F5 Shape最新版逆向分析-加解密和补环境

前言

F5 Networks 收购了Shape Security又叫F5 shape,谷歌可以找到该公司相关资料。很多国外站都使用了该公司的产品作为登录接口的反机器人方案。

比如:美西南、xbk等,下文称之为Shape

1
url: aHR0cHM6Ly93d3cuc291dGh3ZXN0LmNvbS8=

Shape是应该是jsvmp的业界天花板了。自定义指令集有200多个。业务代码都编译成了code流。其中指令顺序,js虚拟机函数调用栈,变量存储都是随机的,即使原始收集浏览器信息的函数闭包的调用顺序也会被编译器随机位置。

早在3年前,本人就研究过这个东西,当时没有任何参考资料。纯靠一股子蛮力分析清楚了加解密相关算法。最近看到了一些讨论Shape的帖子,激起了兴趣,又分析下最新版的Shape,有一点点经验,分享出来供大家参考。

JS逆向和安全防护de研究交流可以私聊我

jsvmp

官方资料或者chatgpt的回答,我就懒得抄了,读者可以自行搜索。只说下个人的理解,还有分析jsvmp的大概思路。

PC端的vmp。鼎鼎大名,读者应该都用过或者听过。所谓vmp就是把简单的几行代码,通过自定义指令的方式,把代码膨胀几百倍,让逆向者找不到头绪。

举个简单例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
C++:
void funcAdd(a, b){
    return a+b;
}
 
asm:
.text:0000000140001000 sub_140001000   proc near               ; CODE XREF: sub_140001020+E↓p
.text:0000000140001000                                         ; sub_140001020+21↓p
.text:0000000140001000
.text:0000000140001000 arg_0           = dword ptr  8
.text:0000000140001000 arg_8           = dword ptr  10h
.text:0000000140001000
.text:0000000140001000                 mov     [rsp+arg_8], edx
.text:0000000140001004                 mov     [rsp+arg_0], ecx
.text:0000000140001008                 mov     eax, [rsp+arg_8]
.text:000000014000100C                 mov     ecx, [rsp+arg_0]
.text:0000000140001010                 add     ecx, eax
.text:0000000140001012                 mov     eax, ecx
.text:0000000140001014                 retn
.text:0000000140001014 sub_140001000   endp
 
vmp:
自己搞一个编译器,把汇编指令转为自定义指令,比如把+这个指令对应的add汇编指令搞成一个函数,然后里面各种弯弯绕。
自己维护一个函数的调用栈,变量栈。
上面几行汇编就在vmp这个虚拟机里跑成千上万条,那对逆向分析的人来说,就很难搞清楚这个成千上万到底跑了个啥。
 
jsvmp:
与PC端vmp类似,也是把简单的指令复杂化,具体到Shape的+指令就对应于好几个函数
    , function(c) {
        c.x[c.x.length - 2] = c.x[c.x.length - 2] + c.x[c.x.length - 1]; //c.x就是局部变量栈
        c.x.length -= 1
    }
    , function(c) {
        var E = j[c.W];
        var F = j[c.W + 1];
        c.W += 2;
        var T = c.y.c(E);
        var a = T[F];
        var i = c.x[c.x.length - 1];
        c.x[c.x.length - 1] = i + a
    }
其他各种运算符,比如- & | > < == ! 等等都是如此,对应于一个函数。这样做的目的就是可以自行维护一个函数调用栈和变量栈

所以Shape这个jsvmp也是一个所谓的栈式虚拟机

其实当下前端安全领域,为了隐藏加解密核心代码或者隐藏收集了哪些浏览器信息,VM的种类和实现已经成千上万了。经常分析这类型的人应该是对此一点都不陌生了。

处理jsvmp的思路

一般朴素的处理思路,当然是想办法还原原始代码,这个也确实应该是一劳永逸的终极解决办法。比如AST语法树还原。我也见过使用该方案处理简单VM的实例。但是对于稍微复杂点的VM,这个办法要么工作量很大,要么连理论上的可能性都没有了。对于Shape,我的认知来说,还原原始代码应该是绝无可能。

回过头来讲,我们一般只需要分析清楚这段VM执行了什么就行了,所以不还原也是无所谓的。那要搞清楚VM执行了什么,最好的办法就是插装打日志了。输出所有操作到console控制台。通过分析日志搞清楚VM执行了什么。

再回过头来说,有时候我们都不需要知道这段VM执行了什么。我们只需要调用这段VM跑我们需要的结果就行了。那对于纯算法的VM直接跑就行了。对于收集浏览器信息的vm,就要使用补环境大法了。

实战Shape

1.找到shape在哪

chrome浏览器,F12打开开发者工具,打开美西南url,Login登录随便输入账号密码进行登录,触发一个请求,看抓包,请求头里Ee30zvqlwf-A,Ee30zvqlwf-B,Ee30zvqlwf-C,Ee30zvqlwf-D,Ee30zvqlwf-F,Ee30zvqlwf-Z就是Shape加密得到的参数了,不带这几个参数请求是无法成功取到预期结果的。

image

查看启动器也就是请求的调用堆栈即可找到Shape所在的js

image

Shape的特征就是带有如下js

image

image

2.分析Shape执行了什么

插装打日志大法配合F8 F10 F11单步调试,当你差不多按坏了一个键盘,投入至少个把月的时间精力,大概能搞清楚执行了什么。

这里直接说答案:收集浏览器信息,然后加密成上面请求里的各个参数。收集的浏览器信息多到只有你想不到的,没有他们不采集的。

美西南收集了66个浏览器相关的信息

1
2
3
(obj.member=value) ->   (66) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, Array(2),
{…}, {…}, {…}, {…}, {…}, {…}, Array(2), {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…},
{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] 34 (2) [Array(0), Array(13)]

[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2024-4-25 18:01 被rushmaster编辑 ,原因:
收藏
免费 14
支持
分享
最新回复 (7)
雪    币: 3984
活跃值: (31431)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2024-4-25 09:18
1
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2024-4-25 12:54
0
雪    币: 32
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
谢谢
2024-6-2 10:13
0
雪    币: 220
活跃值: (90)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2024-6-6 10:46
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
大佬怎么联系
2024-10-2 12:06
0
雪    币: 32
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
怎么联系
2025-3-6 10:46
0
雪    币: 32
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
怎么联系
2025-3-6 10:47
0
游客
登录 | 注册 方可回帖
返回