昨天发了某企业壳的逆向分析,评论区有人说不是最新版,于是找了一个最新版的bb加固,样本是moutai。花了3个小时重新分析了一下,总结以下新增的点。上一篇某企业壳逆向分析——从过检测到dex代码抽取还原新版加入了自定义linker so壳,相较于旧版本强了一些。首先通过maps文件定位到内存中的so,然后通过pread读取加密的数据: 根据解密出的配置文件,mmap出一段内存,用于复制真实的so的rx和rw段: 第一次mmap出的是rx段,对elf头进行rc4解密,然后对剩余部分进行简单的异或解密: 然后再次mmap出rw段,用异或解密。由于这个so壳没有将elfheader和program header,dynamic header拆分,解密完后在内存中就是一个完整的elf,我们直接dump下来即可: 剩下的部分就是常规的prelink,重定位,执行init_array等操作,不再赘述。dump后的so可以直接被ida打开,不需要手动修复: 简单看了一下具体内容,和之前的版本基本一致,还是走统一的造crash退出函数: 并且异常id和之前的一致,比如检测frida依然是256,检测root依然是1: dex壳部分和之前的版本一致,使用上篇文章的代码可以直接把代码抽取还原: 这里主要看看新增了哪些frida检测上个版本检查了java-bridge的三个特征,这个版本检查了更多的编译特征: 前三个依然是frida-java-bridge的特征。中间三个是frida自身用来定位dlopen时的匹配特征码,被当做常量编译进了frida的so里,也成了frida的特征: 具体可以查看gumandorid.c在ida中,确实可以看到对应的字符串在常量区: 最后一个字符串/subprojects/frida应该是编译的项目路径,被打包进so了。和之前版本一致: 从20000端口检查到30000这是frida 16.8之后的特征,会模仿调试器的做法,hook linker的__dl_rtld_db_dlactivity。在调试状态下,该符号的会被写入brk0,用来通知调试器有新的so被加载。
回复或点赞可查看完整内容
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-291074.htm