드디어!!!!!!!!!! 대망의 codeengn basic 의 마지막문제 20번을 풀었습니다!!!

우선 파일을 열었을때의 모습입니다.

crackme3.key파일이 있어야 한다해서 임의로 만들어 메모장으로 안의 내용도 채워보았습니다.

이제 디버거로 열어보겠습니다. 시작부터 createfile과 readfile이 보입니다. 

create파일은 파일이 있는지 보는 거겠고,

readfile은 아마 그 파일을 읽어주는 기능을 하겠는데 여기서 중요한게 있습니다. 바로 12라고 적혀있는 곳인데요 이 숫자를 변환해보면 바로 파일의크기가 18바이트가 되어야한다는 사실입니다. 그래서 파일의 크기를 우선 18바이트로 맞춰줘야 합니다.

그렇게 맞춰주면 CMP로 파일이 18바이트가 맞느냐 라고 검사를 하는데 손쉽게 통과할 수 있게됩니다. 그럼 점프문을 통과합니다.

이제 두번째 관문을 맞이했습니다. CALL으로 F7 스텝인투를 해보겠습니다.

CALL부분입니다 XOR연산자가 많습니다. XOR은 쉽게말해서 두 값이 같으면 0, 아니면 1이라고 생각하면편합니다. 우선 ECX값을 0으로 만들고 EAX값도 0으로 만들어버립니다.

ESI에 입력된 값이 들어오고 EBX의 끝에 두자리를 41로 바꾸는군요 참고로 41은 A입니다.

AL에도 입력값의 값을 넣는데 제가 만들때 시작을 'A11111...'로해서 A가 있기 때문에 AL에도 41이 들어갑니다.그러곤 XOR AL,BL입니다. AL도 41이고 BL도 41이니 당연히 0이되겠습니다. 그렇게 쭉쭉 내려와서 ADD연산자가 보입니다. EAX값이 현재 0이니 더해도 아무 변화가 없습니다. CMP AL,0을 하면 당연히 참이되겠습니다. 그렇게 점프를 합니다. 만약에 참이아니라면 CL을 1 증가시켜 처음으로 점프해서 다시내려오고 다시 올라가고 하는 방식이 반복되더군요...

위와같이 말입니다..

리턴을통해 나오게되면 이녀석이 기다리고있습니다. 제가 입력한 값과 12345678을 연산시키는것 같습니다. 이곳을통과하려면 0을 만들어야겠습니다. 여기에 보면 DS는 313131이라고 나옵니다 제가 바뀌는 부분을 알아보니 가장 마지막 4칸이 바뀌어야 한다는 것을 알게되었습니다.

여길 보면 알수있습니다.

그렇게 저는 여기를 CTRL+E 로 바꿔보았습니다.


이렇게 둘 다 12345678이 되었습니다 그렇게 점프를하지않고 또 통과할 수 있게됩니다.

그렇게 쭉 내려오다보면 우리가 봐야하는 문구가 달린 MESSAGEBOX를 찾게됩니다.

완료!!


'Reversing > CodeEngn Basic' 카테고리의 다른 글

CodeEngn Basic 19  (0) 2015.08.08
CodeEngn Basic 18  (0) 2015.08.08
CodeEngn Basic 17  (0) 2015.08.05
CodeEngn Basic 16  (0) 2015.08.05
CodeEngn Basic 15  (0) 2015.07.27

+ Recent posts