首页
社区
课程
招聘
[原创]某保护加固简单分析
2019-7-29 19:40 11176

[原创]某保护加固简单分析

2019-7-29 19:40
11176

解析libUE4.so 的时候发现被加密了,代码解析出来不正确。简单的分析了一下加固方式。


libUE4.so 依赖的 libtprt.so 比较可疑,有可能是做解密用的。既然会解密,那么一定会调用 mprotect 修改内存属性。分析了几处调用mprotect 的地方。


1处是:




这处是引用MSHookFunction的痕迹,用来hook mono 的函数进行解密的。具体不多说,感兴趣的可以看下如何处理mono的


2处是:


这处是用来解密自身的 .tptext段的


3处是:



用来解密libUE4.so的,具体参数的含义:


这里是在case 3的情况解密的:

具体解密规则是获取libtprt.so 的crc值取16-24位值作为key进行异或 ,简单写了一个脚本进行解密

import lief
from zlib import crc32

name = 'libtprt.so'
ue4_name = 'libUE4.so'
new_ue4_name = 'libUE4.so' + '.new'

with open(name, 'rb') as fp:
    tprt_bin = fp.read()

with open(ue4_name, 'rb') as fp:
    ue4_bin = fp.read()

ue4_binary = lief.parse(ue4_name)
ue4_section = binary.get_section('.text')

crc = crc32(tprt_bin) & 0xffffffff
key = (crc >> 16) & 0xff

ue4_text_data = ''
for i in range(ue4_section.size):
    ue4_text_data += chr(ord(ue4_bin[ue4_section.offset + i]) ^ key)

new_ue4_bin = ue4_bin[:ue4_section.offset] + ue4_text_data + ue4_bin[ue4_section.offset+ue4_section.size:]

with open(new_ue4_name, 'wb') as fp:
    fp.write(new_ue4_bin)


具体样本在哪里下载就不用我多说了吧。


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

最后于 2019-7-29 19:42 被FraMeQ编辑 ,原因:
收藏
点赞4
打赏
分享
最新回复 (3)
雪    币: 2371
活跃值: (2237)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
gtict 2019-7-30 10:37
2
0
可以说下怎么分析功能么,不用具体到哪个功能,只要稍微点下
雪    币: 3712
活跃值: (1266)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
不知世事 1 2019-9-23 14:04
3
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
mb_tvrnkcwf 2022-11-11 21:12
4
0
大佬有没有联系方式
游客
登录 | 注册 方可回帖
返回