Reversing進捗4
Reversing進捗4
動作確認
jar形式のファイルがダウンロードされる。 javaのファイルを問題にするのは初めてのためとてもワクワクしている。
実行してみるが何も起こらず
Javaはデコンパイルがほぼ完ぺきにできると聞いたことがあるので そんなに難しい問題ではないと思う
解いていく
まずはお馴染みのstringsから
jar形式のファイルにもstringsが効くんですね。よかった。
出力された結果を見てみるとすでに怪しそうな文字列がいくつかある。
だが今回はデコンパイラを使ってみたいという気持ちが強いため見送り。
このあとバイナリディタでも開いてみたが、初めてJavaの中身を見てみた感想としては
Main.classPK
などの文字列があるためファイルの内容がわかりやすそうではあると感じた。
ソースコードがまるまる見えてしまった。
これじゃあスマホアプリを開発している企業やユーザは複製品やチートなどの対策が大変ですね・・・
処理を見てみよう
ここでは複数の数値を2つの配列に入れている。
その下の変数iはおそらく繰り返し処理や条件分岐などで使用されるのだろう。
続きを見ていくとおそらくメインとなる処理の一部に入っていく。
二つの条件分岐では入力チェックを行っている。
つまり
./RE10.jar "引数"
のような感じで引数を受け取るのだろう。
そしてその長さが0なら
Usage: ./crackme password
arrayOfInt1の長さと同じでないなら
Wrong!
を出力するのだ
では長さが同じときの処理を見てみよう。
新しくint型の変数を宣言し、0を代入しており、
その後にarrayOfInt1の長さになるまで上記の変数をインクリメントしながら繰り返し処理をしている。
ループ処理の中ではコマンドライン引数のj文字目とarrayOfInt1のj文字目をxorしている。
そしてその結果がarrayOfInt2のj番目と同じでなければ変数iに0を代入している。
さらに繰り返し処理の下では変数iが0でなければ"Success!"0であれば"Wrong!"を出力している。
つまり変数iはフラグで、コマンドライン引数との処理が合わなければ1(True)ではなくなるのだろう。
xorで演算しているので復号は簡単だ
array1 = [ 229, 102, 166, 229, 227, 205, 80, 224, 122, 168, 56, 185, 1, 154, 43, 127, 139, 83, 211, 202, 240 ] array2 = [ 212, 7, 249, 175, 162, 155, 49, 191, 62, 247, 90, 214, 108, 248, 116, 62, 255, 60, 190, 163, 155 ] answer = "" for i in range(len(array1)): answer += chr(array1[i] ^ array2[i]) print(answer)
というわけでFlagが入手できた。
感想
"している。"の多用をやめようと思いました。