글
코드엔진 level14
코드엔진 level14
: http://codeengn.com/challenges/basic/14
문제가 name이 CodeEngn 일때 Serial을 구하라는 문제이다.
프로그램을 실행을 하면 이런 프로그램이 실행이 된다. 두개의 TextBox가 있고, 두개의 버튼이
있다. 일단 제일 먼저 이 프로그램이 패킹이 되어있는 상태인지 먼저 확인을 한다.
PEID 프로그램으로 확인을 하니 역시나 패킹이 되어있는 것을 확인할 수 있다. 정말 패킹에 대한 개념이 없는
개발자가 프로그램을 개발했을 경우엔 패킹이 되어있지 않지만 보통의 경우엔 프로그램을 보호하기 위해서
패킹을 할 것이다. 그래서 PEID로 패킹여부를 먼저 확인을 한다.
string으로 찾는 것을 이용해서 스트링을 이용하면 getDlgItemText가 보인다.
GetDlgItemText()
함수는 대화상자의 컨트롤 ID를 사용해서 컨트롤에 포함된 글을 이용한다는 함수인데, 처음에 프로그램 화면에
표시되었던 TextBox의 내용을 컨트롤 하는 부분인 것을 알 수가 있다. 그러면 F9을 눌러서 프로그램이 실행을
하게 되면 이곳에 값이 어떻게 변경되는 지 알 수 있을 것 같다.
하지만 지금 구할려고 하는 것은 serial값이라서 getDlgItemText() 함수가 호출된 주소로 가서 밑에 비교되는
어셈블리어 코드가 있는지 먼저 확인한다.
해당 줄을 보면 cmp EAX, ESI 어셈블리 코드가 있다. 두개의 값이 서로 비교를 하는 데, 두개의 값을 볼려고 하면
cmp 다음 줄에 있는 코드에 F2로 break point를 걸고, 프로그램을 실행하면 저기 부분에서 작동이 멈추게 되어서
EAX와 ESI에 어떤 값이 들어가는지 알 수가 있다.
'보안 > 리버싱' 카테고리의 다른 글
코드엔진 level16 (0) | 2017.09.08 |
---|---|
코드엔진 level15 (0) | 2017.09.08 |
코드엔진 level13 (0) | 2017.09.07 |
코드엔진 level12 (0) | 2017.09.06 |
코드엔진 level11 (0) | 2017.09.06 |