Name이 CodeEngn일때 Serial을 구하시오

프로그램을 실행하면 Name과 Password를 입력할 수 있는 터미널이 나타난다.
프로그램 코드를 확인해보면 별도의 패킹은 되어있지 않은 것으로 확인된다.

15번 문제와 마찬가지로 Search for 기능을 이용해 인증 실패 구문 텍스트를 찾아 분기점을 확인한다.
...
0040159F | 3B45 C4 | cmp eax,dword ptr ss:[ebp-3C] |
004015A2 | 0F85 94000000 | jne 16.40163C |
...(생략)...
004015DE | C74424 04 D9004400 | mov dword ptr ss:[esp+4],16.4400 | 4400D9:" Good Job!\n"
004015E6 | C70424 C0334400 | mov dword ptr ss:[esp],16.4433C0 | [esp]:BaseThreadInitThunk+19
004015ED | E8 E6AD0300 | call 16.43C3D8 |
... (생략)
0040163C | C70424 F5FFFFFF | mov dword ptr ss:[esp],FFFFFFF5 | jne 여기로 점프함
00401643 | C745 90 01000000 | mov dword ptr ss:[ebp-70],1 |
0040164A | E8 F1F50000 | call <JMP.&GetStdHandle> |
...(생략)...
00401679 | C74424 04 FF004400 | mov dword ptr ss:[esp+4],16.4400 | 4400FF:" Wrong password!\n"
00401681 | C70424 C0334400 | mov dword ptr ss:[esp],16.4433C0 | [esp]:BaseThreadInitThunk+19
00401688 | E8 4BAD0300 | call 16.43C3D8 |
코드가 길어서 사진 대신 복붙으로 대체함.
cmp eax,dword ptr ss:[ebp-3C] 구문을 통해 eax 레지스터와 ebp-3C주소의 데이터를 비교하고, 두 값이 일치하지 않으면 실패 구문을 출력하는 주소로 점프한다.

문제 자체는 cmp 구문에 Breakpoint를 걸고 EAX값을 확인한 후, EBP-3C 위치의 hex값을 확인하면 쉽게 정답을 확인할 수 있다.

hex값 E4C60D97을 10진수로 변환해 정답을 입력한다.

코드엔진 깃허브에 가면 다양한 풀이를 확인할 수 있다.