튜기's blogggg

Codeengn advance #6

by St1tch






실행을 하면 이런식으로 숫자가 출력되고 확인을 누르면 계속 숫자가 올라간다.

즉 무슨 숫자에서 종료가 되는지 찾아야하는 문제이다.



UPX로 패킹이 되어있는데 언패킹을 하고 바로 MessageBox함수를 찾아 보았는데 없다.

그래서 동적분석으로 어디서 호출 되는지 찾아보았다.



동적 분석을 하다가 요놈을 찾았다.

레지스터의 값들을 push하고 메시지박스를 호출하는 형태이다.


브레이크포인트를 잡고 다시 실행을 시켜보니 EBP에 2가 들어가있었고 그 값을 Text인자에 push하는 것을 볼 수있다.



분석을 하려면 계속 메시지박스가 떠서 이부분을 어떻게 수정을 해야할것같았다.



그냥 다 NOP으로 채워버렸다.

그리고 실행을 시키면 메시지박스가 뜨지 않는데

브레이크 포인트를 그대로 둬야 EBP값을 계속 확인할 수 있다.

nop으로 채울때는 메시지박스 함수가 끝난후에 채워야 에러가 나지 않는다.


실행을 시키면서 특이한 점을 발견했다.

특정 구역에 값들이 계속 저장이되는 것이다.

아래는 50-60까지 EBP값이다.



위에 다 나오지는 않았지만 9개 정도의 주소에 불규칙적으로 저장되는 것을 확인할 수있었다.

9개의 주소들이다.

30c17f8

30c1840

30c1870

30c1828

30c17c8

30c1888

30c1858

30c17e0

30c1810


숫자가 100일때의 덤프창이다.

덤프창을 보면 일정한 구간에 숫자들이 저장되어 있는것을 볼 수 있다.



따라서 nop부분의 브레이크포인트를 없애고 그냥 실행시키면 바로 프로그램이 끝나버리고

덤프창을 보면 위와 같이 종료되기 전에 숫자들이 저장 되어있다.

저 중에 가장 큰 수를 MD5로 변환하여 인증하니 답이였다.


블로그의 정보

튜기's blogg(st1tch)

St1tch

활동하기