안녕하세요~ 듀얼입니다.
이번글은 DMA( Dynamic Memory Allocation )에 관한 건데요.
DMA란? 간단히 생각해서 우리가 종종 GameHacking중에
돈수치가 저장되있는 주소를 찾았다고 치죠.
그런데 게임을 다시 시작하니 그 주소는 전혀 쓸모없는
쓰래기 값이 들어 있거나 아무값도 안들어 있는 그런 경우를
종종 격어 보셨을 겁니다. 그것에 대한 해결책이 바로 DMA
입니다. 강좌를 이해만 하신다면 한층나은 GameHacking기술을
가지게 되는 것이겠죠? 행운을 빕니다.
타겟(GTM)의 모습 :
밑 그림은 타겟 파일의 모습이다. "hack this bitch" <===
이것을 내 방식대로 해석하면 "해킹해봐 개새야" 이다.

============= P A R T 1
=============
이번 강좌에서는 Money 수치를 가지고 강좌를 진행해 보도록 하죠.
아마 지금 money 수치는 계속 줄어 들고 있을 겁니다. 수치의
움직임을 멈추기 위해 "Pause" 버튼을 눌러서 움직임을 일시중지
시켜 봅시다. 그런후 Tsearch를 키시고 밑의 그림처럼 GTM을
Attach 해줍니다.

위 처럼해서 GTM을 Attach 하는것에 성공 하였다면.
밑의 그림 처럼 현재 Pause 되있는 Money의 수치를 Search 해줍니다.

값은 반드시 1개 나옵니다. (2개가 나왔을 경우 더 작은 주소의 값이 진짜 입니다.)
위의 Search 도 성공하였다면 그다음은 밑의그림처럼 나온 주소를 더블 클릭하거나
주소를 한번 클릭하고 + 버튼을 클릭하여 Cheat List로 옮겨 봅시다.

Cheat List에 옮기는것도 성공 하였다면 그다음은 Tsearch의 주메뉴에서 "AutoHack"
의 자식메뉴인 "Enable debugger" 클릭하여 디버거를 활성화 시켜 줍니다.

그리고 또다른 "AutoHack"의 자식 메뉴인 "AutoHack widnow"를 클릭하여
오토핵 창 을 띄웁니다.

오토핵 창이 떳다면... 이제 초록색 화살표 그림을 눌릅니다.
그러면 밑과 같은 Set BPM 창이 뜹니다.

Address에 우리가 찾은 (Money 수치가 담겨 있는) 주소를 넣으시고
Set 버튼을 누릅니다. 그러면 Set이 됩니다. 그런후 GTM으로 돌아가서
다시 "Pause" 버튼을 눌러 다시 Monet 수치가 움직이게 해봅시다.
그러면 밑의 그림처럼 " 4011DB: sub [esi+0x4],eax "라는것이
AutoHack 윈도우에 보이는것을 볼수 있습니다.

위에 나온 것을 마우스로 한번 클릭한후 "Disassembler" 버튼을
클릭하시면 밑과 같은 화면을 볼수 있습니다.

4011db 와 그 주변 주소들의 OPcode 들을 Disassemble 하여 보여주는 것입니다.
우리는 예상할수 있습니다. [esi+0x4] 지점에 eax 값을 sub(뺴줌) 으로써 Money의
값이 줄어 듬으로 esi+0x4 안에 우리의 주소가 닮겨 있을 것이라는...
여기서 [esi+0x4] 가 의미하는것이 무엇인가 하면.. [ ] 란
[ ]주소 안에 있는 값이
가리키는... [포인트 하는] C에서의 * 와 같거나 or 비슷한 뜻이라고 할수 있습니다.
정리해서 말하면 esi+0x4 주소 안에는 Money수치가 닮겨 있는 주소가 들어 있는
것입니다. 그렇지만 esi+0x4라는 것은 고정 주소가 아니기 떄문에 저대로는 우리는
Trainer를 만들수 없습니다. 그럼으로 Code Injection을 통해서 esi+0x4의 값을
메모리 상의 지점으로 옮기게 하도록 해보죠. 장거리 점프의 길이는 5Bytes인데
딱 4011db 다음줄의 4011de mov eax,0x5 가 딱 5Bytes 군요. 이 줄을 점프로
대체 합시다. 빈공간은 400000 ~ 401000 까지는 빈공간 인데 우리는 400300 부터
쓰도록 하죠. 바꾸는 방법은 밑의 그림처럼 해주면 됩니다.

바꾸는것을 완료 하셨다면 이제 EasyWrite를 이용해서 400300에 우리의 코드를 Injection
해봅시다.
============= P A R
T 2 =============
EasyWrite를 키는 방법은 밑의 그림과 같습니다.

EasyWrite를 이용하여 400300 부터 우리의 코드를 삽입하여 줍시다.
저는 우선 밑의 그림과 같은 코드를 삽입하도록 하였습니다.

보시면 0x4011de 줄은 jmp 400300 명령어로 대체 하였으며
400300 다음의 첫번쨰 명령은 원래 0x4011de에 있던 mov [esi+0x4],eax
명령어를 해주었고 그다음 명령어는 이곳으로 점프를 해왔으니
다시 원래의 코드로 복귀하기 위해 기존의 코드인 0x4011e3으로 점프하게
하였습니다. 그다음 OK 버튼을 눌러 코드를 저장 시키고 밑의 그림처럼
□를 클릭하여 체크상태로 만듭니다. 그런후 타겟이 정상적으로 작동되나
테스트 해봅니다. (코드를 우회해도 정상적으로 작동되나...)

아마 재대로만 따라하셨다면 정상적으로 작동하시는것을 보실수 있을 겁니다.

이제 코드를 우회 할수 있도록 해놨으니 esi+0x4 의 값을 메모리에
저장 시키는 코드도 집어넣도록 합시다. esi+0x4의 코드를 옮기는
명령어로는 Lea 를 쓰도록 하겠습니다. Lea 명령어란 간단히 예를들면
lea eax,address
; eax 의 값을 adressd의 주소로 만든다.
그럼으로 우리는 우리의 공간에 밑과 같은 코드를 집어넣으면 됩니다.

위의 코드가 정상적으로 되는지 테스트 해보기 위해 OK 버튼을 눌르어 임시저장후
밑의 □를 클릭하여 체크 상태로 만들고 GTM의 "Pause" 버튼을 눌러 다시
Money가 움직이게 해봅시다.

우리는 Code Injection 을 통하여 0x400400 Money의 주소가 자동 저장되도록 해놓았습니다.
그럼으로 아마 0x400400엔 Money의 현재 주소값이 들어있겠죠? 한번 확인해 보죠.
밑의 그림처럼 하얀 백지 모양의 버튼을 클릭하여 "New cheat"를 띄운후 밑처럼 세팅하고
OK 를 눌러봅시다.

저는 밑과 같이 저장되어 있었습니다. 하지만 저건 10진수 값임으로
16진수로 변환 시켜줄 필요가 있습니다. 계산기나 뭐 간단한 툴을
이용하여 변환시키기 바랍니다. 뭐 어쨰든 10진수 "19727956" 을
16진수로 변환하면 "12D0654" 이 됩니다. 과연 "12D0654"에
현재 Money의 값이 들어 있을 까요? 한번 보죠.

어떄요? ^-^/ 됬죠? 이걸 기반으로 트레이너를 만들어 보죠.
============= P A R
T 3 =============
이번강좌에서는 GTS [Game Hacking Studio]로 트레이너를
만들도록 해보죠. 밑처럼 새 프로젝트를 만들면 됩니다.

그런후 타겟 파일을 밑 그림 처럼 패치해줄 대상파일을 지정해줍니다.

그런다음 밑그림처럼 버튼을 하나 추가 줍니다.

그리고 새로만든 버튼을 마우스 오른쪽 버튼으로 클릭하면
나오는 팝업메뉴에서 "속성"을 클릭하여 속성에 들어갑니다.
버튼속성에서 Funtion 부분으로 갑니다. 그러면 밑과 같은
부분이 뜨는데요. "삽입"를 선택하시기 바랍니다.

그런후 아까 우리가 EasyWrite에서 만든 코드를 주석을 다 삭제한후 전부 선택하고
Copy[복사] 한후 Code Injectior라는 글자 밑에 있는 박스에 붙여 넣습니다.

밑그림 처럼 복사해넣으시면 됩니다.

위처럼 해줌으로써 0x400400에 Money의 주소를 옮기게 하는 버튼의 코드는 완성입니다.
이번에는 Money의 값을 바꾸는 버튼을 하나 만들어 보도록 하죠.
이제 새로 버튼을 하나 더 만들어 주시고 이번에도 속성에 들어가서 Funtion 에서 "쓰기"
를 선택해 주시기 바랍니다. 그리고 다음과 같이 한줄의 명령어를 써넣었습니다.
Pointer 400400 0 add 3F 42 0F 00
위 코드가 뜻하는것은 Pointer란 GTS에서 해당 주소 안에 있는 값에 대해 동작을
하라는 명령어 입니다. 그럼으로 400400안에 있는 주소[Money의 주소]에
3F 42 0F 00 (=9999999)를 써넣을것입니다.

그리고 "Function" 옆에 있는 "Freeze"를 클릭합니다. 그리고 밑의 그림과 같이 세팅하여 줍니다.

이제 모든 세팅을 끝냈으니 정상적으로 트레이너가 작동되는지 테스트 해보죠.
트레이너를 빌드하기 위해 밑의 그림처럼 해주시기 바랍니다.

트레이너 빌드가 완료되고 트레이너가 켜진다면 "DMA활성버튼"을 먼저 클릭하시고
"Money조작버튼"을 클릭 하시기 바랍니다. 그리고 GTM의 Money값이 바뀌는지
확인해 보죠 :p

바뀌죠? :p Yeah 완료 입니다. 이런 방식으로 여러분은
주소가 바뀌는 것에 대해서도 패치를 만들수 있을 것입니다.
더 자세한것을 원하시면 외국 강좌를 참고 하시거나
밑의 동영상 강좌를 참고 하시기 바랍니다.
Posted by Dual
ghme1lvl1.zip


