首页
社区
课程
招聘
[原创]记使用Trace还原ollvm混淆的函数 #30天写作挑战#
2020-9-1 20:02 27527

[原创]记使用Trace还原ollvm混淆的函数 #30天写作挑战#

2020-9-1 20:02
27527

一、前言

1、题目

https://bbs.pediy.com/thread-260650.htm
​https://bbs.pediy.com/thread-260655.htm

 

二位大佬的两种解题思路,膜拜膜拜

2、这篇帖子你会看到什么

ollvm可以使用ida的trace功能辅助还原,看到样本上手尝试一下。
上面的帖子中有部分使用trace进行辅助还原,这篇帖子是通过trace后的汇编指令进行的ollvm还原过程,记录分享一下过程,不喜勿喷。

3、ida trace功能

图片描述

(1)Instruction tracing

调试器将为每条指令保存所有修改后的寄存器值。
https://www.hex-rays.com/products/ida/support/idadoc/1446.shtml

(2)Basic block tracing

调试器将保存到达临时基本块断点的所有地址。
https://www.hex-rays.com/products/ida/support/idadoc/1628.shtml

(3)Function tracing

调试器将保存发生函数调用或函数返回的所有地址。
https://www.hex-rays.com/products/ida/support/idadoc/1447.shtml

二、还原ollvm混淆函数过程

1、对应到还原函数 sub_13CE4

图片描述

 

定位过程可以参考上面2个帖子

2、通过frida进行函数调用

function call_13CE4() {
    var base_xxx = Module.findBaseAddress("libnative-lib.so")

    if(base_xxx){
        var addr_13CE4 = base_xxx.add(0x13CE4)
        console.log("0x13CE4 :", addr_13CE4)
        var sub_13CE4 = new NativeFunction(addr_13CE4, "void", ["pointer", "int", "pointer", "int", "pointer"])

        var input1_str = "pediy_imyang_lXcaTALmow"
        var input1_buffer = Memory.allocUtf8String(input1_str)
        var input2_str = "www.pediy.com&kanxue"
        var input2_buffer = Memory.allocUtf8String(input2_str)

        var result = Memory.alloc(0x26);// 38

        console.log("input1_str len ", input1_str.length)
        console.log("input2_str len ", input2_str.length)

        sub_13CE4(input1_buffer,input1_str.length,input2_buffer,input2_str.length,result)
        console.log(hexdump(result, {length: result.length}))
    }
}

结果显示:
图片描述

 

参数:

参数1  pediy_imyang_lXcaTALmow
参数2  23
参数3  www.pediy.com&kanxue
参数4  20
参数5  结果地址

结果:

79 79 03 09 00 01 a4 b8 b6 c8 9e b4 7f 4f 29 b4 4d 47 c7 38 2f 85 1a d5 76 18 f9 b8 20 c5 d5 52 98 cb 5f 94 1c 8c

3、在0x13CE4和函数结束的位置0x下断点,trace出来函数中汇编

图片描述

 

trace后的cfg,变黄色就是执行的汇编指令被trace过

 

图片描述

 

sub_13CE4中调用了sub_13808和sub_172D0

4、分析trace文件

(1)分析参数1

参数1 pediy_imyang_lXcaTALmow
图片描述
对应trace文件
图片描述
以 0x0000000000000070看一下具体处理
图片描述
参数1 中的 0x70 -> 0x51,是通过如下进行的查询0x70的位置是0x51
图片描述
最终结果为
图片描述

 

参数1
图片描述
加密后
图片描述

(2)分析参数3

参数3 www.pediy.com&kanxue
图片描述

 

图片描述
trace文件中参数3只用了16个字符进行后续的处理
这里的处理和参数1处理的方式相同
图片描述

 

图片描述

 

参数3
图片描述
加密后
图片描述

(3)结果生成

使用参数1加密后的字节和参数3加密后的字节进行计算加密生成结果

图一

图片描述

图一是 参数1加密字节0x00000000514D43F9 和 参数3加密字节 0x00000000F5F5F531 生成的结果是 0x00000000A4B8B6C8
图二

图片描述

图二是 参数1加密字节0x00000000b6cff93c 变形为 00000000CFF93CB6 (未参与加密)
参数3加密字节 0x00000000514d43f9 和 常数 0x0000000068DE32AA 加密乘车生成的结果是 0x000000009EB47F4F
图三

图片描述

图三是 参数1加密字节0x00000000b6ef9f85 变形为 0x000000009F85B6EF
和 参数3加密字节 0x00000000B631FBA8 生成的结果是 0x0000000029B44D47
图四

图片描述

图三是 参数1加密字节0x00000000cf506afb 变形为 0x00000000FBCF506A
和 参数3加密字节 0x000000003CF77FEF 生成的结果是 0x00000000C7382F85

拼接结果
A4B8B6C8 9EB47F4F 29B44D47 C7382F85
和结果对比

 

797903090001 a4b8b6c8 9eb47f4f 29b44d47 c7382f85 1ad57618 f9b820c5 d55298cb 5f941c8c

 

根据以上的分析可以得到算法如下:
参数1加密后字节

514d43f9 b6cff93c b6ef9f85 cf506afb ef208329 3ca8f563 63636363 63636363

参数3加密字节

f5f5f531 514d43f9 b631fba8 3cf77fef f5f5f531 514d43f9 b631fba8 3cf77fef
循环8次
参数1加密后字节会随着循环次进行变化
0次 514d43f9 -> 514d43f9 
1次 b6cff93c -> cff93cb6 
2次 b6ef9f85 -> 9f85b6ef  
3次 cf506afb -> fbcf506a 
....
这是有规律的根据循环进行的变化

在第1次和第5次的时候
参数1加密后字节只是做的了变形 未参加加密
参数3加密字节与常量0x0000000068DE32AA进行了加密
其他循环中都是参数1加密后字节与参数3加密字节进行加密操作

以图一为例,计算如下:

X8 = 0x00000000f5f5f531

X9 = 0x0000000514d43f9

W11 = X8 & (X8^X9)

w8 = X9&(X9^X8)

w8 = 0xa4b8b6c8

797903090001 这个值的赋值可以通过2种方式

方法一: 动态调试的时候 x4指向的地址 前六为是固定的 直接可以拿到(多次调试的结果)
方法二:trace中找赋值过程

图片描述

 

以上就是通过对trace的汇编指令进行的ollvm函数还原,按以上信息可以写出算法,偷懒先不写了,可以看一下上面的帖子。

三、总结

1、trace的分析还需要继续加深学习和掌握,上面的分析中对内存中连续值的赋值和拼装找的还不是很好;
2、非常感谢看雪论坛,故把分析过程分享给大家
3、这都是大佬的经验之谈,牛逼牛逼
图片描述

 

图片描述


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2020-9-2 09:43 被neilwu编辑 ,原因:
上传的附件:
收藏
点赞18
打赏
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  Editor   +1.00 2020/09/02 精品文章~
最新回复 (19)
雪    币: 2244
活跃值: (1836)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
number_Z 2 2020-9-2 11:30
2
0
tql
雪    币: 19586
活跃值: (60163)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
Editor 2020-9-2 12:30
3
0
tql!感谢分享!
雪    币: 10547
活跃值: (6659)
能力值: ( LV12,RANK:214 )
在线值:
发帖
回帖
粉丝
neilwu 1 2020-9-2 12:46
4
0
Editor tql!感谢分享!
感谢看雪 
雪    币: 6571
活跃值: (3823)
能力值: (RANK:200 )
在线值:
发帖
回帖
粉丝
LowRebSwrd 4 2020-9-2 13:51
5
0
感谢分享! 
雪    币: 10547
活跃值: (6659)
能力值: ( LV12,RANK:214 )
在线值:
发帖
回帖
粉丝
neilwu 1 2020-9-2 17:38
6
0
LowRebSwrd 感谢分享!
雪    币: 10547
活跃值: (6659)
能力值: ( LV12,RANK:214 )
在线值:
发帖
回帖
粉丝
neilwu 1 2020-9-2 17:39
7
0
number_Z tql[em_91]
雪    币: 6
活跃值: (980)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lookzo 2020-9-3 08:15
8
0
有时间再研究哈,多谢楼主分享
雪    币: 3368
活跃值: (692)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
cnzzh 2020-9-3 16:33
9
0
感谢分享
雪    币: 1378
活跃值: (3067)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风中小筑V 2020-9-4 21:21
10
0
学到了..
雪    币: 158
活跃值: (755)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Mars. 2020-9-5 14:21
11
0
66666学以致用
雪    币: 83
活跃值: (1047)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
killpy 2 2020-9-5 17:46
12
0
666
雪    币: 19586
活跃值: (60163)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
Editor 2020-9-7 16:53
13
0

欢迎更多的小伙伴参与到 #30天写作挑战#中来!活动详情:https://bbs.pediy.com/thread-261705.htm


雪    币: 3212
活跃值: (693)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
疯子Tear 2020-9-8 06:06
14
0
tql
雪    币: 481
活跃值: (2163)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
Zard_ 2020-9-8 16:45
15
0
这特强了吧 ddctf2020 那道安卓用这个方法能去ollvm混淆吗?
雪    币: 10547
活跃值: (6659)
能力值: ( LV12,RANK:214 )
在线值:
发帖
回帖
粉丝
neilwu 1 2020-9-8 17:27
16
0
Zard_ 这特强了吧 ddctf2020 那道安卓用这个方法能去ollvm混淆吗?[em_71]
求样本
雪    币: 481
活跃值: (2163)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
Zard_ 2020-9-8 19:14
17
0
ddctf.zip    链接: https://pan.baidu.com/s/1u38ccXmLTfDgbdle5tB8vg  密码: c5d0  三道题 好像有两道都用了ollvm混淆
雪    币: 10547
活跃值: (6659)
能力值: ( LV12,RANK:214 )
在线值:
发帖
回帖
粉丝
neilwu 1 2020-9-8 21:34
18
0
Zard_ ddctf.zip 链接: https://pan.baidu.com/s/1u38ccXmLTfDgbdle5tB8vg 密码: c5d0 [em_71] 三道题 好像有两道都用了ollvm ...
谢谢你 
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
长野飘荡 2022-2-18 12:39
19
0
你好请问trace时,类似 F42D1E08: got SIGSEGV signal (Segmentation violation) (exc.code b, tid 19422) 这样的报错是什么原因啊,用的是ida7.0
雪    币: 62
活跃值: (572)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
万里星河 2023-3-14 13:13
20
0
支持一下
游客
登录 | 注册 方可回帖
返回