查看原文
其他

使用unidbg破解孤挺花字符串混淆并修复so

Avacci 看雪学苑 2022-07-01

本文为看雪论坛优秀文章

看雪论坛作者ID:Avacci

(题外话:首先恭喜一下高研班学员“一颗金柚子”拿到阿里offer!越努力越幸运 —— 【看雪高研班】一颗金柚子访谈录

目标:字符串混淆技术是有效对抗静态分析的手段。对于在init_array节函数中进行混淆字符串的解密的保护技术,请分析课上使用AndroidNativeEmu解决的原理,并使用Unidbg进行实现
 
老师上课时详细地演示了用AndroidNativeEmu做相关处理的整个流程。先用AndroidNativeEmu模拟执行一遍.init_array节中所有的函数。在执行过程中记录所有对内存的写操作(地址,内容),对同一地址的写操作只要记录最后一次。最后根据的写操作记录patch so中对应偏移处的内容。

具体实现方式是对内存写操作添加hook回调:

在回调处理函数中把写入内存的地址和写入的内容存到一个map对象中: 模块加载完,.init_array中的函数肯定也早就执行完了,就可以根据前面记录的内存修改操作去patch原so。这里只处理地址位于so加载地址段内的写内存操作,而且patch的时候要把记录的内存地址转换为相对so加载基址的偏移。

 
Unidbg实现起来也依照之前的理念,先给模拟器加上内存写操作的hook回调:
然后由框架加载so库时调用init_array节中的函数列表:
So加载完后,根据写操作记录patch内存中对应地址的内容,再保存为新的so。
以上流程测试可行。
 
Obf.so处理完的部分成果:

 
Libcrypt.so处理完的部分成果:
Libcrack.so处理完的部分成果:


 


看雪ID:Avacci

https://bbs.pediy.com/user-home-879855.htm

  *本文由看雪论坛 Avacci 原创,转载请注明来自看雪社区




# 往期推荐

1. MTCTF-PSA-Writeup

2. 【分析记录】疑似Confucius组织组件CuoliVXaRAT分析

3. WOW怀旧服 明文发包获取和HOOK

4. X86内核笔记_2_驱动开发

5. 新的漏洞分析体验:CVE-2010-3333 RTF栈缓冲区溢出漏洞

6. 某知笔记服务端docker镜像授权分析



公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



球分享

球点赞

球在看



点击“阅读原文”,了解更多!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存