日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Smalidea+IntelliJ IDEA/Android Studio无源码调试

發布時間:2025/3/15 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Smalidea+IntelliJ IDEA/Android Studio无源码调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

smalidea是一個IntelliJ IDEA/Android Studio smali語言插件,可實現動態調試smali代碼。
github地址:https://github.com/JesusFreke/smali/wiki/smalidea


前言

在開發過程中,debug版本我們可以跟蹤調試,查看bug等信息,但是在release版本中只能去打log進行代碼進行猜測,還有就是dump堆棧等無法與代碼直接交互的方法。無源碼調試指的是在沒有源代碼的情況下可以對app進行代碼調試,逆向smali代碼,然后查看其運行邏輯。在發現release版本問題的過程中可以讓我們更塊的定位錯誤。

動態調試Android App

smalidea支持14.1或以上版本的IDEA。android Studio如果是基于14.1或以上版本的IDEA也是支持的,我這里用的是2.3.3版本的Android Studio,IDEA的操作也差不多。
從上面的下載地址中下載以下三個應用


backsmali:可將apk轉為smali代碼,也可將odex轉為smali代碼,當然在odex轉為smali過程的中需要/system/framework目錄下的內容

smail:可將smail文件轉為dex文件

下載結束后,開始安裝插件:
Android Studio -> Preferences -> Plugins -> Install plugin from disk -> 選擇 smalidea插件 ->重啟 -> 插件就安裝好了。

準備工作
  • 第一步當然是要拿到你想debug的apk,這里隨機使用一個app
  • 第二步就是要把apk里面的編譯后的代碼轉成smali。
    這里可以使用上述過程中的baksmali進行反編譯,也可以使用apktool進行反編譯
    baksmail:
  • java?-jar?baksmali-2.2.1.jar??d?myapp.apk?-o?~/projects/myapp/src

    apktool:

    java?-jar?apktool.jar?d?myapp.apk?-o?~/projects/myapp/src

    如圖所示使用baksmali-2.2.1.jar反編譯出的目錄



  • 這一步很關鍵,就是讓運行在設備中的程序支持debug。方法有幾種:
    • 把設備root掉
    • 修改測試機的 /default.prop 文件的ro.debuggable=1,目測這一步也可能需要root。
    • 使用模擬器
    • 修改apk的Manifest application 屬性 android:debuggable="true",可以用apktool 解出 Manifest 然后修改,接著重新打包回去。
    • 終極辦法,自己編譯一個debug版 的rom,這個稍微麻煩一點,自己編一個,想怎么玩就怎么玩。
    開始debug:

    假設你已經把apk安裝到設備里了。

    接下來用Android Studio import一個 Project , 工程的目錄定位到剛剛apk反編譯后的的文件夾

    使用“Create project from existing sources”一路next到底



    設置Project 的 jdk[File->Project Structure]


    完成之后 點擊項目郵件 Mark Directory As->Sources Root

    工程配好了,配置debug的端口:
    EditConfigurations...



    添加一個remote調試



    修改調試的端口
    這里我用8700端口,這里我們需要啟動ddms去設置端口號映射,然后apply->ok。



    好了,project方面就準備好了!Nice!

    接下來需要準備的就是如何連上設備debug了!
    過程也很簡單,啟動DDMS
    Tools->Android->Android Device Monitor選擇你要調試的apk的包名


    最后,開始debug
    Run->Debug Smali


    針對DDMS端口轉發,也可以手動的制定端口信息,操作如下(smalidea的作者推薦的是ddms的方式):

  • 拿到apk的包名和啟動的Activity 把應用啟動起來然后等待debug: adb shell am start -D -S -W packageName(packageName的獲取可以反編譯AndroidManifest.xml里面有包含)
  • 正常的話,你會看到設備里的應用已經跑起來了,并且有個 Waiting For Debugger 的提示,別關掉它。

  • 拿到程序運行的pid: adb shell ps | grep packageName

  • 端口映射: adb forward tcp:8800 jdwp:5413 這里的8800 是上一步在配置工程中自定義的端口。

  • 官方步驟如圖所示:


    以上就是基于smalidea無源碼調試的整個過程,有問題的可留言,我們一起交流學習。

    PS:Android端 TCP直連,有資料的童鞋請不吝賜教。謝謝


    原文地址: https://bbs.pediy.com/thread-220743.htm

    總結

    以上是生活随笔為你收集整理的Smalidea+IntelliJ IDEA/Android Studio无源码调试的全部內容,希望文章能夠幫你解決所遇到的問題。

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