[原创]某保护加固简单分析
解析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)
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
