[codeengn] basic #016

·2025년 7월 3일

CodeEngn 바로가기


문제

Name이 CodeEngn일때 Serial을 구하시오


1. 프로그램 실행


프로그램을 실행하면 Name과 Password를 입력할 수 있는 터미널이 나타난다.

프로그램 코드를 확인해보면 별도의 패킹은 되어있지 않은 것으로 확인된다.


2. 흐름 파악


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주소의 데이터를 비교하고, 두 값이 일치하지 않으면 실패 구문을 출력하는 주소로 점프한다.


3. 정답 확인


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

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


기타

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

profile
🔥

0개의 댓글