實驗環境
Win10、Android killer1.3.1、APKIDE
- 反編譯apk。

可能會卡在正在反編譯源碼,請稍后…… 解決方法是重新打開軟件然后雙擊APK歷史工程里面要打開的這個apk即可。
- 找到在MainActivity.smali中找到check方法 如果用戶名或者密碼有一個不對就會跳轉到:cond_0出 然后執行下面的代碼 也就是登陸失敗!

用鼠標點擊cond_0就能找到:cond_0位置 這個地方就是登陸失敗

- 補充兩個smali指令 一個是if-eqz 另一個是if-nez 這兩條指令是相對的
(1)if-eqz vA, vB, :cond_**" 如果vA等於vB則跳轉到:cond_**
(2)if-nez vA, vB, :cond_**" 如果vA不等於vB則跳轉到:cond_** - 小總結
(1) 首先程序把我們輸入的用戶名和密碼給了p1和p2 然后把真正的用戶名給了v0 再拿p1和v0對比 對比的結果放在v0中 如果這兩個值不相等v0就等於0
(2) 然后用if-eqz v0, :cond_0這條指令去判斷v0是不是0 如果v0等於0 也就是用戶名和密碼不相等 就跳轉到:cond_0位置 執行登錄失敗 否則繼續往下面執行
(3) 這里假設用戶名輸入正確了 程序往下繼續執行 后面會進行同樣的判斷密碼是不是相等 只有用戶名和密碼都是正確的 程序才不會跳轉到:cond_0位置執行登錄失敗。
- 結合上面的分析,如果不讓程序跳轉到:cond_0位置 讓程序每次在if-eqz v0, :cond_0這條關鍵指令上繼續往下執行 是不是就可以執行登錄成功代碼了? 那怎么能讓它不跳轉呢?我們可以有三種思路:
(1) 程序有兩個if-eqz 分別是用來判斷用戶名和密碼是否正確的 我把這兩個if-eqz都改成if-nez
(2) 直接把這兩條指令刪除掉
(3) 直接用goto語句直接一條指令讓程序執行跳轉登錄成的代碼 也是可以達到程序破解的目的.

自己添加goto語句

上面是1和3的操作方法,修改完了之后保存一下,然后編譯成APK,安裝到手機或者模擬器上測試是否成功。
原文鏈接:https://www.52pojie.cn/thread-650395-1-1.html
