코드엔진 level15

보안/리버싱 2017. 9. 8. 20:02


코드엔진 level15
: http://codeengn.com/challenges/basic/15






레벨 15문제를 보게되면 바로 이전에 풀었던 14번 문제랑 똑같은 유형인 것을 알게 된다. Name이 "CodeEngn"일


경우 Serial을 구하라는 문제!






프로그램을 실행하게 된다면 이런 Name과 Serial이 따로 분리된 프로그램이 화면에 뿌려질 것이다.


그러면 일단 이 프로그램이 패킹이 되어있는 상태인지 먼저 확인을 하는 게 중요하겠다. 패킹이 되어있으면


패킹된 유형에 따라서 언패킹하는 방법도 다르니깐 PEID 프로그램을 통해서 확인한다.





다행히 이 프로그램은 패킹이 되어있는 프로그램이 아니라서 바로 어떤 프로그램으로 만들어 졌는지


보이게 된다. 그래서 이 프로그램은 델파이로 제작된 것임을 알게 된다.






올리디버거를 통해서 프로그램을 열게 되면 serial을 체크잇을 하면서 화면에 뿌리는 MessageBox의 문구가 있다.


그렇기 때문에 매번 그 문구를 검색하는 과정을 통해서 출력하는 주소로 이동을 하고, 문구를 출력해주는


부분 위쪽에 조건문이 있을 것이다. 그래서 그 조건문 cmp 부분에서 F2로 Break Point를 걸어주고, 프로그램을


F9으로 실행시켜주면 프로그램이 실행이 되면서 Name엔 "CodeEngn"이라고 입력을 하고, Serial 부분에는


"12341234" 등 자기가 원하는 값을 입력해준다.



그리고 Check it을 누르면 변경되는 값을 본다. 그러면 비교하는 비교문에 eax값이 어떤게 들어가있는 지를


확인할 수가 있다.




그러면 EAX에는 입력한 입력값이 들어가는 것을 확인할 수 있고, EAX에 입력된 값이 들어간 것을 확인하면


cmp비교문에서 뒤에 있는 값이 입력된 값을 가지고 있는 EAX와 비교하는 것을 알게 된다.









45B84에 올바른 Serial이 입력이 되어 있을 것이고, 왼쪽 아래창에서 Ctrl + G를 눌러서 저 주소의


값을 입력해서 Serial 번호를 확인한다. 확인을 하게 되면 "60 61 00 00 00 ~"의 값을 확인이 된다.



CMP EAX, DWORD PTR DS:[45B844] 를 해석을 하면 45B844 메모리 주소에 있는 4Byte만큼 EAX값과


비교를 해라라는 뜻이 된다. 그러면 앞에서 4byte만큼을 잡으면 "60 61 00 00"이다.


하지만 윈도우 운영체제에서는 리틀 인디안으로 값을 입력받기 때문에 우리가 저렇게 보는 것과는


반대로 답을 생각해야 한다.



빅 엔디안이면 [12] [34] [56] [78] 로 보지만


리틀 엔디안은 [78] [56] [34] [12]로 본다. 그래서 저기 위에 값을 "00 00 61 60"이라고


읽어야 한다.




16진수의 값을 10진수로 바꾸면 올바른 Serial 번호가 나올 것이다.






'보안 > 리버싱' 카테고리의 다른 글

코드엔진 level18  (0) 2017.09.11
코드엔진 level16  (0) 2017.09.08
코드엔진 level14  (0) 2017.09.07
코드엔진 level13  (0) 2017.09.07
코드엔진 level12  (0) 2017.09.06

설정

트랙백

댓글