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
크리에이티브 커먼즈 라이센스
Creative Commons License

6l4ck3y3 #2. 지피지기, 백전불패/리버스 엔지니어링 , , , , , ,

Trackback Address:http://hisjournal.net/blog/trackback/312
[로그인][오픈아이디란?]