這篇文章純粹屬於安全分析研究,請勿用於非法用途。如有侵犯到廠家,請告知作者刪除
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)