군생활 구하면 된다.


실행해보면 확인버튼 누를때마다 1씩 증가한다. 군생활 일수만큼 증가하면 될 것 같다.

안티디버깅 걸려있다. EAX값 바꿔서 우회하면 된다.

그다음 메시지 박스 띄우는 부분에 일수값이 인자로 들어갈거기 때문에 모든 메시지 박스 띄우는 함수에 BP걸고 돌렸더니 다음부분이 나왔다.

일수값이 세팅된 023EE970 영역에 하드웨어 BP걸고 값이 증가하는 부분을 찾아봤다.

해당 영역에서 값이 1증가한 상태로 잡히는걸 볼 수 있고 008BF820 지점에서 이미 증가한 값이 세팅된 체로 존재해 해당 지점에 다시 하드웨어 BP걸고 돌려봤다.

쭉 트레이싱 하다 보면 다음 포인트에서 값이 증가되어있는데 해당 지점에 오기전에 이미 EAX값에 증가된 값이 세팅되어 있기 때문에 스택 참고해서 해당 지점 호출하는 곳으로 가봤다.

위의 사진부분을 콜하는 함수 지점인데 위쪽을 보면 EAX값 세팅할때  참조하는 메모리 주소를 보니 008BF808이란 지점이었고 이 지점에 하드웨어 BP 걸고 다시 돌려봤다.

 

쭉 트레이싱하다보면 해당지점에서 PUSH EAX로 하드웨어 BP 걸어논 메모리에 증가된 값이 들어오고 ECX값이 세팅되는 023EE920을 다시 하드웨어 BP걸고 돌려봤다.


다시 트레이싱 하다보면 다음지점에서 EBX값의 메모리주소 영역에 EDX에서 세팅된 값이 들어오는데 EDX값은 EDI값의 메모리주소영역인 023E4FB8의 들어있는 값으로 세팅되었었다. 023E4FB8 지점에 다시 하드웨어 BP를 걸고 돌려봤다. 

해당 지점에서 멈추는데 LEA EBP, [EDI+EAX] 부분을 통해  1 증가된 값이 세팅되었다. 드디어 값이 최초로 세팅되는 지점을 찾았고 그럼 이 함수 부분이 리턴되고나서 이 증가된 값을 기준 군대날과 비교해서 프로그램 실행흐름이 나뉘어질거라고 생각했다.

쭉 트레이싱하다보면 리턴 후 다음 부분에서 ESI에 담긴 증가된 값을 EAX에 넣은 후 EBP에 있는 값(790일)과 비교하는걸 볼수 있었다. EAX값을 791로 바꿔서 원래 흐름과 다르게 점프하도록 해봤더니 메시지 박스가 안뜨고 프로그램이 종료된걸 확인할 수 있었다.

790을 md5로 바꿔서 인증해봤더니 정상적으로 인증이 되었다.


'Wargame > CodeEngn' 카테고리의 다른 글

CodeEngn advance 8번  (0) 2018.02.28
CodeEngn advance 7번  (0) 2018.02.28
code engn advance 5번  (0) 2018.02.08
code engn advance 4번  (0) 2018.02.08
code engn advance 3번  (0) 2018.02.08
블로그 이미지

JeonYoungSin

메모 기록용 공간

,