Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

kaka09

code engine basic 6 본문

Reversing

code engine basic 6

kaka09 2017. 7. 31. 14:50

   

[사진]1-1


이번 문제는 unpack을 먼저 시도하라고 문제에서 친절하게 알려준다. 특정 시리얼 번호와 OEP 코드를 찾으라는건데 리버싱을 처음 접해보았기 때문에 OEP 코드가 무엇인지 검색을 해봤다. 


검색 결과 OEP(Original Entry Point) 코드는 패킹된 프로그램을 실행할때 원본 코드를 실행시키기 위하여 원본코드가 존재하는곳으로 분기하는 코드를 말하는 것 같다. 프로그램이 패킹이되면서 여러 정보들로 덮어쓰워지는?데 프로그램이 정상적으로 실행되기 위해서는 패킹된 정보들을 풀고 원래의 정보들(원본 소스코드 포함)을 가리켜서 실행시키는 구간이 있는데 이를 OEP라고 하는것 같다.


정확히 맞는 개념이 아닐 수도 있지만 일단은 흐름상 이렇다라는걸 알아두고 추후 다시 공부해보도록 해야겠다..


OEP에 대한 배경지식은 여기까지 하고 이제는 Unpack을 실시하여 문제를 풀어보도록 하자


[사진] 1-2


upx.exe 라는 언팩 툴을 이용하여 패킹을 까보았다.



[사진] 1-3


언패킹을 시도하여 올리디버거로 열어본 결과 00401360 지점부터 시작하는것을 알수 있고 해당 지점이 함수 프롤로그임을 봤을때, 해당 지점은 프로그램의 시작부라고 봐도 될듯 하다. 00401360 지점이 프로그램의 시작부라면 OEP 코드는 바로 이 지점이라고 할 수 있다. 왜냐하면 여기서부터 프로그램이 시작되어야할 원본 코드이기 때문에 당연히 00401360 이 지점을 가리켜야 하기 때문이다. 그러면 이제 시리얼 키를 찾아보자 이처럼 무언가 특정 값을 찾아야 할 때는 String이 저장되어 있는 영역을 검색하면 된다. 올리디버거든 IDA든 이러한 기능들은 다 내장되어 있다.


[사진] 1-4


올리 디버거에서 String을 찾는 법은 우클릭->Search for -> All referenced text String을 클릭하면 [사진]1-4 에서 보여지는 것 처럼 해당 프로그램에 존재하는 모든 문자열을 뽑아 낼 수 있다. 문자열 맨 위의 항목을 보면 "AD46DFS547" 라는 문자열 값이 존재하는데 아무리 봐도 이게 문제에서 말하는 키값인거 같다. 한번 프로그램을 실행시켜서 해당 키값을 넣었을 때와 안 넣었을 때의 차이를 비교해보자




[사진] 1-5


1234라는 값을 넣고 실행해본 결과 "Wrong serial!!!"이라는 값이 출력되었다. 즉 값이 틀린것을 알 수 있다.




[사진] 1-6


"AD46DFS547" 을 입력해본 결과 good job! 이라는 창과 함께 you got it :) 메세지가 출력되었다. 해당 키값이 정답임을 알 수 있는 대목이다.








'Reversing' 카테고리의 다른 글

code engn basic 9  (0) 2017.08.01
code engn basic 8  (0) 2017.08.01
code engn basic 7  (0) 2017.07.31
code engine basic 5  (0) 2017.07.27
code engine basic 4  (0) 2017.07.27