欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

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

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

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

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功