문제는 다음과 같다.

언팩을 하라는 것을 봐서 패킹이 되어있는 프로그램 같다.
PEView로 우선 살펴보자.

UPX패킹이 되어있으므로 Basic L05에서와 똑같이 언패킹을 진행해주면 된다.
2026.09.15 - [리버싱/CodeEngn 문제해결] - Basic L05
Basic L05
문제는 다음과 같다.프로그램을 실행하면 아래와 같이 입력창과 함께 Register now버튼이 보인다.버튼을 눌러보면 다음과 같이 뜬다.우선 이 프로그램을 x32dbg로 열어보자.위와 같이 우리가 알던 EP
stupid-dev.tistory.com
언패킹을 시도하면 아래와 같이 jne로 반복문이 있는데 jmp문에 bp를 걸고 탈출하면 EP까지 쉽게 도달 할 수 있다.

OEP까지 도달했다. OEP의 값은 00401360이다.

이번에도 마찬가지로 문자열 참조를 통해서 검색을 진행했다.

위 화면을 바탕으로 문자열을 검색했다.

Wrong Serial이라는 문자열로 검색하니 다음과 같은 코드에 도달했다.
우선 보이는 것이 GetDlgItemTextA라는 함수인데 윈도우 프로그래밍을 해봤다면 누구나 아는 함수이다.
오브젝트에서 문자를 가져오는 함수인데 Check Serial버튼을 눌렀을때 입력창에 적힌 문자열을 가져오는 것으로 판단된다.
해당 위치에 BP를 걸고 "Hello"입력후 버튼을 눌러봤다.

예상한대로 Hello라는 텍스트가 4235d4에 옮겨졌다.
이후 코드를 보면 push 4235d4라는 부분이 보인다. 이 값을 이용해서 뭔가를 시도하려는 것 같다.
우리가 입력한 값을 스택에 넣고 "AD46DFS547"이라는 값을 스택에 넣은뒤 401290을 call한다.
call 이후 add esp, 8이 있는 걸로 봐서 401290은 cdecl로 정의된 함수이고 파라미터의 크기는 8바이트이다.
함수를 실행하고 나면 eax의 값은 FFFFFFFF이다.

test eax, eax를 하면 ZF가 0이므로 아래에 보이는것 처럼 분기하게 된다.

여기서 예상할 수 있는 점은 401290이라는 함수가 문자열을 비교하는 함수라는 것이다.
그러므로 "Hello"와 비교되는 "AD46DFS547"이 Serial값으로 예측된다. 이 값을 입력해보자.
값을 입력후 call 401290을 실행한 직후 레지스터 창이다. 아까와는 다르게 0이 반환되었다.

test eax, eax에서 ZF가 1로 설정된다.

그러므로 이번엔 분기하지 않았다.

시리얼키를 찾는데 성공했다.

그럼 정답은 OEP + Serial이므로 00401360 + AD46DFS547 = 00401360AD46DFS547 이 정답이다.
이번 문제도 사실 지난번 5번과 비슷한 난이도의 문제인것 같다.
언패킹을 하고 원하는 위치의 로직을 잡아낼 수 있는가 정도를 바라는 문제같다.