codeengn.com(Advance RCE L09)

2019. 3. 24. 00:04리버싱

안녕하세요, 저는 그냥 고3입니다.

시작할게요.


프로그램을 실행하면 유저 네임을 입력받고 패스워드를 입력받습니다.



이 후 이 프로그램을 string값들을 보면 DonaldDuck을 보실 수 있습니다. DonaldDuck은 유저의 이름일 것 입니다.


이제 브레이크 포인트를 걸고 보겠습니다.  이 후 유저이름에 DonaldDuck을 입력하고 password는 1234를 입력해 보겠습니다.


이 후에 013A13FF주소를 보면 CALL하는 것을 보실 수 있습니다. 여기를 F7스텝 인투 하도록 하겠습니다.


계속하다보면 다음과 같은 코드가 나옵니다. 이 코드는 유저네임 첫 글자가 공백인지 아닌지 체크하는 구문입니다.

계속 디버깅을 하다보면 013A104B에서 CMP구문을 볼 수 있습니다. 여기서 레지스터를 보시면 다음과 같습니다.

EAX = 4D2 는 10진수로 1234 곧 이것은 사용자의 입력 값 입니다.

이제 EAX와 비교하는 숫자를 확인보도록하겠습니다. 여기서 OLLYDBG는 리틀엔디안으로 되어있기 때문에 빅엔디안으로 변환해줘야됩니다. 따라서 88228F이 것을 10진수로 하면 8921743이렇게 됩니다.

이 값이 곧 PASSWORD가 됩니다.


이제 계속실행하다보면 JZ구문을 만납니다. 이 구문은 성공분기로 가는 것을 막기 때문에 NOP(NO OPERATION)로 수정합니다.

이제 루틴을 계속 디버깅하면 성공 문자열이 나옵니다.






'리버싱' 카테고리의 다른 글

Reversing.kr (Easy Keygen)  (0) 2020.04.08
keygen1  (0) 2019.10.09
keygenMe#0  (0) 2019.10.08
reversing.kr autohotkey1  (0) 2019.10.05
codeengn.com (advance 2)풀이  (0) 2019.04.01