2019年11月29日 星期五

108年金盾決賽試題 - Android逆向分析

在今年也剛好有負責金盾決賽的題目,題型是Android逆向分析,需要找出裡面的Flag,雖然難度不難,但也可以學習如何逆向Dex、so相關的執行檔,是個不錯練習的機會,因為金盾賽是只能大專校院學生報名,所以將提供我自己設計的題目給大家知道金盾決賽的題型脈絡。

題目下載連結

https://drive.google.com/file/d/1YVS5wgVacWBUmYssLTGDWKedMEfXB64z/view?usp=sharing

ㄧ、題目介紹

此題是Android平台上的貪食蛇遊戲,遊戲規則和傳統的類似,不過有一些特殊的物品,像是防護盔甲、延遲移動速度的效果,只要獲取10萬的積分,就能獲取Flag完成此題。



二、題目技術說明

此款貪食蛇遊戲有使用到舊版的API,因此只能運行在本版4.0-4.4 SDK (也可透過逆向知道運行版本),另外也有使用一些Anti-Debugger和防止篡改APK的防護,需要繞過這些防護才能動態分析,不過裡面也有使用一些Method reflect、Field reflect來隱匿Flag,如果熟悉這些技術,就能輕易地解出Flag。

三、解答

修改APK完整性驗證,將jz改成jmp,就能完美繞過。



修改分數是否達到10萬分的判斷,將jle改成nop,就能直接獲取Flag。



成功獲取Flag (x^U^1@b)。