BugkuCTF-Reverse题Timer(阿里CTF)
知識點
JEB相當于Windows平臺上的IDA
smali代碼:雙擊Bytecode,出現smali代碼;相較于C之匯編,那么smali之于Java
onCreate:
一個activity啟動回調的第一個函數就是onCreate,這個函數主要做這個activity啟動的一些需要的初始操作的工作。
onCreate之后調用了還有onRestart()和onStart()等。
解題流程
下載apk包
apk安裝之后出現一個讀秒的,20萬秒,大于3600,所以大于一個小時,所以太慢了,不等了。
jeb反編譯,主要JEB反編譯得到的java代碼看起來比較清晰
MainActivity代碼:
源碼審計
MainActivity
對程序進行分析
初始操作了一些變量,其beg為(((int)(System.currentTimeMillis()/1000)+200000;
this.beg = (((int)(System.currentTimeMillis() / 1000))) + 200000;beg為一個定值,在上面代碼的run()函數里,k是可以變化的
MainActivity.this.t = System.currentTimeMillis();
MainActivity.this.now = ((int)(MainActivity.this.t / 1000));
給出了now的賦值,從程序的運行來看,beg在now初始賦值后應該比now大了200000,now代表的是程序運行的時間,當now變化了200000的時候,也就是說beg小于now的時候,會進入設置flag的地方。
也就是說,程序一開始k是變化的,flag的值并沒被設置,只有當beg==now的時候,flag會被設置并顯示,然后到下面k可能還會變化,那么這個被設定的初始flag可能就是我們要拿到的flag了。
也即當前的系統時間除以1000,再加上200000。繼續看onCreate:
最先留意的是
this.val$tv2.setText(“alictf{” + MainActivity.this.stringFromJNI2(MainActivity.this.k) + “}”);
可以看出,flag與k有關,而這里有個stringFromJNI2,其是一個底層的函數
繼續閱讀的話,你可以看到對k做了操作。
這里k,應該為由beg和now反復運算得到。不過,beg-now應為200000,所以,我們可以復制出代碼運算得到k的值,然后,修改代碼重新編譯
總結思路:通過beg - now代入is2函數對k進行操作,200000,需要一秒一秒的操作,而我們,直接通過寫代碼模擬出200000的結果,找到k,然后改動k值,直接調用,就可以得到flag了。
提取關鍵代碼計算出k的值
直接根據k的變化部分的函數進行模擬,算出進行了200000s之后的k值:
參考java-算k值.java:
Python腳本:
輸出k的值為1616384,下面我們需要把k值修改為這個值,然后進入進行flag設定的if語句就可拿到flag了,下面進行操作。
通過Android killer反編譯
將輸出flag的條件反過來,即MainActivity$1.smali里的if-gtz v0, :cond_0這句話(后面是輸出The Flag Is那里的跳轉)改為if-ltz v0, :cond_0
將k值改為常量,即上文提到的smali文件里的iget v3, v3 …(省略);->k:I之后添加const v3, 1616384
就是大于改為小于,gt為大于,lt為小于,請求時間與系統時間的差值小于0才會顯示flag
插入這句話,原因是k保存在v3寄存器內,因此修改v3就能修改k
(這里的v0,v1,v2,v3等都是寄存器,添加的指令就是寄存器的賦值)
把if的判斷條件進行修改
if-gtz v0, :cond_0 的意思是,如果v0>0,就跳轉到:cond_0,所以把gtz改為ltz。
在alictf里面的k值后面再對k進行設定。
保存,重新編譯下。
修改后生成的apk路徑:
file:F:\CTF\CTF_Tool\Reverse\Android\AndroidKiller\AndroidKiller_v1.3.1\projects\file\Bin\file_killer.apk
然后在模擬器里運行就可以拿到flag了。
注意
編譯譯打包程序
在編譯的時候遇到以下問題
Project\res\values-v23\styles.xml:6: error: Error retrieving parent for item: No resource found that matches the given name ‘@android:style/WindowTitleBackground’.
Project\res\values-v23\styles.xml:6: error: Error retrieving parent for item: No resource found that matches the given name ‘@android:style/WindowTitleBackground’.
解決方法
解決方法
找到res/value-v23/styles.xml,把resources下的東西注釋掉
找到res/value/public.xml,把所有帶Base.V23的東西(兩個)注釋掉
總結
以上是生活随笔為你收集整理的BugkuCTF-Reverse题Timer(阿里CTF)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BugkuCTF-WEB题file_ge
- 下一篇: Python is 和 == 区别 -