<font size=6>**Android UnCrackable Lv1 Write-up**</font> <font size=5>**-Using Repack APK**</font> # 前言 因為Static以及hook的手法,網路上已經很多了,所以我採用的手法是**Repack APK**。 Repack APK是將APK拆包,並把dex反編譯為smali,我們透過修改smali直接改變APP的運行邏輯,之後再將apk重新打包,重新簽名過後就可以安裝在裝置中運行了。 使用工具: [AndroidKiller](https://github.com/SeagullOddy/android-killer),AndroidKiller結合了apktool以及signAPK的功能,可以輕鬆的一鍵完成拆包以及重新打包的動作。 # 我的解法: 主要分成兩個部分,第一是要bypass root and debug detection,第二是要找出FLAG。 ## 1.Bypass root and debug detection 透過jadx分析,可以發現程式碼在MainActivity的OnCreate中,  在MainActivity.smali中找到對應的smali code:  這邊有很多方法可以選擇,可以更改if的判斷式(如:if-nez => if-eqz),或是讓所有branch都前往cond_2,我是選擇將檢查的程式碼全部刪掉,修改後結果如下:  修改完後的APK,再經過JADX分析可以看到root and debug detection已經消失。  ## 2.找出 **FLAG** 透過靜態分析可以發現,程式是判斷我們輸入的字串與AES解密後的FLAG是否一樣。  我們的思路就是在`return str.equals(new String(bArr));`這段邏輯中插入smali code,將FLAG用Log的方式印出來。 首先我們要先找到程式碼的位置,可以看到**v1** 就是**bArr**轉成的字串。  我們可以透過**AndroidKiller**插入Log,將**v1**印出  最後Compile成APK檔,AndroidKiller會自動幫APK簽好名,產生的APK可以直接安裝在裝置上。  ## 3.運行結果 可以看到我們隨便輸入字串後,logCat就能看到FLAG ***I Want to believe*** 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up