Android下binary級分析和調試方法

來源:互聯網
上載者:User

 

 

有源碼的情況當然好辦,但沒有源碼想調bug或者想逆向怎麼辦。本文列舉了Android下binary級的一些分析調試工具和方法。

 

Logcat:

很多時候logcat中找不到直接答案,但其中往往能得到繼續分析的方向。logcat預設啥都輸出在一起,合理用loglevel和filter來使輸出更加易讀。

參考:

http://developer.android.com/tools/help/logcat.html
http://developer.android.com/tools/debugging/debugging-log.html

 

Java層靜態分析

有兩種方法:一種是用unzip解壓apk包後用dex2jar(http://code.google.com/p/dex2jar/)和jd-gui(http://jd.benow.ca/)逆向成類似Java源碼的形式,但畢竟是逆向出來的,經不起細看。有些部分還會出現錯誤逆向不出來。總體來說適合略讀縮小範圍。另一種是用Android apktool(http://code.google.com/p/android-apktool/)。這樣解壓出來的資源和設定檔更可讀。如AndroidManifest.xml是可讀的,而不像前一種方法解出來是亂碼。同時java的代碼是smali code形式。smali code比逆向出來的東西更準確,適合精讀。

apktool的好處是解壓完了還可以壓回成apk。有時候應用裡其實是有個全域變數(比如叫enable_debug的布爾變數)控制著調試輸出的。只要先解壓,在smali code中把它設為true,再重新打包回去就能在logcat裡看到輸出了。注意改了之後打包回去後需要簽名http://blog.csdn.net/jinzhuojun/article/details/7654835,否則安裝會出錯。

參考:Android中apk包的反組譯碼( http://blog.csdn.net/ariesjzj/article/details/7311340)

 

Java層動態分析:

jdb可以設斷點,改變數,查看類資訊等等。

參考: Android下的JDB調試 (http://blog.csdn.net/jinzhuojun/article/details/7399249)

 

Native層靜態分析

自然是Binutils套件了,如objdump,readelf等都是利器。For arm版的在Android源碼的prebuilts目錄中,嫌大也可以單獨下。

 

Native層動態分析

gdb:不解釋,碼農界永遠的神器。參考: Android下用gdb進行系統級源碼調試(http://blog.csdn.net/jinzhuojun/article/details/7375048)

像Mono這樣的JIT引擎會動態產生代碼,而這些動態產生的程式碼用靜態分析手段是看不到的。但可以用gdb來看,用disassemble或x/ni命令等。

有時候程式一起來就隔兒掉,這時可以用雙調試器調試法。先用jdb停住(配合Settings->Developer Options裡的Wait for debugger選項),用gdb連上設好斷點,再在jdb裡繼續。參考: Android下雙調試器(gdb+jdb)調試應用程式(http://blog.csdn.net/ariesjzj/article/details/7402832)

 

另外一些動態分析工具

Android作為一個Linux為核心的系統,自然在Linux下的那些動態分析工具大多都能用。如strace可以監視系統調用(如open, mmap等)和訊號。tcpdump可以截獲網路傳輸資料等。

/proc/pid/目錄下提供了該進程豐富的OS級運行時資訊,如maps檔案顯示進程的虛擬位址空間映射資訊,status有記憶體使用量等資訊,cmdline和exe可以看到該進程對應的執行檔案。net, fd, task目錄分別可以看網路,檔案,線程資訊等。

/data/tombstones/:程式由於錯誤退出後的“墓碑”,裡面記錄著程式的“死相”。



Android內建的分析調試工具

Settings->Developer Options:裡面有一坨調試分析工具。像顯示觸摸點座標和顯示應用Layout等功能,都是很實用的。

SDK中的tools/monitor,以前叫DDMS,裡面可以看記憶體,線程,網路等資訊,還包括了等實用功能。參考:

http://developer.android.com/tools/debugging/ddms.html

http://developer.android.com/tools/debugging/debugging-memory.html

dumpsys 命令不僅可以輸出很多系統資訊(如硬體參數等),後面加service名(如SurfaceFlinger)還可以看service的運行時狀態。

Dev Tools App包含了一些調試分析功能,其實很多都被移到Developer Options裡了。參考: http://developer.android.com/tools/debugging/debugging-devtools.html

Android Emulator:優點是從類比硬體到API實現都可以改。缺點是arm版本慢且OpenGLES支援稍差,所以不少遊戲不能跑。x86版本由於可以虛擬化會快些,另外開啟gpu on還可以使用host上的gpu來提高gpu效能。

SDK中的hierarchyviewer可用於分析UI。參考:http://developer.android.com/tools/help/hierarchy-viewer.html

 

效能分析工具

都是profiling工具:

systrace,參考:http://developer.android.com/tools/help/systrace.html

Traceview,參考:http://developer.android.com/tools/debugging/debugging-tracing.html

Oprofile,參考:http://blog.csdn.net/dongjun7357/article/details/6400549

另外應用來不及響應會產生ANR,log位於/data/anr/trace.txt。

 

OpenGL渲染分析

OpenGL ES tracer:截獲所有OpenGL調用。缺點是慢,優點是直觀,每一幀,每一條GL命令都有對應的結果映像,因此很容易找出是哪條GL命令出了問題。參考:http://developer.android.com/tools/help/gltracer.html

Settings->Developer Options裡Enable OpenGL traces,可以在logcat裡輸出。優點是快,缺點是輸出不直觀。

 

一些輔助調試的Android App

Busybox:預設的adb shell功能弱爆了,這個可以讓開發人員找回一點用Linux的感覺。

Terminal:不用host直接在guest裝置就可以用的Android shell。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.