Android動態調試-不用IDA Pro

2020-12-13 無情劍客Burning

為什麼不用IDA,因為貴。 為什麼不用gdb,因為lldb的出現,取代gdb只是遲早的事情,可以說gdb是Depracated。

在 Android逆向之ARM64靜態分析對app的中的so進行了靜態分析,這篇文章介紹兩種動態調試的方式,一種是radare2,另一種是lldb。

r2frida

概術

Radare2 and Frida better together. 兩個強大的工具放在一起,必然會產生更為強大的能量,可以稱為"Best Dynamic Debugging Tool ",最主要是免費。其本質是Radare2的插件。

安裝

唯一的一個缺點,安裝過程堪稱災難。我用

r2pm -ci r2frida

進行的安裝。目前只能在Linux下使用。筆者使用Nodejs最新的穩定版本才安裝成功。

缺少庫文件的問題,解決辦法如下,這裡只是舉例,具體情況可能不一樣,筆者是ssl庫連結不了。

/usr/bin/ld: 找不到 -ldhnetsdk

1)找到本地的libGL.so 文件路徑 ,在終端執行:

locate libdhnetsdk.so

命令: /usr/local/ahuasdk/libdhnetsdk.so 2)建立連結: sudo ln -s /usr/local/ahuasdk/libdhnetsdk.so /usr/lib/libdhnetsdk.so

介紹

選擇淘寶來介紹。

Attach process

r2 frida://BH9500C2JR/com.taobao.taobao

其中BH9500C2JR通過

frida-ls-devices

獲取。

Spawn process

r2 frida://spawn/usb/BH9500C2JR/com.taobao.taobao

這種情況下是以suspend模式啟動app,因此屏幕會卡住。這樣就可以hook程序啟動的時候或之前的操作,比如onCreate。通過

=!dc

可恢復。

命令

所有r2frida的命令都必須以

\或者=!

開頭 。

版本命令

獲取Frida版本的命令

\?V

獲取信息的命令

\i: Shows target information\ii* : List imports in r2 form.\il: List libraries. Commonly used with the symbol ~, which is the internal grep of r2.\iE : List exports of library, filtering by library name.iEa () : Show address of export symbol.\isa[*] () : Show address of symbol\ic: List classes

部分結果如下:

搜索命令

\/ keyword

:Searchhex/stringpatterninmemoryranges(seesearch.in=?)以JSON格式顯示,搜索關鍵字rooted,命令為:

\/j rooted

動態調試

這是r2frida最強大的功能。

\dt (<addr>|<sym>) ...

: Trace list of addresses or symbols. Similar to frida-trace

\dmas

: Allocate a string inited with on the heap

\dmal

:Listliveheapallocationscreatedwithdma[s]

通過px還看不出來什麼,通過下圖就唔唔溝看出這是UTF-8編碼。

dt命令的簡單使用:

其他命令

dpt: List threads

dr: List thread registers

e[?] [a[=b]]

: List/get/set config evaluable vars

env: Get/set environment variable

腳本

JS code to be run in the target can be loaded with

\. script.js.

A common practice is always to call this script agent.js to remember that's the code to be run inside the target.

[0x00000000]&gt; \. agent.js

[0x00000000]&gt; \dc

resumed spawned process.

調試libnative-lib.so

通過smali代碼可知libnative-lib.so文件是在中被加載的,在onCreate方法中被調用的。

因此在hookonCreate方法來下斷點。

參考

https://www.qqxiuzi.cn/bianma/Unicode-UTF.php https://frida.re/docs/home/ https://github.com/enovella/r2frida-wiki

寫在最後

r2frida在so調試方面基本可以替代IDA的,至於Smali的調試會在後面的文章中涉及。lldb這個利器本來是IOS上面的,用來取代gdb的,目前Google在Android中也大力推廣,取代gdb也只是時間問題。

更多內容,歡迎關注我的微信公眾號:無情劍客。

相關焦點

  • android 工具箱
    6, 對 Apk 進行籤名.bat7,啟動調試 apk.bat ida 附加調試 so 時、jdb 調試、smali 調試8 安裝 APK.bat 管家這些老是亂裝東西,真不爽,直接用命令多好9 用 jeb 打開.bat jeb smali->java 的神器使用把 1Apk 反編譯.bat 到 9 用 jeb 打開.bat 生成快捷方式再把快捷方式剪貼到用戶的
  • android平臺arm指令學習和調試
    Gdbarm和ida反彙編比較:t=184375調試方法1)So中實現的方法,程序跑起來再附加的話,該方法可能已經執行完。看雪上給出方法步驟較多,應用和底層都調試,有點複雜如下:2)gdb的調試,使用ndk下自帶的gdbserver和gdb進行調試3)將修改的so導入到手機該應用的lib目錄下,覆蓋之前的so文件。然後運行app,出現只有邊界的黑框。Gdbserver附加,使用set命令,將bl調用自身的命令改回去,則可以進行正常調試了。
  • 用Android Studio動態調試手機QQ
    需要工具:Android Studiohttps://developer.android.com/studio/index.htmlApktoolhttps://ibotpeaches.github.io/Apktool/smalideahttps://github.com/JesusFreke/smali
  • [原]排錯實戰——拯救加載調試符號失敗的IDA
    在windows下,調試器(比如vs, windbg)可以通過調試符號(PDB)把地址與符號名對應起來,為我們提供更可讀的信息。IDA應該也支持加載PDB,通過查看IDA安裝目錄下的idahelp.chm(打開後搜索PDB即可找到相關說明)發現還真支持。但是當我加載符號的時候,卻失敗了。本文記錄了整個調查過程。效果對比 先放兩張對比圖,大家直觀感受下區別。
  • 反編譯動態調試smali全過程
    網絡抓包、數據來源流向分析、頁面邏輯跳轉分析、動態調試等。由於很多代碼都會混淆,很多時候我們直接通過代碼可能看不出邏輯走向,所以我們就會選擇斷點來進行調試。C層一般會使用IDA進行調試分析,Java層常常就會需要對Smali代碼進行調試分析。
  • 小技巧 | 在 Android Studio 調試應用 (上)
    正因如此,最近我們找機會了解了 Android Studio 團隊在提升調試速度方面使用的一些技巧。接下來,我們會為您一一呈現那些我們認為最好的、節省您時間的、且方便與您的調試流程整合的小技巧。雖然您的應用可能與本文假想中的示例應用大相逕庭,但是本文所介紹的小竅門可以用在任何應用的開發上。本文分為上下兩篇,本篇為上篇。我們從經典調試法 —— printf 語句的一個小竅門說起。
  • 【Android 原創】從OWASP CrackMe學Android逆向(二)
    IDA動態調試代碼繞過反調試機制通過上面的分析(不包含靜態分析arm64-v7a目錄的libfoo.so文件的內容), 靜態分析到現在也沒找到完整的23個字母長度的密鑰, 我們要通過IDA調試的方法獲得密鑰,。嘗試動態調試.so文件的時候會發現應用會閃退, 所以我們需要來過反調試機制才能讓應用正常運行並且獲得密鑰。那我們怎麼做才能成功繞過反調試機制呢?
  • 一份官方的 Android Studio 調試應用 技巧!
    正因如此,最近我們找機會了解了 Android Studio 團隊在提升調試速度方面使用的一些技巧。接下來,我們會為您一一呈現那些我們認為最好的、節省您時間的、且方便與您的調試流程整合的小技巧。雖然您的應用可能與本文假想中的示例應用大相逕庭,但是本文所介紹的小竅門可以用在任何應用的開發上。本文分為上下兩篇,本篇為上篇。
  • android 播放gif動態圖片
    android不推薦使用gif圖片,一般都是png的,對於gif的圖片解析比較消耗資源,但是對於一些動態gif圖片的播放,如果比較小的話還是可以的,要是大的話,建議還是把gif圖片轉換成一幀一幀的png圖片,然後通過animation播放。
  • Hook Android C代碼(Cydia Substrate)
    參考學習的英文博文https://koz.io/android-substrate-c-hooking/創建一個目標apk編寫目標項目,用於本次實操過程的hook對象1.創建項目android create project--target android-23 --path targetapp --package
  • SAST Weekly|靜態反編譯軟體IDA使用簡介
    像是16位機的debug,以及ntsd等,沒有GUI,一切全靠指令(vim)又或是windbg,提供了基本的調試,以及跳轉指示的功能。    首先要看這個遊戲的主體代碼在哪裡,解包後發現是il2cpp編譯的(簡單介紹一下,il2cpp是把c#編譯後的il字節碼翻譯成cpp然後編譯,在跨平臺上提高性能用),因此可以確定代碼在libil2cpp.so中,因此我們用ida打開這個文件。    隨即ida將會極為迅速的(大約兩小時)進行反編譯操作,反編譯完成後,看到函數表,可能就懵了。
  • 寫給Android開發的Gradle知識體系
    Android Studio的模塊類型和項目視圖Android Studio中的每個項目包含一個或多個含有原始碼文件和資源文件的模塊,這些模塊可以獨立構建、測試或調試,一個Android Studio的模塊類型可以有以下幾種:Android應用程式模塊 Android應用程式模塊可能依賴於庫模塊,儘管許多Android應用程式只包含一個應用程式模塊
  • Android逆向學習|對ARM指令的一次學習
    cdn.jsdelivr.net/gh/luckyfuture0177/BlogData@latest/PicGoimg/image-20210203124945438.png吾愛破解教程連結《教我兄弟學Android逆向08 IDA爆破籤名驗證》前言IDA pro
  • 5步搞定android混淆
    我的思路是將混淆分為2個主要部分#---定製化區域-#---1.實體類---#---#---2.第三方包-#---#---3.與js互相調用的類----#---#---4.反射相關的類和方法---#-#----#---基本不用動區域----#---基本指令區optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontskipnonpubliclibraryclassmembers-dontpreverify-verbose-printmapping
  • 【Android 原創】實戰分析一個Crackme的過程(超級詳細)
    2.動態調試接下來就是通過動態調試 分析這個so文件的密碼了,在動態調試之前我需要配置一些環境,步驟如下:真機動態調試前一定要修改APP AndroidMenifest.xml文件, 在<application 裡給APP加上可調試權限,android:debuggable="true",重新打包APP,籤名,安裝,如下圖所示
  • ionic集成Crosswalk以及調試ionic項目
    4.  編譯錯誤: Could not find any version that matches com.android.support:support-v4:[13.0.0,).編譯錯誤,提示: Could not find any version that matches com.android.support:support-v4:[13.0.0,).
  • Android React Native應用逆向分析初探
    靜態分析使用解壓縮軟體(WinRAR等)打開tuyue.apk,在assets目錄中發現了index.android.bundle文件,可判斷出該應用使用了Android React Native框架。可在工作目錄創建新文件夾tuyue_files用於存放分析過程中產生的文件等,進而把index.android.bundle解壓到tuyue_files文件夾中。
  • IDA flare-emu示例
    fopen "dx @$scriptContents.BreakEndWithAEx(@rcx,\"system.ini\",true,false);.if(@$t19==0x9c85130d){gc}"當ida64進程試圖打開system.ini時斷下來。不要照搬調試命令,按原始意圖換成自己環境中的等價命令。為什麼攔截msvcrt!fopen()呢?
  • [書摘]Android用戶輸入系統的移植與調試
    本文節選於電子工業出版社 北京博文視點資訊有限公司推出的《Android系統級深入開發——移植與調試》一書第08章第二節和第三節,這是一本全面介紹