qq瀏覽器遠程調試

在做測試qq瀏覽器的時候,需要用到apk的遠程調試,這裡記錄下怎麼要過qq瀏覽器的保護,遠程調試qq瀏覽器

下載qq瀏覽器,用apktool反編譯,打開AndroidManifest看debuggable="false",也就是不允許進行調試

修改為true,利用apktool重新打包,使用Auto-sign重新簽名安裝

發現再次安裝後打開qq瀏覽器,會彈出一個頁面說這個qq瀏覽器是被修改過的,從而調出手機中的內置瀏覽器,無法進行qq瀏覽器的調試中

繞過檢測

在jeb中查找檢測url的字元串,定位檢查代碼,

.method public a(Lcom/tencent/mtt/MainActivity;)Vn .locals 3nn # invoke-virtual {p0, p1}, Lcom/tencent/mtt/boot/browser/g;->e(Landroid/app/Activity;)Vnn iget-object v0, p0, Lcom/tencent/mtt/boot/browser/g;->b:Lcom/tencent/mtt/boot/browser/g$a;n

注釋掉g函數,改函數會在app啟動時後檢查,注釋掉,不要他去檢查,重新打包安裝,打開,調用的是qq瀏覽器的內核了

看他的邏輯是,如果簽名不同的話,回調用setclassname強制啟動內置瀏覽器,並將qq瀏覽器的進程結束掉

遠程調試

採用的android studio調試smali代碼

首先使用apktool獲取apk的smali文件,手機安裝app,android studio安裝smalidea-0.03插件,點擊File->Settings->plugins->instal plugins from disk,選擇下載的zip包就行,不要解壓。安裝完成後,AS提示重啟生效,重啟即可

AS導入工程,選擇上一步的smali目錄,一路next

配置AS調試配置,Run->Edit configurations,點擊+號,新建remote類型調試器,設置Name, 修改埠號,可以選擇被佔用的任意埠,本次設置為8800

後面幾個命令:

adb shell am start -D -n com.xxx.xxx/.MainActivitynnadb shell ps | grep xxx #獲取運行的進程號nnadb forward tcp:8800 jdwp:idn

設置埠轉發,這條命令的含義可以認為是在本地8800埠與手機28881進程之間建立一條通道,當開始調試時,AS連接本地的8800埠,通過這條通道控制程序的運行

後面就是下斷點,運行調試

推薦閱讀:

2A移動電源充手機會傷害手機嗎?
安卓系統上有哪些好用的日曆App?
自學安卓開發,如何找到第一份工作?
對Android App來說,功能重要還是性能重要?
Android 的 USB 共享網路功能是否是個雞肋功能?

TAG:Android | 软件调试 |