PADOCON 2010 hand-ray 리버싱 풀이 2nd
2010/02/27 17:19
이번에는 두 번째 문제입니다. 이전 문제와 달리 약간의 프로그래밍 경험과 리버싱 경험이 필요했었구요. 핸드레이 리버싱인 만큼 컴퓨터를 비롯한 전자식 도구를 사용하지 않고 손(필기)으로 풀이하는 게 이 문제를 즐기는 포인트입니다. 한 마디로 요약하면, "삽질"을 해야 한다는 얘기죠?
문제
다음 프로그램에서 입력값이 j3m4I7w:_oYu?yjue 일때 출력값은 무엇인가?
00401000 /$ 83EC 50 SUB ESP,50
00401003 |. A1 34604000 MOV EAX,DWORD PTR DS:[406034]
00401008 |. 8B0D 38604000 MOV ECX,DWORD PTR DS:[406038]
0040100E |. 8B15 3C604000 MOV EDX,DWORD PTR DS:[40603C]
00401014 |. 894424 00 MOV DWORD PTR SS:[ESP],EAX
00401018 |. A1 40604000 MOV EAX,DWORD PTR DS:[406040]
0040101D |. 894C24 04 MOV DWORD PTR SS:[ESP+4],ECX
00401021 |. 66:8B0D 446040>MOV CX,WORD PTR DS:[406044]
00401028 |. 57 PUSH EDI
00401029 |. 894424 10 MOV DWORD PTR SS:[ESP+10],EAX
0040102D |. 66:894C24 14 MOV WORD PTR SS:[ESP+14],CX
00401032 |. B9 0F000000 MOV ECX,0F
00401037 |. 33C0 XOR EAX,EAX
00401039 |. 8D7C24 16 LEA EDI,DWORD PTR SS:[ESP+16]
0040103D |. 895424 0C MOV DWORD PTR SS:[ESP+C],EDX
00401041 |. F3:AB REP STOS DWORD PTR ES:[EDI]
00401043 |. 66:AB STOS WORD PTR ES:[EDI]
00401045 |. 8D7C24 04 LEA EDI,DWORD PTR SS:[ESP+4]
00401049 |. 83C9 FF OR ECX,FFFFFFFF
0040104C |. 33C0 XOR EAX,EAX
0040104E |. 33D2 XOR EDX,EDX
00401050 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00401052 |. F7D1 NOT ECX
00401054 |. 49 DEC ECX
00401055 |. 74 21 JE SHORT q1.00401078
00401057 |> 8A4C14 04 /MOV CL,BYTE PTR SS:[ESP+EDX+4]
0040105B |. 8AC2 |MOV AL,DL
0040105D |. FEC0 |INC AL
0040105F |. 8D7C24 04 |LEA EDI,DWORD PTR SS:[ESP+4]
00401063 |. 32C8 |XOR CL,AL
00401065 |. 33C0 |XOR EAX,EAX
00401067 |. 884C14 04 |MOV BYTE PTR SS:[ESP+EDX+4],CL
0040106B |. 83C9 FF |OR ECX,FFFFFFFF
0040106E |. 42 |INC EDX
0040106F |. F2:AE |REPNE SCAS BYTE PTR ES:[EDI]
00401071 |. F7D1 |NOT ECX
00401073 |. 49 |DEC ECX
00401074 |. 3BD1 |CMP EDX,ECX
00401076 |.^ 72 DF \JB SHORT q1.00401057
00401078 |> 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4]
0040107C |. 51 PUSH ECX
0040107D |. 68 30604000 PUSH q1.00406030
00401082 |. E8 19000000 CALL q1.004010A0
00401087 |. 83C4 08 ADD ESP,8
0040108A |. 33C0 XOR EAX,EAX
0040108C |. 5F POP EDI
0040108D |. 83C4 50 ADD ESP,50
00401090 \. C3 RETN일부로 주석을 지웠는지 모르겠지만, 같이 풀던 후배가 살짝 당황했던 문제입니다. 이 문제를 풀기 위해서는 다음의 요소들을 고려해야합니다.
- Encoding Routine이 어디인가?
- Encoding Routine 직전의 스택은 어떤 모습인가?
- Encoding Routine 직전의 레지스터의 값은 무엇인가?
- ASCII 테이블
풀이
여기서부터 풀이입니다. [열기]
참고 문헌
Intel Instruction Set pages :: http://www3.itu.edu.tr/~kesgin/mul06/intel/index.html
ASCII printable characters :: http://en.wikipedia ··· characters
"#2. 지피지기, 백전불패 / 리버스 엔지니어링" 분류의 다른 글
| HDCON 2009 예선 Stage 0 (0) | 2010/06/11 |
| PADOCON 2010 hand-ray 리버싱 풀이 3rd (5) | 2010/02/28 |
| PADOCON 2010 hand-ray 리버싱 풀이 1st (0) | 2010/02/27 |
| InvokeClearTracks () at INETCPL.cpl in IE7 (0) | 2010/02/01 |
| Brute Forcing with DLL Injection (0) | 2010/01/10 |
| Evan's Debugger(EDB) Manual (0) | 2009/12/10 |
| OllyDbg로 쉽게 디버깅하기 - Back to User 모드 (0) | 2009/07/15 |
| DEFCON 2009 :: Binary L33tness 100, EDB로 풀어보자. (6) | 2009/06/28 |
Trackback Address:http://hisjournal.net/blog/trackback/312

