Flag = WhiteHat{SHA1(key)}

Download file
Download fileを解凍すると、Re200.exeができます。
fileコマンドでファイル形式を確認してみます。
% file Re200.exe
Re200.exe: PE32 executable (console) Intel 80386, for MS Windows
Windowsのコンソールアプリであることが分かりました。
コマンドプロンプトで実行してみます。
>Re200.exe
Key wrong!
keyが間違っているようです。おそらくコマンドライン引数で正しいキーを与えれば良いのでしょう。
ここで、IDA Proで解析してみます。
main関数の最初で次のようにmovでメモリコピーしています。
mov     ecx, ds:dword_403158
mov     [ebp+var_27C], ecx
mov     edx, ds:dword_40315C
mov     [ebp+var_278], edx
mov     eax, ds:dword_403160
mov     [ebp+var_274], eax
mov     ecx, ds:dword_403164
mov     [ebp+var_270], ecx
mov     dl, ds:byte_403168
mov     [ebp+var_26C], dl
実際にmovでコピーされる値は次の通りです。最後に0(null)終端していますので、文字列化されることが分かります。

.rdata:00403158 dword_403158    dd 41683056h            ; DATA XREF: _main+6Dr
.rdata:0040315C dword_40315C    dd 47464364h            ; DATA XREF: _main+79r
.rdata:00403160 dword_403160    dd 6E464762h            ; DATA XREF: _main+85r
.rdata:00403164 dword_403164    dd 3D675350h            ; DATA XREF: _main+90r
.rdata:00403168 byte_403168     db 0                    ; DATA XREF: _main+9Cr
Intel x86プロセッサのバイトオーダはリトルエンディアンなので、次のようにメモリにコピーされます。

27C 27B 27A 279 278 277 276 275 274 273 272 271 270 26F 26E 26D 26C
56 30 68 41 64 43 46 47 62 47 46 6E 50 53 67 3D 00
V 0 h A d C F G b G F n P S g =  

この文字列は16文字(4の倍数)で最後が=で終わっているので、おそらくBASE64ですね。
復号すると次のようになります。
WH@t!Flag=(
続いて2つ目のmovの塊が出てきます。
mov     ecx, ds:dword_40316C
mov     [ebp+var_3A4], ecx
mov     edx, ds:dword_403170
mov     [ebp+var_3A0], edx
mov     eax, ds:dword_403174
mov     [ebp+var_39C], eax
mov     ecx, ds:dword_403178
mov     [ebp+var_398], ecx
mov     dl, ds:byte_40317C
mov     [ebp+var_394], dl
実際にコピーされるデータは次の通りです。
.rdata:0040316C dword_40316C    dd 48523151h            ; DATA XREF: _main+BEr
.rdata:00403170 dword_403170    dd 54355554h            ; DATA XREF: _main+CAr
.rdata:00403174 dword_403174    dd 55645555h            ; DATA XREF: _main+D6r
.rdata:00403178 dword_403178    dd 3D3D514Bh            ; DATA XREF: _main+E1r
.rdata:0040317C byte_40317C     db 0                    ; DATA XREF: _main+EDr
同様にして、

3A4 3A3 3A2 3A1 3A0 39F 39E 39D 39C 39B 39A 399 398 397 396 395 394
51 31 52 48 54 55 35 54 55 55 64 55 4B 51 3D 3D 00
Q 1 R H T U 5 T U U d U K Q = =  

BASE64で復号すると、
CTGMNSQGT)
さらに3つ目のmovの塊です。
mov     ecx, ds:dword_403180
mov     [ebp+var_16C], ecx
mov     edx, ds:dword_403184
mov     [ebp+var_168], edx
mov     eax, ds:dword_403188
mov     [ebp+var_164], eax
mov     cl, ds:byte_40318C
mov     [ebp+var_160], cl
.rdata:00403180 dword_403180    dd 79495551h            ; DATA XREF: _main+10Fr
.rdata:00403184 dword_403184    dd 4246444Eh            ; DATA XREF: _main+11Br
.rdata:00403188 dword_403188    dd 3D3D7751h            ; DATA XREF: _main+127r
.rdata:0040318C byte_40318C     db 0                    ; DATA XREF: _main+132r
これも同様に、

16C 16B 16A 169 168 167 166 165 164 163 162 161 160
51 55 49 79 4E 44 46 42 51 77 3D 3D 00
Q U I y N D F B Q w = =  

BASE64で復号すると、
AB241AC
復号した3つの文字列をうまく連結すると、次のようになります。
WH@t!Flag=(AB241ACCTGMNSQGT)
さて、ここで実行ファイルに上記で得られた文字列をコマンドライン引数に渡して起動してみましょう。
> Re200.exe WH@t!Flag=(AB241ACCTGMNSQGT)
Key OK!
ということで、この文字列がkeyのようです。
この文字列をSHA1でハッシュ化した次の文字列がFlag(答え)となります。
WhiteHat{1ceeebacb946479997e13a289124ac080693c0bc}
熱血! アセンブラ入門
坂井弘亮
秀和システム
2015-06-12