PADOCON 2010 hand-ray 리버싱 풀이 1st

이번 파도콘 때 컨퍼런스 발표 외에도 섹션 밖에서 재미있는 이벤트들이 있었습니다. 그 중에서 순천향대학교 Security First 에서 핸드레이 리버싱 문제를 출제했었지요. 문제들이 재미있어서 소개합니다.

문제


다음 프로그램은 어떤 함수호출 규약을 사용하는가??

00401078  |.  6A 05          PUSH 5
0040107A  |.  6A 04          PUSH 4
0040107C  |.  6A 03          PUSH 3
0040107E  |.  6A 02          PUSH 2
00401080  |.  6A 01          PUSH 1
00401082  |.  E8 7EFFFFFF    CALL Q1.00401005
------------------------in the Function -----------------------
00401020  /> \55             PUSH EBP
00401021  |.  8BEC           MOV EBP,ESP
00401023  |.  83EC 40        SUB ESP,40
00401026  |.  53             PUSH EBX
00401027  |.  56             PUSH ESI
00401028  |.  57             PUSH EDI
00401029  |.  8D7D C0        LEA EDI,DWORD PTR SS:[EBP-40]
0040102C  |.  B9 10000000    MOV ECX,10
00401031  |.  B8 CCCCCCCC    MOV EAX,CCCCCCCC
00401036  |.  F3:AB          REP STOS DWORD PTR ES:[EDI]
00401038  |.  8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
0040103B  |.  0345 0C        ADD EAX,DWORD PTR SS:[EBP+C]
0040103E  |.  0345 10        ADD EAX,DWORD PTR SS:[EBP+10]
00401041  |.  0345 14        ADD EAX,DWORD PTR SS:[EBP+14]
00401044  |.  0345 18        ADD EAX,DWORD PTR SS:[EBP+18]
00401047  |.  5F             POP EDI
00401048  |.  5E             POP ESI
00401049  |.  5B             POP EBX
0040104A  |.  8BE5           MOV ESP,EBP
0040104C  |.  5D             POP EBP
0040104D  \.  C2 1400        RETN 14


0x00401082 에서 401005 함수를 호출합니다. 그리고 0x00404005 에서 실행 흐름이 0x00401020 으로 넘어갑니다. 이 상태에서 어떤 함수 호출 규약이 적용되었는지를 묻는 문제입니다. 따로 풀이를 할 것 없이 아래 참고 문헌을 읽어보면 쉽게 풀리는 문제입니다. 참 쉽죠잉?

참고 문헌


Calling Convention – 함수 호출 규약 :: http://www.reversecore.com/13

Similar Posts

  • PADOCON 2010 hand-ray 리버싱 풀이 2nd

    이번에는 두 번째 문제입니다. 이전 문제와 달리 약간의 프로그래밍 경험과 리버싱 경험이 필요했었구요. 핸드레이 리버싱인 만큼 컴퓨터를 비롯한 전자식 도구를 사용하지 않고 손(필기)으로 풀이하는 게 이 문제를 즐기는 포인트입니다. 한 마디로 요약하면, “삽질”을 해야 한다는 얘기죠? 문제 다음 프로그램에서 입력값이 j3m4I7w:_oYu?yjue 일때 출력값은 무엇인가? 일부로 주석을 지웠는지 모르겠지만, 같이 풀던 후배가 살짝 당황했던 문제입니다. 이…

  • From AppInit_DLLs To Injection

    [그림 1] 이메일 웜 Warezov는 AppInit_DLLs에 악성 DLL의 경로를 입력한다다음의 윈도우즈 레지스트리에 DLL 파일의 경로를 입력하면, 이후 새로운 프로세스가 생성될 때마다 키값에 입력된 DLL 파일이 프로세스에 인젝션됩니다.user32.dll이 프로세스에 적재되면서 DllMain 함수에서 레지스트리 키값을 열람하고 DLL을 적재할거라고 생각할 수 있지만, 그렇지 않습니다. AppInit_DLLs의 DLL 파일은 시스템 DLL 파일들이 적재된 이후에 프로세스 초기화 과정에서 프로세스에 적재됩니다. [그림…

  • DLL injection 은 어떻게 이루어지는가? – SetWindowsHookEx ()

    SetWindowsHookEx () 이번에는 윈도우즈에서 정상적으로 지원하는 후킹 함수를 이용하는 방법을 알아보겠습니다. 윈도우즈는 OS와 프로세스 간에 메시지를 주고받는데요. 키보드를 누른다던지, 마우스를 클릭한다던지, 디버깅에 관한 메시지라던지 그런 것들을요. 그리고 그렇게 주고받는 메시지를 후킹할 수 있는 함수도 제공하고 있습니다. [그림 1] SetWindowsHookEx() 함수의 개요 SetWindowsHookEx() 함수가 그것이죠. [그림 1]처럼 이 함수에 삽입할 DLL의 Handler, 즉 주소와 함수의 주소를…

  • DLL injection 은 어떻게 이루어지는가? – CreatRomoteThread ()

    CreatRomoteThread () DLL Injection의 마지막 세 번째 방법은 CreatRemoteThread() 함수를 이용하는 것입니다. 가장 많이 쓰이는 방법이라서 관련 문서도 쉽게 찾을 수 있죠. [그림 1] CreatRemoteThread() 의 개요 CreatRemoteThread() 함수는 이름 그대로 쓰레드를 만드는 API 함수입니다. 원격은 다른 프로세스에서 쓰레드를 생성하기 때문에 붙은 것이죠. [그림 1]과 같은 구조로 구성되어 있고, 윈도우즈 NT 계열에서 지원합니다. 첫 번째…

  • Hackarmy 백도어, IRC 봇넷에서 테스트

    백도어 분석하면서 IRC 서버 세팅해서 테스트해봤습니다. 아직 사용법이 익숙하지 않아서 기본적인 명령어 밖에는 할 줄 모르겠네요. [그림 1] IRC 봇넷 채널에서 명령을 내림 블랙햇은 IRC 채널에서 대기하고 있습니다. 혹은 원하는 시간에 접속을 하면 감염된 좀비들이 기다리고 있겠죠. 테스트라서 좀비는 하나 뿐이었습니다. “!morris tounge” 는 “내가 네 주인이다.”라고 알리는 주문입니다. 처음에 접속해서 이 주문을 안 외치면…

  • DEFCON 2009 :: Binary L33tness 100, EDB로 풀어보자.

    지난 6~8일에 있었던 데프콘 CTF 예선 문제입니다. 위 그림처럼 실행하면 암호를 묻고 틀린다면, 욕을 하는 기분 나쁜 녀석입니다. 기분도 나빠졌으니 까짓꺼 한 번 깨줘야겠죠? 준비 사항 리눅스 계열의 OS. libnet1 패키지 Evans Debugger 이 파일은 ELF 포맷으로 되어 있습니다. ELF란 유닉스, 리눅스 등의 실행 파일의 구조인데 ,이에 대해 설명하려면 끝이 없으니 자세한 내용을 알고 싶으시면…

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다