728x90


Challenges : Basic 05


Author : Acid Bytes [CFF]

Korean 
이 프로그램의 등록키는 무엇인가 

English 

The registration key of this program is? 

---------------------------------------------------------------------------------

-준비물 : OllyDbg , OllyDump(플러그인입니다.), PEiD, LordPE




실행시켜 보면 별거 없고


등록키 입력란에 올바른 값만 넣어주면 될것 같습니다. 디버거로 열어봅시다.


그럼 이상한 메시지가 팝업이 되고 확인을 누르면 이런창이 뜰 것입니다.



첫줄에 보면 PUSHAD라는 명령이 있는데 찾아보니 범용 레지스터의 데이터값을


스택에 저장한다네요. 한마디로 백업!


(참고로 순서는 EAX->ECX->EDX->EBX->ESP->EBP->ESI->EDI 입니다.)


근데 왜 프로그램의 처음부터 레지스터값을 백업을 할까... 아까의 창도 거슬리고..


패킹이 되어있나 확인해 봅시다.


PEiD툴로 위 파일을 열어보면




 upx알고리즘으로 패킹이 되어있는 것을 확인하실 수 있습니다.


자 그럼 패킹을 풀어 봅시다. 다시 디버거로 넘어가서


PUSHAD 가 있으면 POPAD즉 다시 스택에서 레지스터로 값을 불러오는 작업도


있겠지요?? 실제로 upx방식은 POPAD후 JMP문으로 OEP(original entry point)로


갈수 있게 되어있습니다. 그럼 디버거에서 한참 ~~ 한참 밑으로 가 보시면


이렇게 POPAD와 JMP문이 나오게 될 겁니다.




그럼 JMP문에 break point 를 걸고 f9로 break point 까지 실행을 해서 OEP로 넘어가 봅시다.




저 아스키값만 보아도 제대로 온 것 같죠? 이제 Plugins - OllyDump를 이용해 덤프를 뜹니다.




이떄 Rebuild Import 는 체크해제후(체크하면 LordPE툴을 안써도 Rebuid가 됩니다.)  덤프를 뜹니다.


그리고 LordPE를 열어서 Rebuild PE를 하여 IAT(Import Address Table)을 재설정합니다.




여기서 잠깐!  IAT란? PE구조에서 실행파일이 어떤 라이브러리(DLL)의 어떤 함수를

                   사용하는지에 대한 테이블이라 생각하시면 됩니다. DLL의 로딩방식의 경우

                   프로그램에 사용되는 순간 로딩과 프로그램이 시작될때 로딩 이 있는데 전자의

                   경우 Explicit Linking방법으로 EAT에 기술이 되어있고 후자의 경우

                   Implicit Linking방법으로 IAT에 기술이 되어 있다고 합니다.




저 버튼으로 PE구조를 Rebuild 해줄 수 있습니다. 그리고 다시 PEiD로 확인하면




언패킹 된 것을 확인할 수 있습니다.



나머지는 OllyDbg를 열어 search for로 모든 text보기를 하시면 답을 아실 수 있을 겁니다.

728x90

+ Recent posts