首页
论坛
专栏
课程

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

2019-7-29 19:40 1885

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

2019-7-29 19:40
1885

解析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)


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



[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最后于 2019-7-29 19:42 被FraMeQ编辑 ,原因:
最新回复 (1)
gtict 2019-7-30 10:37
2
0
可以说下怎么分析功能么,不用具体到哪个功能,只要稍微点下
游客
登录 | 注册 方可回帖
返回