日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Ida双开定位android so文件

發布時間:2024/4/17 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Ida双开定位android so文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Ida雙開定位的意思是先用ida靜態分析so文件,然后再開一個ida動態調試so文件。因為在動態調試中ida并不會對整個動態加載的so文件進行詳細的分析,所以很多函數并無法識別出來。比如靜態分析中有很多的sub_XXXX函數:

但動態調試中的ida是沒有這些信息的。

所以我們需要雙開ida,然后通過ida靜態分析的內容來定位ida動態調試的函數。當然很多時候我們也需要動態調試的信息來幫助理解靜態分析的函數。

在上一節中,我們提到.init.array中有個sub_2378(),但當ida動態加載so后我們并無法在module中找到這個函數。那該咋辦呢?這時候我們就要通過靜態分析的地址和so文件在內存中的基址來定位目標函數。首先我們看到sub_2378()這個函數在靜態分析中的地址為.text:00002378。而在動態加載中這個so在內存中的基址為:4004F000。

因此sub_2378()這個函數在內存中真正的地址應該為4004F000 + 00002378 =40051378。下面我們在動態調試窗口輸入”g”,跳轉到40051378這個地址。然后發現全是亂碼的節奏:

不要擔心,這是因為ida認為這里是數據段。這時候我們只要按”P”或者選中部分數據按”c”,ida就會把這段數據當成匯編代碼進行分析了:

我們隨后還可以按”F5”,將匯編代碼反編譯為c語言。

是不是和靜態分析中的sub_2378()長的差不多?

我們隨后可以在這個位置加入斷點,再結合上一節提到的調試技巧就可以對init.array中的函數進行動態調試了。

我們接下來繼續分析自毀程序這道題,當我們在對init.array和JNI_OnLoad()進行調試的時候,發現程序在執行完dowrd_400552B4()后就掛掉了。

于是我們在這里按”F7”進入函數看一下:

原來是libc.so的phread_create()函數,估計是app本身開了一個新的線程進行反調試檢測了。

有意思的是在靜態分析中我們并不清楚dword_62B4這個函數是做什么的,因為這個函數的地址在.bss段還沒有被初始化:

但是當我們動態調試的時候,這個地址的值已經修改為了phread_create()這個函數的地址了。:

所以說自毀程序密碼這個app會用pthread_create()開一個新的線程對app進行反調試檢測。線程會運行sub_16A4()這個函數。于是我們對這個函數進行分析,發現里面的內容有大量的混淆,看起來十分吃力。這里我介紹個小trick:常見的反調試方法都會用fopen打開一些文件來檢測自己的進程是否被attach,比如說status這個文件中的tracerpid的值是否為0,如果為0說明沒有別的進程在調試這個進程,如果不為0說明有程序在調試。所以我們可以守株待兔,在libc.so中的fopen()處下一個斷點,然后我們在hex view窗口中設置數據與R0的值同步:

這樣的話,當函數在fopen處停住的時候我們就能看到程序打開了哪些文件。果不其然,程序打開了/proc/[pid]/status這個文件。我們”F8”繼續執行fopen函數,看看返回后的地址在哪。然后發現我們程序卡在了某個函數中間,PC上面都是數據,PC下面才是匯編。這該咋辦呢?

解決辦法還是ida雙開,我們知道現在PC的地址為40050420,libcrackme.so文件的基址為4004F000。因此這段代碼在so中的位置應該是:40050420 - 4004F000 = 1420。因此我們回到ida靜態分析界面,就可以定位到我們其實是在sub_130C()這個函數中。于是我們猜測這個函數就是用來做反調試檢測的。

因此我們可以通過基址來定位sub_130C()這個函數在內存中的地址:40050420 + 130C = 4005030C。然后我們在4005030C這個地址處按”P”, ida就可以正確的識別整個函數了。

所以說動態調試的時候可以幫我們了解到很多靜態分析很難獲取到的信息。這也就是ida雙開的意義所在:靜態幫助動態定位函數地址,動態幫助靜態獲取運行時信息。

?

轉載于:https://www.cnblogs.com/joey-hua/p/4702824.html

總結

以上是生活随笔為你收集整理的Ida双开定位android so文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。