繼續練手,http://bbs.pediy.com/showthread.php?t=193877
-------------------------------------------------------------------------------
嘗試和第二題的方法,ATTACH到進程退出,估計有反調試。
查看task目錄,多了幾個線程,估計是反調試用的。
糾結了半天,還是從SO靜態分析入手,找到SO入口點。IDA直接打開肯定悲劇,先用READELF查看基本信息
這裏注意到NOTE segment很怪異,後面幾個segment offset 也被篡改了,修復即可。
現在用IDA打開了,靜態分析,發現代碼解密在handle::code -> tdog_decrypt函數,其解密算法已有,可以直接拿出來解密函數了。
不過我不打算這麼做,讓程序自己解密,僅需DUMP解密後的數據修復原SO文件。
先找到SO入口點,在IDA中不能看到section信息,使用readelf -d查看dynamic信息
注意到存在.init,從linker call_construt可以看到,這個函數先於init_array執行,故此爲入口點。
從頭調試進程,在linker下斷點跟進。通過靜態分析,解密函數是通過開啓線程來工作的,在secwork::secwork函數中,不影響調試,
在handle_code中tdog_decrypt下斷點,全速運行。
程序退出,那麼之前存在反調試監測。查看SO,在
存在secheck::secheck,故屏蔽或者掛起線程即可。
全速運行,直到在tdog_decrytp斷下,F8單步,dump出內存:offset = 0x0x5438, length = dfb0
python腳本替換SO中這段數據,用IDA打開。
已出此函數,F5打開看了下流程,和前面差不多,難得去看了。
嘗試修復修改入口點,去掉.init函數,打包回原工程,可以啓動,算有點脫殼的意思了。