-
-
[原创]某保护加固简单分析
-
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编辑
,原因: