这篇文章纯粹属于安全分析研究,请勿用于非法用途。如有侵犯到厂家,请告知作者删除
12306使用提梆梆企业VIP版本的加固,跟其它梆梆加固一样,都会用到libsecexe.so来做dex的加载,本文对此so做一个脱壳的分析
(一)、so脱壳
此so的最先执行点在init_proc
init_func负责对so进行解密
解密后,可以看到如下字符串
在IDA里找到相关的位置,可以看到如下代码:
解密函数即红框的位置。
hook该函数,让其打印出r0
打印信息如下图所示:
(二)、so修复
1.Loadable Segment修复
从上面的加密字符串地址可以知道,都是位于0x39xxx位置的,而这里从0x1edfc到0x48ad4之间是空着的。
init_proc解密的时候把解密内容放到了这里。
那么我们这里做如下修复,把这里的空隙给填上。
2.init_func的修复
dynamic section table动态节表是如下结构的数组,如果r_offset为0,由表示该表的结束。
typedef struct elf32_rel {
Elf32_Addr r_offset;
Elf32_Word r_info;
} Elf32_Rel;
因此这里修复不能将其清零,可以从表里拷贝另外一个elf32_rel到此位置。
3.rel和plt_rel修复
可参照360 libjiagu.so修复来做
以上三步修复做完,就可以dlopen成功了,如果还需要用IDA分析的话,需要再把畸形化的修复做一下。
这个so加壳虽跟360 libjiagu.so有所不同,但是都有个共同的弱点:可以比较容易得通过dump恢复出原始so。
(创建了一个Android逆向分析群,欢迎有兴趣的同学加入,群号码:376745720)