본문 바로가기
Information Security/Reversing

[Code injection] 지뢰 찾기 핵 만들기 - 지뢰 보이기

by 이키마스 2021. 12. 30.

이번 포스팅부터는 윈도우 XP 지뢰 찾기 F1을 클릭하면 지뢰가 보이는 핵을 만들어보겠습니다.

사용하는 프로그램은 IDA 7.0 버전 (프리웨어 버전) + 이뮤니티 디버거를 사용하겠습니다.

해당 과정은 다음과 같이 진행할 것입니다.

1.F1 기능의 함수 및 F1 기능을 콜 하는 함수를 찾을 것입니다.

2. 지뢰를 보여주는 함수를 찾고

3.F1 기능의 함수를 없애고 그 대신 지뢰를 보여주는 함수를 넣는다.

4.(추후 예정) 해당 기능을 코드 인젝션을 통해서 프로그램화 시킴

1번부터 진행해 보겠습니다. IDA를 통해서 지뢰 찾기를 열어보시면 function 탭을 클릭하시면 위와 같은 사진이 나오는데 sub_숫자가 되어있는 부분은 지뢰 찾기 개발자가 만든 함수라고 합니다.

지뢰 찾기 같은 경우에는 심볼 서버를 설정해서 심볼을 받으면 함수명이 숫자 대신 원본 함수명이 나온다고 하는데 저는 왜 설정해도 똑같은지 모르겠네요 개 같은 MS..

함수를 하나씩 분석하면서 원하는 함수를 찾아도 되지만 전 String을 이용하여서 F1 기능의 함수 및 콜 하는 함수를 찾아보겠습니다.

NTHelp.chm을 클릭하시면 위의 그림과 같은 문자열이 저장되어 있는 공간이 나옵니다.

해당 문자열이 어디에서 콜이 되었는지 확인하기 위해서는 해당 문자열을 클릭하고,

View -> open subviews -> Cross references를 클릭하면 작아서 잘 안 보이시겠지만

sub_1003D76:loc_1003DC8 이런 식으로 되어있는데 앞에 1003D76이 실제로 콜 하는 주소이고 loc는 IDA 상에서의 주소입니다.

따라서 F1 기능의 주소는 1003D76입니다.

2. 지뢰를 보여주는 함수의 주소를 찾습니다.

IDA와 이뮤니티 디버거를 왔다 갔다 하면서 start 부분을 ctrl +G를 해서 하나씩 실행시키다 보면

1002F80 함수에서 지뢰를 밟으면 멈추게 되는데 그 함수가 지뢰를 보여주는 함수입니다.

sub_1002F80을 클릭하시면 위와 같은 사진이 나오게 되는데

그 부분을 클릭하시면 eax를 함수의 인자로 넣고 지뢰를 보여주는 함수를 호출하고 있습니다.

이뮤니티 디버거를 통해서 10012F80을 실행하면 eax에 0A가 들어가 있는 것을 확인할 수 있습니다.

3.F1 기능의 함수를 없애고 그 대신 지뢰를 보여주는 함수를 넣어보겠습니다.

F1 기능을 없애야 하므로 F1 함수 1003D76을 찾아가서

아까 찾은 함수 인자인 0A를 넣고, 함수를 실행시키고 밑에 부분(F1 기능)은 필요 없으므로

다른 곳으로 점프시켜버립니다.

그리고 조금 밑에 내려가면 RETN 8이라고 되어있는데 그 부분을 RETN으로 바꾸어 줍니다.

return 8 은 함수 호출 규약 중 _stdcall으로 8(인자 2개) 만큼 함수 안에서 스택을 처리한다는 뜻이다. 도움말 함수를 수행하지 않아 스택을 사용하지 않았으므로 정리하지 않도록 8을 지워준다.

아.. 그리고 4번은 앞으로 한 3~4가지 기능을 포스팅을 더하고 코드 인젝션 공부 후 블로그에 글 올리고,

공부한 것을 기초로 하여서 프로그램 제작을 할 것입니다. 감사합니다.

오타나 질문 같은게 있으면 댓글로 달아주시면 시간 날때 답변해 드리겠습니다.

반응형

댓글