올리로 열어 봅시다.
문자열이나 찾아 봅시다.
축하한다니.. 굉장히 수상하니 가 봅시다.
역시나 성공의 메시지박스를 띄우는 문자열이었습니다. 나란히 실패 메시지도 있습니다.
그리고 아마도 빨간네모로 표시한 부분이 마지막 분기점인 것 같습니다.
혹시 모르니 breakpoint를 걸어 둡시다.
위로 조금 올라가면
getDlgItemTextA함수를 호출하는 부분이 있습니다.
우리가 입력한 값을 읽기 위한 함수 일 것입니다. 역시 breakpoint 를 걸어두고 이제 실행하여
갑을 입력합시다.
저는 CrackMe라는 문자열을 입력하였습니다. 그리고 확인!
break를 걸어두었던 GetDlgItemText로 왔습니다.
근데 현재 비교문에서 헥사값61과 다르면 진행해보시면 알겠지만 종료가 됩니다.
밑에 확인해 보니
'r'입니다. 우리가 입력한 CrackMe의 두번째 바이트인 것을 알 수 있습니다. 따라서
일단 두번쨰 바이트는 헥사값61 즉 'a'라는 것을 알았습니다. 바꿔서 진행합시다.
이번에 "CarckMe"로 진해해 보면 앞선 비교문에서는 정상 진행하는 것을 볼 수 있습니다.
ECX레지스터의 위치에 입력한 값이 3번째 바이트 부터 있는 것이 보이며
밑에 00401135(실패 메시지)로 가는 분기가 있는 것을 보니
00401150 안에서 뭔가 있을 것 같습니다. follow 합시다.
쭉 보니 아까 위에서 push한 "5y"와 3,4번째 바이트를 비교하고 있습니다.
우리는 EAX를 0으로 만들어야 하므로(401150호출후 분기 TEST EAX,EAX)
입력을 다시 해 보겠습니다.
3, 4번째를 "5y"로 바꾸어 입력해서 넘어왔지만 새로운 난관이 있습니다.
이번에는 5번째바이트 부터 저기 "R3versing"이랑 비교를 합니다. 이 하 과정 생략하고
다시 입력하면
마지막 난관 처음에 break 걸어두었던 마지막 분기점으로 왔습니다. 이번에는
첫 바이트를 비교하고 있습니다. 이제 첫 바이트만 변경하면 올바른 값이 출력 될 것입니다.
요렇게!! (답은 가려주는 센스)
'ctf + wargame > reversing.kr' 카테고리의 다른 글
Easy Keygen (0) | 2015.11.27 |
---|