CodeEngn Reversing Basic_Level16


프로그램 실행 모습이다.

패킹은 안 되어있는 것 같다.

수상한 문자열에 string에 bp를 걸었다. 그런데 근처에서 분기하는 점프나 cmp를 찾기가 어렵다.
그래서 처음부터 코드를 실행시키며 입력 값을 받는 부분을 찾아 bp를 걸었다.

bp가 걸린 곳부터 코드를 진행하며 분석했다.

커서가 놓인 JNZ로 성공/실패를 분기한다.
적당한 함수 리턴 코드를 넣어두고 함수를 지나쳐 간 뒤 원하는 위치로 return하여 위치를 조정하는 것 같다.
cmp하는 EAX와 [EBP -3C]의 내용을 보자.

EAX의 값은 password로 입력한 값을 16진수로 변환한 값이다.
[EBP -3C]는 위의 코드에서 여러 계산을 거쳐 만들어진 값이다. name을 이용하여 만들어진 수이다.

[EBP -3C]의 값이 password와 비교되는 값이다. E4C60D97로, 이는 10진수로 3838184855 이다.

비밀번호로 10진수로 변환한 값을 입력하니 성공했다. 따라서 flag는 3838184855 이다.