안 쓰던 블로그

리버싱-분기문 우회 본문

CTF/Reversing

리버싱-분기문 우회

proqk 2020. 8. 26. 15:56
반응형

.exe파일을 실행하면 patch me라는 메모장이 뜨는데, 이걸 well done으로 바꾸라는 문제

 

메모장에 문자열이 있어서 참조할 게 없으니까 그냥 쭉 실행을 해 본다

중간에 걸리면서 메모장이 뜬다

근데 여기가 cmp의 결과를 jne해서 넘어오는 작업을 하고 있다 (브레이크 포인트 부분)

 

정리하면 위에서 어떤 계산의 결과값으로 cmp를 비교한 후

맞으면 f.txt를 열고, 아니면 s.txt를 여는 프로그램이었다

(그리고 문자열에 들어있는 경로에 들어가면 그 파일이 실제로 있더라)

 

jne이기 때문에 je로 바꿔주면 간단하게 분기문을 바꿀 수 있다

바꾸고 파일 패치 후 실행

 


분기문을 바꾸지 않고 코드 분석을 통해 하는 방법도 한 번 해 보겠다

 

주변 코드를 보면 cmp로 ebp-4를 0과 비교하는데, 이 ebp-4값이 어디서 왔는지를 확인해야 한다

찾아보면 바로 위에 mov ebp-4, eax하는 부분이 보인다

eax는 함수 수행 후 반환값을 가지고 오니까 무슨 함수의 결과가 ebp-4값인 것이다

 

그 함수는 당연히 그 바로 위에 call 07.401120일테고

함수를 보면 두 문자열을 비교하고 있다

 

즉, 함수는 strcmp이라 예상할 수 있고, 두 문자열을 동일하게 해 주면 jne 분기문을 넘어갈 수 있을 것이다

리버싱에서는 매개변수로 다른 문자열 두 개가 들어갔는데 반환값으로 1, 0이 나오면 strcmp함수를 보통 추정하게 된다고 한다

 

아까 문자열 maatch과 meetch에서 덤프에 주소지로 찾아서 406030으로 넘어간다

그러면 문자열 두 개가 나란히 있는 걸 볼 수 있다

문자열이 같게 해야 하니까 meetch를 maatch로 바꿔준다

 

jne는 같지 않을 때 점프니까 이제는 같아서 점프가 될 것이다

패치로 .exe파일로 저장해 준다

 

제대로 파일이 실행된다

반응형
Comments