---
# System prepended metadata

title: OWASP Mobile Application Security -Android UnCrackable Lv1

---

<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中，
![old_mainactivity](https://hackmd.io/_uploads/ByVdAfHl0.png)

在MainActivity.smali中找到對應的smali code:

![old_smali_mainactivity](https://hackmd.io/_uploads/r1uJ1QHxA.png)

這邊有很多方法可以選擇，可以更改if的判斷式(如:if-nez => if-eqz)，或是讓所有branch都前往cond_2，我是選擇將檢查的程式碼全部刪掉，修改後結果如下:

![smali2](https://hackmd.io/_uploads/rJ2blXBxC.png)
修改完後的APK，再經過JADX分析可以看到root and debug detection已經消失。

![after_main](https://hackmd.io/_uploads/SkA7lXSlC.png)

## 2.找出 **FLAG**
透過靜態分析可以發現，程式是判斷我們輸入的字串與AES解密後的FLAG是否一樣。

![before_aes](https://hackmd.io/_uploads/S1ar7cSl0.png)

我們的思路就是在`return str.equals(new String(bArr));`這段邏輯中插入smali code，將FLAG用Log的方式印出來。
首先我們要先找到程式碼的位置，可以看到**v1** 就是**bArr**轉成的字串。
![smali_aes2](https://hackmd.io/_uploads/HJPCN9BeA.png)

我們可以透過**AndroidKiller**插入Log，將**v1**印出

![AndroidKiller_injectCode](https://hackmd.io/_uploads/B1Z7UcSxA.png)

最後Compile成APK檔，AndroidKiller會自動幫APK簽好名，產生的APK可以直接安裝在裝置上。

![AndroidKiller_compile](https://hackmd.io/_uploads/r1bwDcrxC.png)

## 3.運行結果
可以看到我們隨便輸入字串後，logCat就能看到FLAG ***I Want to believe***

![Screenshot_2024-04-11_15_23_03](https://hackmd.io/_uploads/HkzXYcrgA.png)










