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에 들어있는 값을 ..