2014娜迦CM賽第三題

繼續練手,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函數,打包回原工程,可以啓動,算有點脫殼的意思了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章