프로그램을 실행하면 옳은값이 아닐경우 프로그램이 멈춘다. 


문제명도 그렇고 이부분에서 프로그램이 멈추는것도 그렇고 뭔가 어셈블리어를 매우 자세히 봐야할거 같은 느낌이 들었다.



입력을 받고 처리하는 부분도 IDA로 보았을때 역시나 완벽한 디컴파일이 안된다.



IDA 기능인 assembly graph view기능을 통해 보았을때 성공 메시지를 띄워주는 부분으로 점프하는 부분이 없다.


이부분에서 감이 매우안와서 고생했다.



GetDlgItemInt함수를 통해 input값을 eax에 저장하고 함수를 호출한후에 검증한다.


설명부터 하자면 401071의 점프하는 부분을NOP로 맞춰줘야 한다.


일단 내가 입력한 input값을 가지고 연산을 하는데 4084D0에 내가 입력한 값이 저장된다. 



그후에 0x601605C7을 더해주고 INC연산을 4번 더해서 총 4를 더해준다.



여기서 100401071이 중요하다. 


이 값은 위에서 점프하는 부분을 nop로 만들어주는데 밑의 사진이 바로 그부분이다.



eax에 있는 값을 두번 0x90으로 바꿔주는데 공교롭게도 위에서 우리가 nop로 바꿔줘야할 코드가 2byte이다.


즉 내가 입력한 값에 4를 더해주고 0x601605C7을 더한 값이 100401071이 되어야 하고 바이트 포인터이니까 401071이 된다.


이부분에 90을 두번 넣어주므로 결국에는 어셈블리어를 변경하는 셈이다.



식을통해 산출한 input값을 입력한후 디버깅하면 연산후에 점프하는 어셈블리어가 nop로 바뀌어있다.


입력을하면 성공메시지가 뜬다.




이문제는 문제를 만든사람도 참신하다는 생각이들고 이런식의 리버싱문제를 처음접해봐서 신기했다.


확실히 어셈블리어만 보고 리버싱하는 연습이 매우 필요할거같다.


'문제 > Reversing.kr' 카테고리의 다른 글

Reversing.kr ImagePrc  (0) 2017.01.23
Reversing.kr Ransomware  (0) 2017.01.21
Reversing.kr x64 Lotto  (0) 2016.10.06
Reversing.kr HateIntel  (0) 2016.10.05
Reversing.kr Music Player  (0) 2016.10.04

+ Recent posts