2012년 8월 14일 화요일

스타크래프트 시디키 알고리즘 분석 [1]



스타크래프트 오리지널 설치 파일을 리버싱 해서 분석한 내용을 정리한 글입니다.
아직 리버싱을 배우는 단계라 설명과 리버싱 과정에 부족함이 많습니다.
저작권문제가 있을시 삭제하겠습니다.



1. 먼저 설치파일을 PEiD로 분석하면 패킹이 되어 있지 않는것을 확인할 수 있습니다.



2. 먼저 ollydbg나 immunity debugger와 같은 프로그램으로 설치 파일을 실행합니다.

시작하면은 분석하려는 시디키와 무관하니 Install Starcraft 단추를 누릅니다.


3. 라이센스 동의란 창이 나옵니다. 여기서 agree를 누르시면 시디키를 입력하는 창이나오는데

여기서 back to user 기법을 사용해 시디키 알고리즘 부분을 찾아가겠습니다.


4. 위의 상태에서 pause 버튼을 누르시고 아래의 그림과 같이

debug-execute till user code 를 클릭합니다.


5. back to user 모드가 되면 라이센스 동의 창에서 agree를 클릭합니다.

그러면 디버거가 마지막 함수의 call이 끝난 지점을 찾아갑니다.


6. 그 상태에서 F8 키를 눌러 다음 명령어를 찾습니다.

디버거가 가리키는 그 명령어가 시디키 입력 코드가 시작하는 부분입니다.


7.  이제 다시 설치 파일로 돌아와서 이름과 시디키 입력란을 채웁니다.

알아보기 쉬운 수를 채우면 리버싱이 조금 편해집니다. (ex 1234567890123)

그리고나서 다시 back to user 모드를 사용해 시디키를 확인 함수의 마지막 부분을 찾습니다.

여기서 조금 시간이 걸릴 수 있습니다.



8. okay를 누르면 에러 메세지가 뜨고, 아래의 그림에서 보이는 명령어가

에러 메세지를 띄우고 난 후 리턴되기 바로 전의 명령어라는것을 알 수 있습니다.



9.  back to user로 찾은 코드 위에 브레이크 포인트를 걸어보면 MessageBox api 함수가

실행되고, 또 에러메세지의 내용이 넘어가는 과정을 볼 수 있습니다.

이제 여기서부터는 계속 추측과 확인을 반복하며,

JMP나 call되는 함수 내부로 들어가서 시디키를 확인하는 알고리즘이 있는지 찾아야 합니다.

또한 명령어가 call에 의해 불려졌다면 불려지기 전의 명령어를 찾고,

계속 명령어를 거꾸로 분석해 가야합니다.




10.  조금만 올라가다 보면 아래 그림에서 보이듯이 

004058A4, 0040D07D, 0040D2DF, 0040F83E, 0040F85E 등과 같은 주소에서

불려지는 명령어를 찾으실 수 있습니다.

각각의 주소로 들어가서 추측하과 확인하는 과정을 거치다보면...



11. 다음과 같이 'starcraft - CD key' 라는 찾으실 수 있습니다.

그럼 이 근처가 스타크래프트 시디키 알고리즘이 있을거라는 추측을 하실 수 있습니다.





스타크래프트 시디키 알고리즘 분석 [2] : http://carpedm20.blogspot.kr/2012/08/2.html




댓글 1개:

  1. execute till user code를 하고 agree를 눌렀는데 전혀 반응하지않습니다 그전에 생략된 과정이 있는데 제가 놓친걸까요?

    답글삭제