a

よろしくのキワミ

Reversing進捗3

Reversing進捗3

・Easy_UnpackMe

動作確認

Unpackということは圧縮されているファイルを解凍する問題か、
実行ファイルがパッキングされている問題ですね

実行してみると白井画面が表示されるだけ

f:id:toDo:20190107014716p:plain

ReadMeを読んでみる

ReversingKr UnpackMe

Find the OEP
ex) 00401000

OEPってなんなんだ?

OEPとは
Original Entry Pointの略
packingされたプログラムでは実行開始箇所がずれる。

こんな感じですかね...?

解いていく

よくわからない。

デバッガでステップ実行しながら見てみると、同じようなループする箇所が多くみられた。

f:id:toDo:20190107021323p:plain

アンパックの技術について何も知らないため簡単な処理を書き自分で触ってみる。

#include <stdio.h>

int main(void){
  int i;

  for( i = 0 ; i < 10 ; i++ ){
    printf("%dnum\n", i);
  }
  return 0;
}
  • packing前のEntryPoint

f:id:toDo:20190107024558p:plain

  • packing後のEntryPoint

f:id:toDo:20190107024216p:plain

packerにはフリーのUPXを使用した。

変更された点としてpackingしたプログラムでは文字列が参照できなくなっていた。 さらにpackingする前にはなかった処理として繰り返し処理が追加されていた。

f:id:toDo:20190107024255p:plain

ここで手が詰まったためアンパックの技術について調べてみるとどうやらpackingしたプログラムには同じような繰り返し処理を何度か繰り返すことがあるらしく、展開処理をしているとのこと。

つまりこの展開処理がすべて終わった後に飛んだアドレスがOEPではないだろうか????

f:id:toDo:20190107031002p:plain

見てみると401150番地に飛ぶことがわかった。

ここから2時間ほどどうすればいいのかわからず悩むことになったのだがReadMeをよく読むとFind the OEPと書いてあるのでアドレスがフラグなのではと思い入力してみるとあっさり通過。

感想

英語は強敵でしたね・・・

プライバシーポリシー お問い合わせ