목록분류 전체보기 (37)
kaka09
[사진]1-1 StolenByte?? 를 찾아보라는 문제이다. StolenByte를 처음 들어 봤기에 구글링을 통해 알아보았다. StolenByte란 훔친 바이트를 의미한다. 패킹된 프로그램에서 특정 부분의 코드를 다른 부분으로 옮겨진 코드이다. 주로 엔트리 포인트에서 이용된다. OEP로 점프하기 전에 PUSH 되는것이 특징이라 할 수 있다. 정말로 그런지 올리 디버거를 통해 확인해 보자 [사진]1-2 패킹이 된 프로그램이라 POPAD 부분을 찾았고, 그 밑에 PUSH되는 인자 3개가 존재한다. 특히 2개의 문자열 인자를 살펴보면 무언가 경고창 같은거에 담겨질 메세지처럼 보인다. 그런데 OEP에 진입하지도 않았는데 이러한 인자들이 PUSH가 되었다는 것이 의심이 되는 상황이다. 일단 한번 프로그램을 실행..
[사진]1-1 OEP 코드를 찾으라는 것으로 보아 해당 문제는 패킹되어 있는 문제임을 알 수 있다. 올리 디버거로 해당문제를 디버깅 해보자 [사진]1-2 처음 명령어가 PUSHAD임을 봐서 패킹된 프로그램임을 단번에 알 수 있다. 처음에 PUSHAD로 시작하면 반대로 POPAD로 끝나는 부분이 있다. 해당부븐에 어딘가로 jmp 하는 구문이 있는데 거기가 바로 OEP 코드라고 할 수 있다. [사진]1-3 POPAD 밑에 jmp 08.01012475 부분이 있는데 여기가 바로 OEP이다
[사진] 1-1 해당 문제는 C드라이브의 이름을 CodeEngn 으로 바꿨을때 시리얼이 어떻게 변하는지를 묻는 문제다. C드라이브를 바꾸기전에 생성되는 시리얼 값을 분석해보자 [사진] 1-2 004010d0 영역에 있는 DialogBoxParamA 함수에 의해 생성된 입력창에 AAAA를 입력하면 [사진]1-2 처럼 String2에 AAAA가 들어간다. 그리고 밑에 있는 String1 영역에 시리얼 값처럼 보이는걸 확인 할 수 있다. 밑에 IstrcmpiA 라는 문자열 비교함수를 실행시키는 것을 미루어 보아 문자열이 서로 일치하는지 비교하는 함수인것 같다. [사진] 1-3 그대로 값을 넣어보고 실행하면 [사진]1-3 처럼 시리얼 값이 틀리다는 경고창이 출력 된다. 그럼 이제 String1에 들어있는 값을 ..
[사진]1-1 이번 문제는 unpack을 먼저 시도하라고 문제에서 친절하게 알려준다. 특정 시리얼 번호와 OEP 코드를 찾으라는건데 리버싱을 처음 접해보았기 때문에 OEP 코드가 무엇인지 검색을 해봤다. 검색 결과 OEP(Original Entry Point) 코드는 패킹된 프로그램을 실행할때 원본 코드를 실행시키기 위하여 원본코드가 존재하는곳으로 분기하는 코드를 말하는 것 같다. 프로그램이 패킹이되면서 여러 정보들로 덮어쓰워지는?데 프로그램이 정상적으로 실행되기 위해서는 패킹된 정보들을 풀고 원래의 정보들(원본 소스코드 포함)을 가리켜서 실행시키는 구간이 있는데 이를 OEP라고 하는것 같다. 정확히 맞는 개념이 아닐 수도 있지만 일단은 흐름상 이렇다라는걸 알아두고 추후 다시 공부해보도록 해야겠다.. O..
[사진] 1-1 해당 문제는 주어진 프로그램에서 등록키를 찾아보라는 문제 같으니 한번 프로그램을 실행시켜 보자 [사진] 1-2 프로그램을 실행시켜 보니 어떠한 키값을 입력해서 인증을 해야하는 프로그램처럼 보였다. 키값을 통해 인증을 한다는 것은 바이너리 내부에 인증과 관련된 키값이 존재할테고 그 키값을 입력하면 문제를 풀 수 있을것 같았다. 그러므로 디버거를 이용해 까보자 [사진] 1-3 디버거를 이용해 바이너리를 열어보면 경고창이 하나 뜬 다음 조금 이상한? 바이너리들이 보여진다.. 인터넷으로 검색해본 결과 패킹 되어 있는 바이너리이다. 따라서 언패킹을 시켜줘야 한다. 사용된 툴은 peid와 upx.exe 파일을 사용하였다. [사진] 1-4 먼저 PEID를 이용하여 바이너리가 어떤걸로 패킹이 되었는지 ..
[사진] 4-1 디버거를 탐지하는 함수의 이름을 찾아야 한다. 우선 프로그램을 실행시켜 보자 [사진] 4-2 프로그램의 실행결과 [사진]4-2 에서 보여지는 바와 같이 정상이라는 문구가 계속 출력되는것을 확인할 수 있다. 이제부터 ollydbg를 이용하여 프로그램을 분석해 보자 [사진] 4-3 프로그램을 쭈욱 실행하다보면 특정 함수를 call 하면서 "디버깅 당함" 이라는 메세지를 계속 출력한다. 해당 메세지를 출력하는 부분을 ollydbg로 찾아 보면 다음과 같다. [사진] 4-400401048 MOV ESI, ESP 에서부터 반복루틴이 실행되면서 디버깅을 당하는지 아닌지의 여부를 판단한다. 디버깅 탐지의 여부는 KERNEL32.IsDebuggerPresent 함수를 호출하면서 리턴 값이 1이면 디버깅..