12306之梆梆加固libsecexe.so的脱壳及修复

12306使用提梆梆企业VIP版本的加固,跟其它梆梆加固一样,都会用到libsecexe.so来做dex的加载,本文对此so做一个脱壳的分析

(一)、so脱壳

此so的最先执行点在init_proc

12306之梆梆加固libsecexe.so的脱壳及修复_第1张图片


init_func负责对so进行解密

解密后,可以看到如下字符串

在IDA里找到相关的位置,可以看到如下代码:

解密函数即红框的位置。

hook该函数,让其打印出r0

打印信息如下图所示:

12306之梆梆加固libsecexe.so的脱壳及修复_第2张图片

(二)、so修复

1.Loadable Segment修复

从上面的加密字符串地址可以知道,都是位于0x39xxx位置的,而这里从0x1edfc到0x48ad4之间是空着的。

init_proc解密的时候把解密内容放到了这里。

那么我们这里做如下修复,把这里的空隙给填上。

12306之梆梆加固libsecexe.so的脱壳及修复_第3张图片

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)

你可能感兴趣的:(12306,脱壳,加固,梆梆,libsecexe.so)