首页
社区
课程
招聘
7
[原创]某视频平台关键 so vm 解释器还原
发表于: 2024-7-29 14:48 42046

[原创]某视频平台关键 so vm 解释器还原

2024-7-29 14:48
42046

0x00 前言

曾经的曾经,我们还是懵懂无知 de 看待这个世界,直到被世界鞭挞的体无完肤,才对世界有一点点理解。

将 metasec_xx.so 拖入 ida,ida 很自信的帮我们把 so 分析完毕,查看区段信息,ok,没有压缩或加密,可以直接静态分析了(ida server 总是断,用 unidbg 调试没有 ida 直观,lldb/gdb 又太古老了,不如使用 idapython 调 unicorn),找到入口,开始分析。

0x01 开始分析

跟踪关键算法从 java 层调用到 native 层之后,最终会调用一个很大的函数

F5 状态下

可以确定该函数是 vm 的入口,并且有混淆,使 ida 反编译失败,看看汇编

ok,不是 ollvm 的混淆。

0x02 混淆及去混淆

分析一下这段混淆的含义

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
MOV             W9, #9        ; 全新的变量赋值
STR             X9, [SP,#0xA0+var_58] ; 将这个写入到堆栈中
LDR             X9, [SP,#0xA0+var_58] ; 又取出
MOV             W15, #0x11    ; 全新的变量赋值
STR             X15, [SP,#0xA0+var_58] ; 写入又取出
LDR             X15, [SP,#0xA0+var_58]
ADD             X0, X9, #1    ; x0=x9+1=10
ADD             X3, X9, #2    ; x3=x9+2=11
MUL             X9, X0, X9    ; x9=x0*x9=90
MOV             X7, #0xAAAAAAAAAAAAAAAA ; 全新的变量赋值
ADD             X0, X15, #1   ; x0=x15+1=0x12
MUL             X9, X9, X3    ; x9=x3*x9=11*90=(x9*(x9+1)*(x9+2))=0x3de
MOVK            X7, #0xAAAB   ; x7=0xAAAAAAAAAAAAAAAB
ADD             X3, X15, #2   ; x3=x15+2=0x13
MUL             X15, X0, X15  ; x15=x15*x0=0x11*0x12
UMULH           X0, X9, X7    ; x0=(x9*x7)>>48=0x294
MUL             X15, X15, X3  ; x15=x15*x3=0x11*0x13=(x15*(x15+1)*(x15+2))
LSR             X3, X0, #1    ; x3=x0/2
LSL             X3, X3, #1    ; x3=x3*2=x0
ADD             X0, X3, X0,LSR#1 ; X0 = X3 + (X0 >> 1)=x0+x0/2=1.5*x0=0x3de(应该是用了数学技巧,矩阵转换?)
UMULH           X3, X15, X7
SUB             X9, X9, X0    ; x9=x9-x0=0
LSR             X0, X3, #1
LSL             X0, X0, #1    ; x0=x3
ADD             X0, X0, X3,LSR#1 ; X0 = X0 + (X3 >> 1)=x15
ADRP            X3, #loc_4A85C@PAGE ; 地址0
SUB             X15, X15, X0  ; x15=x15-x0=0
ADRP            X0, #loc_4ACF8@PAGE ; 地址1
ADD             X3, X3, #loc_4A85C@PAGEOFF
ADD             X0, X0, #loc_4ACF8@PAGEOFF
ADD             X9, X9, X3    ; x9=地址0
ADD             X15, X15, X0  ; x15=地址1
CMP             W14, #3       ; 获取bytecode的控制码
CSEL            X9, X9, X15, CC ; 根据上面的比较判断是去地址0,还是地址1
BR              X9

可以看到在写地址前,和比较前的一些运算完全没用,关键的只是后面地址和判断条件,那么去混淆的时候只要保存这块就行。

先手动去混淆

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
CMP             W14, #3
B.CC            loc_4A85C
B               loc_4ACF8
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP

再看看后面是不是都是这样的

可以确定,该类混淆是通过在跳转指令中将跳转地址转为计算值,比较后写入到寄存器中实现跳转,ida 默认没有自动给你分析这个结果,导致反编译失败(中间的多余计算也是一个干扰)。


[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

最后于 2024-7-29 14:49 被zhnnmsl编辑 ,原因:
收藏
免费 7
支持
分享
赞赏记录
参与人
雪币
留言
时间
Ram98
非常支持你的观点!
2024-10-22 14:09
mb_hgrbqfun
谢谢你的细致分析,受益匪浅!
2024-10-22 10:48
zouzhiqiang
+1
你的帖子非常有用,感谢分享!
2024-10-22 09:47
PLEBFE
为你点赞!
2024-9-21 05:01
mb_vjpiriil
+1
感谢你的贡献,论坛因你而更加精彩!
2024-7-31 19:50
0xK4ws
这个讨论对我很有帮助,谢谢!
2024-7-30 19:19
养只猫不好么
谢谢你的细致分析,受益匪浅!
2024-7-30 18:31
打赏 + 10.00雪花
打赏次数 1 雪花 + 10.00
收起 
赞赏  mb_vjpiriil   +10.00 2024/07/31 感谢分享~
最新回复 (9)
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
有个疑问,遇到几个vm.。样本,伪代码 和正常代码 看不出来啥区别
大佬是通过啥特征确定 是否是vm的?
2024-7-29 21:22
0
雪    币: 1461
活跃值: (3336)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2024-7-30 18:32
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
大神
2024-8-1 12:57
0
雪    币: 663
活跃值: (2615)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
佬 有样本或版本号吗
2024-8-8 11:16
0
雪    币: 348
活跃值: (1003)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
wx_墨_198 佬 有样本或版本号吗
34.4.4 
2024-8-9 09:40
0
雪    币: 348
活跃值: (1003)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
mb_ldbucrik 有个疑问,遇到几个vm.。样本,伪代码 和正常代码 看不出来啥区别 大佬是通过啥特征确定 是否是vm的?
问题太宽泛了,你要不先去看看什么是vm
2024-8-9 10:13
0
雪    币: 0
活跃值: (632)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
如果有handle 代码,可以在handle代码上面加打印,把opcode跑一遍,流程就出来了。
2024-8-19 11:00
0
雪    币: 625
活跃值: (1602)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark!
2024-10-18 19:58
0
雪    币: 2381
活跃值: (3029)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mark~
2024-10-22 08:51
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册