Easy Crack

문자열 검색해서 Incorrect Password 찾음. Congratulation !! 이랑 같이 있음
해당 모듈 부분 찾아가보면
첫번째 분기문을 보면
cmp byte ptr ss:[esp+5], 61
Python
이라고 써 있는데, 스택상의 esp+5 의 값을 가져와서 a랑 비교하겠다는 건데, 입력값이 ss:[esp+4] 이기 때문에 두번째 문자와 a 가 같은지를 보겠다는 거다.
두번째 자리에 a를 넣어주었을 때 분기문 안으로 들어가는 것을 확인할 수 있다.
다음 분기문을 보자
스택에 2 넣어주고 (아마 함수 인자겠지)
ecx에 ss:[esp+A]의 주소를 넣어준다.
그러고 함수를 호출하는데 아마 이렇게 생겼을 듯
sub_401150( 입력의 3번째 문자부터,5y ,2)
뭐 암튼 들어가서 보니까 함수 리턴이 0이어야 분기분 안으로 들어간다.
그럼 언제 리턴이 0인지 보면
일단 0x401162에서 eax 초기화 해주고, 0x401174에서 al에 ds:[esi-1]을 넣어준다.
그 값을 메모리에서 보면 y임. 그 다음에 ecx 초기화 해주고ds:[edi-1]과 비교한다.
결국 이게 뭐냐면 esi -1 이랑, edi -1이랑 같은지 확인하라는 것.
결국은 3,4번째 문자가 5y인지 확인하는 루틴인 거다.
*a5y******* 이 되는것이겠다.
느낌새가 Easy를 하기 위한 E 가 올거같지 않냐
다음 분기문을 보자.
R3versing이랑 비교한다.
한 글자씩 비교하는 부분이 보이는데
1a5y2R3versing d이렇게 되는 경우에야 해당 부분을 빠져나올 수 있다
앞에 값이 E 인거 같아서 넣어보니까 통과했다. 좀더 알아보긴 하자.
0x401100 에서 esp+4와 E를 비교하는 부분이 있다. esp+4가 이제 우리 입력의 시작 파트니까 해당 부분이 E 이어야 한다.
답 : Ea5yR3versing