當前位置:首頁 » 安卓系統 » idaandroid調試

idaandroid調試

發布時間: 2022-05-21 12:13:43

A. IDA6.5不支持遠程調試android x86的虛擬器么

調試so必須可以。
Debugger→Attach→Remote Armlinux/Android debugger
Attach進程
CTRL+S找so
計算偏移找地址,F2下斷後就OK
觸發斷點

B. 如何調試Android SO中的init函數

1.Root設備

Root許可權下才能快樂調試。
使用市面上的各種Root師傅工具。

2.連接設備

將設備打開調試模式在開發者選項里。
將IDA安裝目錄中dbgsrv文件夾下的android_server推送到設備系統目錄並賦可執行許可權。在高於IDA6.6版本才能調試高版本android,此時調試低版本Android SO時,需要使用的是android_nonpipe。
在PC端輸入命令:

adb shell su
adb shell android_server的路徑/android_server

保持上面窗口,在命令行窗口進行埠轉發:

adb forward tcp:23946 tcp:23946

為什麼是23946呢,IDA和push進設備的android_server默認用都用23946埠進行通訊。當然可以修改。

3.打開IDA

附加或者啟動進程的過程不再多言。

4.定位INIT函數

比較便捷的方法是找一份與設備同系統版本號的android源碼。解析執行SO文件的地方在linker.c(cpp)中。
因為不同版本有差異,我就不上圖了。

高版本時在do_dlopen()下的CallConstructors()裡面,但是編譯系統時往往將其和find_library融合在其父函數中,查找時需注意。一個簡便方法是源碼中搜索「INIT」四個字.
先將設備中的linker pull出來用IDA分析來確定調用INIT的具體位置。
因為linker在Android進程中載入非常早,所以它在IDA中的地址可以不用修正直接拿來用。

5.下斷在INIT

下斷點後,執行Apk中觸發載入該SO的功能。
正常情況下就能停在該SO的INIT前了。

C. 如何對android vold進程進行二進制動態調試

為了保護關鍵代碼被逆向分析,一般放在應用程序初始化過程中,如init_array,或jni_onload函數里進行檢查代碼執行。 1.調試檢測 對調試器的檢測(ida,gdb,strace, ltrace等調試工具) a.父進程檢測 b.當前運行進程檢測

D. android怎麼動態調試dex

1.1 安裝JDK
java環境的搭建請自行查找資料,這里不做詳述。
1.2 安裝Android SDK
下載地址:http://developer.android.com/sdk/index.html。
下載完安裝包後解壓到任意一目錄,然後點擊運行SDK Manager.exe,然後選擇你需要的版本進行安裝,如圖:

1.3 安裝Eclipse集成開發環境
下載地址:http://www.eclipse.org/downloads。選擇Eclipse for Mobile Developers,解壓到任意目錄即可。
1.4 創建Android Virtual Device
動態調試可以用真實的手機來做調試環境,也可以用虛擬機來做調試環境,本文採用虛擬機環境。因此創建虛擬機步驟如下:
1打開Eclipse –>windows->Android Virtual Device

2點擊Create,然後選擇各個參數如圖:

這里Target 就是前面步驟中安裝的SDK 選擇任意你覺得喜歡的版本就可以。點擊OK 就創建完畢。
1.5 安裝 APK改之理
這個是一個很好用的輔助調試的軟體,請自行搜索下載。
1.6 安裝 IDA6.6
IDA6.6開始支持安卓APP指令的調試,現該版本已經提供免費下載安裝,請自行搜搜。
0x02 Dalvik指令動態調試
2.1 准備工作
安卓APP應用程序後綴為apk,實際上是一個壓縮包,我們把它改後綴為rar打開如圖:

其中classes.dex是應用的主要執行程序,包含著所有Dalvik指令。我們用APK改之理打開apk,軟體會自動對其進行反編譯。反編譯後會有很多smail文件,這些文件保存的就是APP的Dalvik指令。
在APK改之理里雙擊打開AndroidManifest.xml,為了讓APP可調試,需要在application 標簽里添加一句android:debuggable="true" 如圖:

然後點擊保存按鈕,然後編譯生成新的apk文件。接著打開Eclipse –>windows->Android Virtual Device,選擇剛才創建的虛擬機,然後點擊start,虛擬機便開始運行。偶爾如果Eclipse啟動失敗,報錯,可以同目錄下修改配置文件:

把配置參數原本為512的改為256 原本為1024的改為512,然後再嘗試啟動。
在SDK安裝目錄有個命令行下的調試工具adb shell,本機所在目錄為E:\adt-bundle-windows-x86-20140702\sdk\platform-tools,把adb.exe注冊到系統環境變數中,打開dos命令行窗口執行adb shell 就可以進入APP命令行調試環境,或者切換到adb所在目錄來執行adb shell。

這里先不進入adb shell,在DOS命令行下執行命令:adb install d:\1.apk 來安裝我們剛才重新編譯好的APK文件。安裝完畢會有成功提示。
2.2 利用IDA動態調試
將APP包里的classes.dex解壓到任意一目錄,然後拖進IDA。等待IDA載入分析完畢,點擊Debugger->Debugger Options如圖

按圖所示勾選在進程入口掛起,然後點擊Set specific options 填入APP包名稱和入口activity 如圖:

其中包的名稱和入口activity 都可以通過APK改之理里的AndroidManifest.xml 文件獲取:

1
2
3

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.simpleencryption">
<application android:allowBackup="true" android:debuggable="true" android:icon="@drawable/creakme_bg2" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:label="@string/app_name" android:name=".MainActivity">


然後在IDA點擊Debugger->Process Options

其他默認不變,埠這里改為8700。這里默認埠是23946,我在這里困擾了很久,就是因為這個埠沒有改為8700所致。然後我們看看這個8700埠是怎麼來的。在Android SDK里提供了一款工具DDMS,用來監視APP的運行狀態和結果。在SDK的TOOLS目錄有個DDMS.BAT的腳步,運行後就會啟動DDMS。由於我的本機安裝了SDK的ADT插件,DDMS集成到了Eclips中,打開Eclips->Open perspective->ddms就啟動了DDMS。
如圖所示:

在DDMS選中某個進程後面就會注釋出它的調試埠,本機這里是8700。
到此所有的工作就准備就緒,然後就可以下斷點來調試該APP了。我們在APK改之理中在com目錄下查看smali文件 發現MainActivity.smali里有一個感興趣的函數getPwdFromPic(),那麼我們就對它下斷以跟蹤APP的運行。
在IDA里搜索字元串getPwdFromPic,發現onClick有調用該函數
我們在onClick 函數開始位置按F2下斷如圖:

然後點擊上圖中綠色三角形按鈕啟動調試如圖:

調試過程中有一個問題出現了很多次,浪費了我大量的時間,就在寫文章的時候,操作時還是遇到了這樣的問題。就是點擊啟動後IDA提示can』t bind socket,琢磨了很久終於找到原因了,當打開過一次DDMS後 每次啟動Eclips都會啟動DDMS 而8700埠正是被這個DDMS給佔用了,然後每次都會啟動失敗,解決辦法就是 虛擬機運行起來後關閉掉Eclips,這時一切就正常了!
事例中是一個APP crackme 提示輸入密碼才能進入正確界面。這個時候我們輸入123,點擊登陸,IDA中斷在了我們設置斷點的地方,這時選中ida->debugger->use source level debugger,然後點擊ida->debugger->debugger windows->locals打開本地變數窗口,如圖:

然後按F7或F8單步跟蹤程序流程,同時可以觀察到變數值的變化,也可以在IDA右鍵選擇圖形視圖,可以看到整個APP執行的流程圖:

如上圖所示 變數窗口中我們輸入了123 被轉化成的密碼是么廣亡,pw變數也顯示出了正確的密碼,其實這個時候已經很容易判斷出正確密碼了。
0x03 Andoid原生動態鏈接庫動態調試
通常為了加密保護等措施,有時dex執行過程中會調用動態鏈接庫文件,該文件以so為後綴,存在於APP文件包里。

這里我們以動態附加的方式來調試原生庫。
3.1 准備工作
1、將IDA->dbgsrv目錄下的android_server拷貝到虛擬機里,並賦予可執行許可權
DOS命令分別為:
adb shell pull d:\ android_server /data/data/sv
adb shell chmod 755 /data/data/sv

2、啟動調試伺服器android_server
命令:adb shell /data/data/sv
伺服器默認監聽23946埠。
3、重新打開DOS窗口進行埠轉發,命令:
adb forward tcp:23946 tcp:23946 如圖:

3.2 利用IDA進行動態調試
1、虛擬機里啟動要調試的APP 2、啟動IDA,打開debugger->attach->remote Armlinux/andoid debugger

埠改為23946 其他保持不變,點擊OK

如上圖,選中要調試的APP 的數據包名,然後點擊OK。
正常情況下,IDA會把APP進程掛起。
3、由於當前程序不是在動態鏈接庫領空,這時我們要重新打開一個IDA,用它打開需要調試的so文件,找到需要下斷的位置的文件偏移,並做記錄,然後關閉後面打開的這個IDA。
4、在原IDA界面按下ctrl+s鍵,找到並找到需要調試的so,同時記錄該文件的載入基址。然後點擊OK 或者cancel按鈕關閉對話框。
5、按下快捷鍵G 輸入基址+文件偏移所得地址,點擊OK 就跳轉到SO文件需要下斷的地方,這時按下F2鍵設置斷點。當APP執行到此處時便可以斷下來。
3.3 在反調試函數運行前進行動態調試
程序載入so的時候,會執行JNI_OnLoad函數,做一系列的准備工作。通常反調試函數也會放到JNI_OnLoad函數里。進行4.2中第2步時也許會遇到如下情況:

這時APP檢測到了調試器,會自動退出,那麼這時調試策略需要有所改變。
接著4.1第3步後,在DOS命令行執行命令:
adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity

來以調試模式啟動APP 如圖:
com.yaotong.crackme是APP包名稱,com.yaotong.crackme.MainActivity是執行入口 這些可以用APK改之理查看。

這時由於APP還未運行,那麼反調試函數也起不了作用,按照4.2中第2步把APP掛起。這時IDA會中斷在某個位置

然後點擊debugger->debugger opions設置如下:

點擊OK 後按F9運行APP,然後再DOS命令下執行命令:
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

這時APP會斷下來,然後按照4.2中的3、4、5補找到JNI_OnLoad函數的地址並下斷,然後按F9 會中斷下來。然後便可以繼續動態跟蹤調試分析。

E. ida android-server在哪

防止二次打包一般會用到如下幾種手段:1.Java代碼中加入簽名校驗(直接修改smali文件繞過)2.NDK中加入簽名校驗(ida查看直接hex修改就可以繞過)3.利用二次打包工具本身的缺陷阻止打包(manifest欺騙,圖片修改後綴等等)

F. 如何把ida 的android

微軟有一個工具叫做dependencywalker或者VisualStudio附帶的一個工具mpbin可以查看dll的導出函數名稱,函數參數和調用方式(比如__cdecl或__stdcall)在工具里無法顯示,需要使用IDA或者OllyDbg等反匯編器將DLL反匯編,通過定位導出函數結尾的retn指令判斷參數個數和調用方式。由被調用者平棧通常為__stdcall,由調用者平棧則是__cdecl,平棧的位元組數除以字長(例如retn0C中的0C在x86下是除以4,在x64下除以8)即可得到參數個數(這也是通常,具體問題可能需要具體分析),至於參數意義,那就完全需要頭文件支持,或者分析反匯編代碼的意義了。在IDA里,還可以使用F5快捷鍵將反匯編代碼轉換為C代碼,能稍稍方便一點。最後一個問題,至於思路的話,你可以查看DLL的導出函數,然後使用Detours類庫將原來的函數HOOK一下,做個旁路,在HOOK函數中列印調用內容,這樣你在日誌文件或調試輸出中就能看見調用規律了。純屬個人建議。還有一個工具叫做APIMonitor,能夠檢測API調用。

G. ida pro 查看android的dex文件怎麼看

根據android的官方文檔,如果要調試一個App裡面的dex代碼,必須滿足以下兩個條件中的任何一個:
1.App的AndroidManifest.xm中Application標簽必選包含屬性android:debuggable="true";
2./default.prop中ro.debuggable的值為1;

由於正常的軟體發布時都不會把android:debuggable設置為true,所以要達成條件1,需要對app進行重新打包,這不僅每次分析一個App都重復操作,而且很多軟體會對自身進行校驗,重打包後執行會被檢測到,所以想辦法滿足第2個條件是個一勞永逸的辦法,我實際使用的方法就是滿足第二個條件。
由於default.prop是保存在boot.img的ramdisk中,這部分每次重新啟動都會重新從rom中載入,所以要到目的必須修改boot.img中的ramdisk並重新刷到設備中。

H. apk調試方法求助

方法一:

1、使用apktool的-d選項反編譯apk文件

java -jar apktool.jar d -d target.apk -o output

2、在AndroidManifest的application節點中添加 android:debuggable="true"

3、在入口點的類的onCreate中添加如下代碼等待調試

invoke-static{}, Landroid/os/Debug;->waitForDebugger()V

4、回編譯apk

java -jar apktool.jar b -d output -o newTarget.apk

5、對apk進行簽名

java -jar signapk.jar testkey.x509.pem testkey.pk8 newTarget.apk signed.apk

6、將簽名後的apk安裝到手機或者模擬器上

adb install signed.apk

7、將1中的smali代碼導入到Android Studio中

file→open→output目錄→下斷點

8、打開Monitor查找相應的進程

運行→monitor 或者Tools ->Android ->Android Device Monitor

9、配置遠程調試選項

Run→Editor Configurations→Defaults→Remote,點擊+號新增一個,Host為localhost,Port為8700

10、打開apk,點擊綠色的小蟲子就可以開始調試了

方法二:無需修改原apk文件

1、用 Android killer等工具反編譯apk文件

2、將smali代碼入到Android Studio中,安裝smaliidea插件

File→Settings→Plugins→Install plugin from disk…→Restart

3、配置遠程調試選項,打開monitor

4、使用adb以debug方式啟動apk

adb shell am start -D -n package/activitiyname

5、下斷點開始調試,在watch中添加寄存器http://www.315nk.com/不清楚追問,希望能幫助到您

I. IDA怎麼調試Android的send函數,求教

安卓手機用ida在apk執行前動態調試其so中的函數

方法1
1、解包對方APK,插入一個:對應SMALI: android.os.SystemClock.sleep(20000);const-wide/16 v0, 0x2710 #20秒invoke-static {v0, v(X-1)}, Landroid/os/SystemClock;->sleep(J)V這里(X-1)對應.local X。

2
另外,有的包在你要調試的那個SO裡面有簽名保護,反正你重新打了包之後會導致程序運行崩潰,這個相比JAVA修改困難些,建議你用那個簽名漏洞來打包。事實上我調試那個SO也遇到過這樣,然後打了個簽名漏洞的包嵌入的延時函數就可以了。
方法2

1) am start -D -n 包名/類名;

2) IDA pro attach 進程, 設置新線程,載入so時斷點,continue;

3) 打開ddms, 查看調試埠, jdb attach port;

4) 這個時候應該已經斷在新線程,或者載入so處了,在你感興趣的so處停下來;

5) 另外用ida 打開so,查看你感興趣的函數偏移, 加上你感興趣的so的基地址,打上斷點,continue, 就大功告成了。

注意事項

windows下ida6.1不行,linux ida 6.4可以,不知是ida的問題還是windows的問題,你可以在linux下用wine測一下。
經驗內容僅供參考,如果您需解決具體問題(尤其法律、醫學等領域),建議您詳細

J. IDA pro 獲取不到全部的app進程列表

其實就是用戶的問題,真機usb鏈接電腦後,adb shell進去後是$,su轉為#,然後執行android_server,這樣是不行的,必須adb shell進入後就是#,這樣才表示是root在操作shell。

解決方案:建議在電腦上裝個靠譜助手,然後再測試。經測試,可以解決如題問題。

熱點內容
雲表伺服器安裝導致電腦崩潰 發布:2024-05-07 15:58:35 瀏覽:524
ftp是什麼檢測器 發布:2024-05-07 15:37:59 瀏覽:403
重慶電信伺服器租用教學雲主機 發布:2024-05-07 15:28:05 瀏覽:73
python聲明對象 發布:2024-05-07 15:28:03 瀏覽:128
存儲過程的應用場景 發布:2024-05-07 15:12:16 瀏覽:613
車內配置怎麼看 發布:2024-05-07 15:11:39 瀏覽:209
outlook已發送文件夾 發布:2024-05-07 14:08:13 瀏覽:31
佛系源碼 發布:2024-05-07 14:04:03 瀏覽:674
php螞蟻 發布:2024-05-07 13:49:22 瀏覽:401
phpfpmpid 發布:2024-05-07 13:44:29 瀏覽:521