
최종 실습으로 먼저 가상환경으로 윈도우7을 설치 했다.

예전에 우리가 봤던 지뢰찾기 게임을 볼 수 있다.
책에서는 먼저 작동 방식을 가정하고 시작한다.
예를들자면 시간을 조절하는 함수 같은경우에 setTimer를 사용했다는 가정이다.

ollydbg로 지뢰찾기를 실행하고

함수 목록을 보면 setTimer가 있다. 이 주소 부터 시작하면

setTimer에 들어가는 매개변수부터 본다면 Timer에 uElapse가 시간의 간격을 조절한다.
1000일때 1초를 의미한다.

디버거에서도 보면 그에 해당하는 인자가 들어간다.

그래서 이 1000을 5000으로 바꿔준다면

사진으로는 안느껴지겠지만 1초가 5초에한번 씩 흐른다.

다음으로 해볼 내용은 지뢰가 있는 위치를 만드는 맵핵을 만드는것이다.
이것을 만들기 위해서는 게임을 재실행 물어보는 창에서 이를 GetKetState라는 함수를 호출한다는 가정하에
이 함수를 추적한다.
하지만 GetKeyState가 사용되는 양이 많기 때문에 전부 breakPoint를 걸어놓고 하나하나 실행해가며 의심가는 부분을 제외하고는 모두 제거 할 것이다.

그러다 보면 클릭했을때 지뢰가 잡히는 breakpoint가 생긴다.
이 이후로는 cmp와 jz,je 함수들을 기준으로 하나하나 실행해 가면서
zeroflag를 건드리며 이 상황에 어떤 것이 바뀌는지를 지켜보면서 실행해 나간다.
예를들면 zeroflag를 건드렸을때 클릭한 좌표가 깃발로 변하는 함수부분
최종적으로, 순서만 본다면
이렇게 접근하다 보면 클릭한 좌표의 x좌표 y좌표를 판단하는 함수가 존재하고
클릭한 좌표가 지뢰인지 아닌지 확인하는 부분까지 접근할 수 있다.
그 함수 부분을 기점으로 전에 사용했던 코드를 삽입하는 방식을 써서
x좌표 y좌표 전체를 훑어보는 어셈블리어 프로그래밍을 한다.
그렇게 해서 빈 메모리에 결과를 새겨넣고 이를 출력하거나 저장하는 프로그램을 만드는 것이다.
마지막 부분을 실습으로 실행해 봤는데 오류및 결과를 해결할 수 없어서 글로 정리해보았다.
좀더 공부해서 다시 시도해 봐야 겠다.
'정보보안 > 리버싱 입문' 카테고리의 다른 글
리버싱의 어려운 문제들 (0) | 2022.03.04 |
---|---|
리버싱, 좀 더 깊숙이 (0) | 2022.03.01 |
리버싱에 익숙해지기 (0) | 2022.02.25 |
리버싱시작하기(2) (0) | 2022.02.22 |
리버싱 시작하기(1) (0) | 2022.02.21 |