[CodeEngn] Basic RCE – Level 09

http://codeengn.com/challenges/basic/09

Find the StolenByte
Ex) 75156A0068352040

Kiểm tra bằng PEiD ta thấy Packer là UPX. Đặt BP tại câu lệnh JMP huyền thoại ở 00407387, F9, F8:

[asm]00401000 90 nop
00401001 90 nop
00401002 90 nop
00401003 90 nop
00401004 90 nop
00401005 90 nop
00401006 90 nop
00401007 90 nop
00401008 90 nop
00401009 90 nop
0040100A 90 nop
0040100B 90 nop
0040100C 6A 00 push 0
0040100E E8 8C000000 call 09.0040109F ; jmp to USER32.MessageBoxA
00401013 6A 00 push 0
00401015 68 80000000 push 80
0040101A 6A 03 push 3
0040101C 6A 00 push 0
0040101E 6A 00 push 0
00401020 68 00000080 push 80000000[/asm]

Một dãy dài những dòng bị NOP chính là các byte ta cần tìm, vì hàm MessageBoxA nhận đầu vào là 4 tham số chứ không phải 1. Quay về 00407387:

[asm]0040736D . 61 popad
0040736E . 6A 00 push 0
00407370 . 68 00204000 push 09.00402000 ; ASCII “abex’ 3rd crackme”
00407375 . 68 12204000 push 09.00402012 ; ASCII “Click OK to check for the keyfile.”
0040737A . 8D4424 80 lea eax,ss:[esp-80]
0040737E > 6A 00 push 0
00407380 . 39C4 cmp esp,eax
00407382 .^ 75 FA jnz short 09.0040737E
00407384 . 83EC 80 sub esp,-80
00407387 .- E9 809CFFFF jmp 09.0040100C[/asm]

Ta thấy từ 0040737A đến 00407384 là rác, còn lại có 3 lệnh PUSH ở trên phù hợp những thứ ta đang tìm. Nếu thử ghi đè những byte đó vào các dòng bị NOP ở trên, ta thấy chúng trùng khớp:

[asm]00401000 6A 00 push 0
00401002 68 00204000 push 09.00402000 ; ASCII “abex’ 3rd crackme”
00401007 68 12204000 push 09.00402012 ; ASCII “Click OK to check for the keyfile.”
0040100C 6A 00 push 0
0040100E E8 8C000000 call 09.0040109F ; jmp to USER32.MessageBoxA
00401013 6A 00 push 0
00401015 68 80000000 push 80
0040101A 6A 03 push 3
0040101C 6A 00 push 0
0040101E 6A 00 push 0
00401020 68 00000080 push 80000000[/asm]

→ flag = 6A0068002040006812204000.

 

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *