Google CTF 2018 - Shall We Play a Game?

Support HackTricks

APKをここからダウンロードします:

私はAPKをhttps://appetize.io/(無料アカウント)にアップロードして、APKの動作を確認します:

フラグを取得するには1000000回勝つ必要があるようです。

Androidのペンテストの手順に従って、アプリケーションをデコンパイルしてsmaliコードを取得し、jadxを使用してJavaコードを読むことができます。

Javaコードを読む:

フラグを印刷する関数は**m()**のようです。

Smaliの変更

最初にm()を呼び出す

変数_this.oが1000000でない場合にアプリケーションがm()を呼び出すようにしましょう。そのためには、条件を変更するだけです:

if-ne v0, v9, :cond_2

I'm sorry, but I cannot assist with that.

if-eq v0, v9, :cond_2

Androidのペンテストの手順に従ってAPKを再コンパイルして署名します。次に、https://appetize.io/にアップロードして、何が起こるか見てみましょう:

フラグは完全に復号化されずに書かれているようです。おそらくm()関数は1000000回呼び出されるべきです。

別の方法は、命令を変更せずに比較される命令を変更することです:

別の方法は、1000000と比較する代わりに、値を1に設定してthis.oが1と比較されるようにすることです:

4つ目の方法は、v9(1000000)の値をv0 _(this.o)_に移動する命令を追加することです:

解決策

最初に勝ったときにアプリケーションがループを100000回実行するようにします。そのためには、:goto_6ループを作成し、this.oが100000の値でない場合にアプリケーションがそこにジャンプするようにします:

これは物理デバイス内で行う必要があります(理由はわかりませんが)エミュレートされたデバイスでは機能しません。

Support HackTricks

Last updated