Unknown
Baca dan simak baik.
NB : Dilarang Keras Copas tanpa sumber
Post ini telah mendapat ijin dari DarkGhost Admin dari http://forum.cheatengine.org
NB : Dilarang Keras Copas tanpa sumber
Post ini telah mendapat ijin dari DarkGhost Admin dari http://forum.cheatengine.org
Translate by Deva Maulana
Jika ada salah kata dalam traslate saya mohon maaf.
//=======================================================================//
Batas Tread
//=======================================================================//
Credits :
- Wiccaan
- Microsoft (Untuk memutar lib.)
- Azaril (Untuk ide keseluruhan dari DX8 windower lamanya untuk FFXI.)
DirectX 9.0
Hooking melalui Injection via C ++
Ok, jadi makhluk ini diminta, saya memutuskan untuk menulis ini up. Saya harap ini membantu seseorang dan jika tidak, maaf bergulir Mata Pertama dan untuk sebagian besar, tutorial ini secara ketat untuk DirectX 9 dan saya jamin Anda tidak akan bekerja untuk versi lain tanpa editing besar di bungkusnya. Pada akhir ini saya juga akan mencakup beberapa petunjuk tentang cara untuk mengubah ini disuntikkan hook ke dalam pembungkus ke titik di mana Anda hanya dapat mengkompilasi sebagai d3d9.dll dan drop ke direktori permainan Anda dan menjalankannya melalui metode itu juga.
(Saya sarankan "wrapper" metode karena kebanyakan menipu deteksi tidak menemukannya sebagai hack karena beberapa mesin membutuhkan yang d3d9.dll dalam folder untuk bekerja.)
Saya menulis tutorial ini untuk digunakan dengan C ++ namun Anda dapat menerjemahkan ke bahasa apa yang pernah Anda ingin program di seperti itu cukup mendasar dan tidak terlalu besar. Wrapper adalah di mana pekerjaan yang paling datang untuk bermain sehingga Anda akan perlu untuk melakukan itu sendiri. Maaf, saya tidak tahu bahasa lain di luar C ++, MASM, dan VB6 sehingga Anda berada pada Anda sendiri ketika menerjemahkan.
Ok, jadi makhluk ini diminta, saya memutuskan untuk menulis ini up. Saya harap ini membantu seseorang dan jika tidak, maaf bergulir Mata Pertama dan untuk sebagian besar, tutorial ini secara ketat untuk DirectX 9 dan saya jamin Anda tidak akan bekerja untuk versi lain tanpa editing besar di bungkusnya. Pada akhir ini saya juga akan mencakup beberapa petunjuk tentang cara untuk mengubah ini disuntikkan hook ke dalam pembungkus ke titik di mana Anda hanya dapat mengkompilasi sebagai d3d9.dll dan drop ke direktori permainan Anda dan menjalankannya melalui metode itu juga.
(Saya sarankan "wrapper" metode karena kebanyakan menipu deteksi tidak menemukannya sebagai hack karena beberapa mesin membutuhkan yang d3d9.dll dalam folder untuk bekerja.)
Saya menulis tutorial ini untuk digunakan dengan C ++ namun Anda dapat menerjemahkan ke bahasa apa yang pernah Anda ingin program di seperti itu cukup mendasar dan tidak terlalu besar. Wrapper adalah di mana pekerjaan yang paling datang untuk bermain sehingga Anda akan perlu untuk melakukan itu sendiri. Maaf, saya tidak tahu bahasa lain di luar C ++, MASM, dan VB6 sehingga Anda berada pada Anda sendiri ketika menerjemahkan.
Bagian 1.
Pendahuluan dan seperti
Sebelum kita mulai, biarkan aku pergi lebih dari apa yang dilakukan dan bagaimana cara kerjanya. Pertama, metode tutorial utama ini adalah melalui suntikan. Apa yang dilakukan adalah membuat thread terpencil dalam proses sebagai yang memulai dan menyuntikkan mata kail dan panggilan yang DllMain (atau fungsi utama DLL) dan kait fungsi Direct3D9Create. Dari sana, saat pertandingan, atau aplikasi DX Anda menggunakan panggilan Direct3D9Create, ia akan memanggil fungsi doyan Anda, bukan yang asli. Ketika itu terjadi, alih-alih menggunakan fungsi standar DirectX, ia akan menggunakan wrapper "proxy" fungsi yang dimodifikasi untuk kebutuhan Anda dan semacamnya. Hal ini memungkinkan Anda untuk menambahkan ke permainan, atau aplikasi, seperti gambar rangka, primitif berwarna, dll Hal-hal seperti yang Anda lihat dalam hacks dan sebagainya.
Seiring dengan itu, membuka jendela untuk setiap fitur tambahan lainnya (s) Anda bisa datang dengan sendiri. Batas-batas kecil, hanya apa yang Anda mampu lakukan dan semacamnya.
Tutorial ini akan menjelaskan bagaimana melakukan dasar-dasar, membuat kail, menunjukkan contoh wrapper, dan menjelaskan hal-hal kecil bersama dengan hook. Aku akan mencakup contoh lengkap juga bahwa saya akan menemukan beberapa program bebas acak menampilkan cara kerjanya dan seperti dalam juga. Saya akan menambahkan modus gambar rangka ke tombol toggle untuk menunjukkan cara untuk menambahkan beberapa kode Anda sendiri ke hook juga.
Sebelum kita mulai, biarkan aku pergi lebih dari apa yang dilakukan dan bagaimana cara kerjanya. Pertama, metode tutorial utama ini adalah melalui suntikan. Apa yang dilakukan adalah membuat thread terpencil dalam proses sebagai yang memulai dan menyuntikkan mata kail dan panggilan yang DllMain (atau fungsi utama DLL) dan kait fungsi Direct3D9Create. Dari sana, saat pertandingan, atau aplikasi DX Anda menggunakan panggilan Direct3D9Create, ia akan memanggil fungsi doyan Anda, bukan yang asli. Ketika itu terjadi, alih-alih menggunakan fungsi standar DirectX, ia akan menggunakan wrapper "proxy" fungsi yang dimodifikasi untuk kebutuhan Anda dan semacamnya. Hal ini memungkinkan Anda untuk menambahkan ke permainan, atau aplikasi, seperti gambar rangka, primitif berwarna, dll Hal-hal seperti yang Anda lihat dalam hacks dan sebagainya.
Seiring dengan itu, membuka jendela untuk setiap fitur tambahan lainnya (s) Anda bisa datang dengan sendiri. Batas-batas kecil, hanya apa yang Anda mampu lakukan dan semacamnya.
Tutorial ini akan menjelaskan bagaimana melakukan dasar-dasar, membuat kail, menunjukkan contoh wrapper, dan menjelaskan hal-hal kecil bersama dengan hook. Aku akan mencakup contoh lengkap juga bahwa saya akan menemukan beberapa program bebas acak menampilkan cara kerjanya dan seperti dalam juga. Saya akan menambahkan modus gambar rangka ke tombol toggle untuk menunjukkan cara untuk menambahkan beberapa kode Anda sendiri ke hook juga.
Bagian 2. Peralatan yang Dibutuhkan
Ini adalah daftar kecil dari hal-hal yang Anda akan perlu untuk dapat menggunakan tutorial ini.
Ini adalah daftar kecil dari hal-hal yang Anda akan perlu untuk dapat menggunakan tutorial ini.
Microsoft Visual Studio 2005
Anda tidak perlu versi lengkap untuk membuat hal-hal, Anda dapat menggunakan edisi mengungkapkan sejauh yang saya tahu untuk mengkompilasi hal selama mereka adalah non-komersial (dari apa yang saya diberitahu). Jika tidak, cari versi lengkap di situs warez atau bersikap baik dan membelinya Wink
Download: http://msdn2.microsoft.com/en-us/express/aa975050.aspx
Anda tidak perlu versi lengkap untuk membuat hal-hal, Anda dapat menggunakan edisi mengungkapkan sejauh yang saya tahu untuk mengkompilasi hal selama mereka adalah non-komersial (dari apa yang saya diberitahu). Jika tidak, cari versi lengkap di situs warez atau bersikap baik dan membelinya Wink
Download: http://msdn2.microsoft.com/en-us/express/aa975050.aspx
Microsoft Detours Library 1.5
Karena beberapa alasan yang tidak diketahui, pembuat perpustakaan Detours telah menghapus fungsi yang digunakan dalam tutorial ini dari versi baru. Jadi, Anda akan perlu untuk men-download versi dikompilasi
Karena beberapa alasan yang tidak diketahui, pembuat perpustakaan Detours telah menghapus fungsi yang digunakan dalam tutorial ini dari versi baru. Jadi, Anda akan perlu untuk men-download versi dikompilasi
Microsoft DirectX 9.0c SDK
Dan lagi, lagi download gratis dari Microsoft untuk pengembang. (Bukankah mereka begitu baik untuk programmer? ^ _ ^)
Download: http://msdn2.microsoft.com/en-us/xna/aa937788.aspx
Catatan: Anda harus memiliki versi nyata Windows untuk di-download ini jadi jika Anda tidak, hanya google sekitar untuk itu. Saya tidak berpikir hal-hal versi. Saya menggunakan update Oktober 2006 untuk sebagian besar proyek-proyek lama saya, tetapi telah menginstal versi Juni 2007 dan barang-barang saya masih mengkompilasi baik sehingga baik harus ok.
Dan lagi, lagi download gratis dari Microsoft untuk pengembang. (Bukankah mereka begitu baik untuk programmer? ^ _ ^)
Download: http://msdn2.microsoft.com/en-us/xna/aa937788.aspx
Catatan: Anda harus memiliki versi nyata Windows untuk di-download ini jadi jika Anda tidak, hanya google sekitar untuk itu. Saya tidak berpikir hal-hal versi. Saya menggunakan update Oktober 2006 untuk sebagian besar proyek-proyek lama saya, tetapi telah menginstal versi Juni 2007 dan barang-barang saya masih mengkompilasi baik sehingga baik harus ok.
Alat
Sebuah otak, kesabaran, bersedia untuk membaca dan belajar, kopi.
Sebuah otak, kesabaran, bersedia untuk membaca dan belajar, kopi.
Bagian 3. Memasang Alat
Pertama, semua alat-alat yang di installer, jadi cukup menginstal mereka untuk lokasi mereka dihormati. TAPI !! Saya sarankan Anda menginstal Visual Studio pertama, karena beberapa alat lain mungkin menginstal variabel dan jalan bagi Anda untuk dengan mudah memasukkan sesuatu ke dalam proyek Anda tanpa banyak pekerjaan omong kosong dan semacamnya. Jadi, menginstal VS2005 pertama, kemudian yang lain.
VS2005 menginstal default C: \ Program Files \ Microsoft Visual Studio 8
DX SDK menginstal default C: \ Program Files \ Microsoft DirectX SDK (m / y)
Menambahkan Jalur Untuk VS2005
Selanjutnya kita perlu menambahkan path ke file tambahan yang digunakan dalam jalan memutar dan folder DirectX SDK. Hal ini agar Anda tidak perlu memiliki pantat yang panjang termasuk garis dalam proyek Anda, tetapi compiler akan melihat ke dalam folder dikatakan untuk berkas yang disertakan dalam proyek pertama. (Tapi berhati-hatilah, ini dapat menyebabkan konflik jika Anda menggunakan lebih dari 1 versi sesuatu yang memiliki nama file yang sama!)
Buka Visual Studio dan goto Tools -> Options kemudian klik + sebelah Direktori VC ++. Di sebelah kanan, klik drop down box di bawah "Tampilkan Direktori Untuk" dan pilih "Sertakan file '. Selanjutnya klik icon folder dan kemudian tombol yang muncul di kotak daftar yang mengatakan '. . . 'dan arahkan ke folder:
Pertama, semua alat-alat yang di installer, jadi cukup menginstal mereka untuk lokasi mereka dihormati. TAPI !! Saya sarankan Anda menginstal Visual Studio pertama, karena beberapa alat lain mungkin menginstal variabel dan jalan bagi Anda untuk dengan mudah memasukkan sesuatu ke dalam proyek Anda tanpa banyak pekerjaan omong kosong dan semacamnya. Jadi, menginstal VS2005 pertama, kemudian yang lain.
VS2005 menginstal default C: \ Program Files \ Microsoft Visual Studio 8
DX SDK menginstal default C: \ Program Files \ Microsoft DirectX SDK (m / y)
Menambahkan Jalur Untuk VS2005
Selanjutnya kita perlu menambahkan path ke file tambahan yang digunakan dalam jalan memutar dan folder DirectX SDK. Hal ini agar Anda tidak perlu memiliki pantat yang panjang termasuk garis dalam proyek Anda, tetapi compiler akan melihat ke dalam folder dikatakan untuk berkas yang disertakan dalam proyek pertama. (Tapi berhati-hatilah, ini dapat menyebabkan konflik jika Anda menggunakan lebih dari 1 versi sesuatu yang memiliki nama file yang sama!)
Buka Visual Studio dan goto Tools -> Options kemudian klik + sebelah Direktori VC ++. Di sebelah kanan, klik drop down box di bawah "Tampilkan Direktori Untuk" dan pilih "Sertakan file '. Selanjutnya klik icon folder dan kemudian tombol yang muncul di kotak daftar yang mengatakan '. . . 'dan arahkan ke folder:
C: \ Program Files \ Microsoft DirectX SDK (Oktober 2006) \ Sertakan
(mengubah jalan untuk salah satu dari ini jika mereka berbeda)
Selanjutnya, pilih 'file Library' dari kanan drop-down daftar dan kemudian klik icon folder lagi,
maka '. . .'tombol dan arahkan ke:
C: \ Program Files \ Microsoft DirectX SDK (Oktober 2006) \ Lib \ x86
(mengubah jalan jika mereka berbeda)
Instalasi Detours
Ini merupakan langkah diperbarui sekarang karena masalah dengan jalan memutar 2.1. Untuk menginstal Detours, Anda bisa memasukkan detours.h dan file lib di mana pun Anda inginkan di sistem anda, pastikan untuk menambahkan path mereka ke VS2005 IDE seperti yang Anda lakukan untuk DX SDK di atas. Atau, seperti yang saya akan gunakan dalam tutorial ini, membuat folder baru dalam direktori proyek Anda dengan file lain sumber (H dan Cpp file) dan beri nama 'Pengalihan' dan menempatkan file di sana. Ini mungkin akan menjadi cara termudah untuk menggunakannya.
Ini merupakan langkah diperbarui sekarang karena masalah dengan jalan memutar 2.1. Untuk menginstal Detours, Anda bisa memasukkan detours.h dan file lib di mana pun Anda inginkan di sistem anda, pastikan untuk menambahkan path mereka ke VS2005 IDE seperti yang Anda lakukan untuk DX SDK di atas. Atau, seperti yang saya akan gunakan dalam tutorial ini, membuat folder baru dalam direktori proyek Anda dengan file lain sumber (H dan Cpp file) dan beri nama 'Pengalihan' dan menempatkan file di sana. Ini mungkin akan menjadi cara termudah untuk menggunakannya.
Sekarang IDE Anda harus setup untuk menggunakan file DX SDK dengan mudah.
Jika Anda mengalami masalah di kemudian hari, hanya posting kesalahan dan saya akan mencoba untuk membantu Anda untuk yang terbaik dari kemampuan saya.
Aku tidak Yesus jadi jangan berharap saya untuk memperbaiki setiap kesalahan.
- = Saya sarankan mengambil istirahat di sini, menggunakan kamar kecil, minum kopi, menendang anjing .. gunna nya menjadi banyak membaca sekarang. = -
Jika Anda mengalami masalah di kemudian hari, hanya posting kesalahan dan saya akan mencoba untuk membantu Anda untuk yang terbaik dari kemampuan saya.
Aku tidak Yesus jadi jangan berharap saya untuk memperbaiki setiap kesalahan.
- = Saya sarankan mengambil istirahat di sini, menggunakan kamar kecil, minum kopi, menendang anjing .. gunna nya menjadi banyak membaca sekarang. = -
Bagian 4. Membuat Hook
Untuk memulai hook, membuat proyek DLL baru di VS2005. Untuk melakukan itu, buka VS2005. Kemudian goto File -> New -> Project. Pilih VC ++ dari kotak kiri kemudian di sebelah kanan pilih Win32 Project. Pilih nama untuk proyek Anda dan lokasi untuk itu.
Untuk memulai hook, membuat proyek DLL baru di VS2005. Untuk melakukan itu, buka VS2005. Kemudian goto File -> New -> Project. Pilih VC ++ dari kotak kiri kemudian di sebelah kanan pilih Win32 Project. Pilih nama untuk proyek Anda dan lokasi untuk itu.
Untuk tutorial ini saya akan menelepon dxhook tambang dan lokasi akan berada di desktop saya. Saya juga menyarankan meninggalkan Buat directory untuk solusi diperiksa.
Sekarang Win32 Application Wisaya harus datang. Klik pada Pengaturan Aplikasi di sebelah kiri, pilih DLL bawah Application Type, dan pilih Project Kosong bawah Opsi tambahan. Kemudian klik finish. Anda akan dibuang ke IDE dari VS2005 dalam larutan kosong baru.
Meskipun kami akan memiliki header dikompilasi dimatikan, kita akan membuat stdafx.cpp / H file pula karena mereka baik untuk memiliki untuk mencakup bahwa beberapa file akan menggunakan. Jadi mari kita pergi ke depan dan menambahkan file utama yang akan kita gunakan dalam hal ini.
Untuk menambahkan file baru ke proyek, klik kanan di explorer solusi dan pilih Tambah kemudian pilih New Item dari sub menu. Anda akan ingin menambahkan 2 file cpp dan 1 file header. jadi:
Add> New Item-> header file, nama itu stdafx.h
Add> New Item-> C ++ File, beri nama stdafx.cpp
Add> New Item-> C ++ File, beri nama main.cpp
Jadi, Anda harus memiliki 3 file dalam larutan Anda sekarang.
stdafx.cpp
Mari mengurus file lebih mudah pertama. Terbuka stdafx.cpp dengan mengklik ganda dalam larutan explorer untuk membukanya di jendela kode di pusat IDE. File ini membutuhkan 1 baris kode.
Mari mengurus file lebih mudah pertama. Terbuka stdafx.cpp dengan mengklik ganda dalam larutan explorer untuk membukanya di jendela kode di pusat IDE. File ini membutuhkan 1 baris kode.
Code:
|
#include "stdafx.h"
|
Simpan dan tutup file yang sekarang. Anda tidak perlu
mengedit file itu lagi.
stdafx.h
Berikutnya, mari kita mengurus kebutuhan dasar dalam file stdafx.h yang akan digunakan untuk memulai proyek ini. Klik jadi dua kali pada stdafx.h dalam larutan explorer dan memungkinkan menambahkan beberapa kode.
Hal pertama yang kita ingin lakukan adalah untuk menyingkirkan beberapa peringatan agak mengganggu. Jika Anda seperti saya, saya memiliki set compiler untuk mengobati peringatan sebagai kesalahan. Saya suka hal yang harus sesempurna mungkin.
Baris pertama dari kode kita akan ingin menambah stdafx.h adalah:
stdafx.h
Berikutnya, mari kita mengurus kebutuhan dasar dalam file stdafx.h yang akan digunakan untuk memulai proyek ini. Klik jadi dua kali pada stdafx.h dalam larutan explorer dan memungkinkan menambahkan beberapa kode.
Hal pertama yang kita ingin lakukan adalah untuk menyingkirkan beberapa peringatan agak mengganggu. Jika Anda seperti saya, saya memiliki set compiler untuk mengobati peringatan sebagai kesalahan. Saya suka hal yang harus sesempurna mungkin.
Baris pertama dari kode kita akan ingin menambah stdafx.h adalah:
Code:
|
#pragma once
|
Ini memberitahu
compiler hanya menambahkan file ini sekali untuk proyek bukannya menambahkan
setiap kali yang bertanya. Ini akan ditambahkan pertama jadi tidak ada masalah
harus muncul saat menggunakan pengaturan ini.
Selanjutnya, kita akan ingin memberitahu compiler apa versi DXinput digunakan untuk SDK serta versi windows untuk menghentikan omong kosong menjengkelkan yang terjadi ketika itu bukan auto-terdeteksi dalam compiler. Untuk melakukan add ini:
Selanjutnya, kita akan ingin memberitahu compiler apa versi DXinput digunakan untuk SDK serta versi windows untuk menghentikan omong kosong menjengkelkan yang terjadi ketika itu bukan auto-terdeteksi dalam compiler. Untuk melakukan add ini:
Code:
|
#define DIRECTINPUT_VERSION 0x0900
#define _WIN32_WINNT 0x0500 |
Sekarang kita tidak perlu lagi mendefinisikan dalam file ini, kami siap untuk menambahkan kami meliputi. Yang pertama mencakup adalah
jendela standar include
file yang digunakan untuk
sebagian besar program yang membutuhkan header tertentu yang berasal
dalam file windows.h. Seiring dengan itu, kita
akan membutuhkan tchar.h untuk
beberapa macro dan untuk menangani string unicode.
(Ya, saya melakukan pekerjaan saya
di unicode.)
Jadi kode yang kami ingin menambahkan adalah:
Jadi kode yang kami ingin menambahkan adalah:
Code:
|
#include <windows.h>
#include <tchar.h> |
Sekarang, Anda
bisa menambahkan jalan memutar mencakup dan seperti dalam sini, tapi karena
tidak digunakan di tempat lain tapi di 1 file, saya sarankan hanya menambahkannya
ke file selanjutnya. Tidak ada gunanya memberikan segalanya akses ke sana
ketika hanya 1 hal membutuhkannya.
Simpan dan tutup file stdafx.cpp.
main.cpp
Selanjutnya, buka file main.cpp. Di sinilah hooking terjadi. Kami akan menggunakan Pengalihan fungsi hooking kami karena gratis dan mudah digunakan. Aku tidak akan menjamin bahwa hal itu akan terdeteksi untuk permainan Anda jadi hati-hati ketika menguji.
Baris pertama dari kode yang kami ingin Anda tambahkan ke file ini adalah untuk menyertakan file stdafx.h karena memiliki termasuk yang akan dibutuhkan untuk file ini. Jadi menambahkan:
Simpan dan tutup file stdafx.cpp.
main.cpp
Selanjutnya, buka file main.cpp. Di sinilah hooking terjadi. Kami akan menggunakan Pengalihan fungsi hooking kami karena gratis dan mudah digunakan. Aku tidak akan menjamin bahwa hal itu akan terdeteksi untuk permainan Anda jadi hati-hati ketika menguji.
Baris pertama dari kode yang kami ingin Anda tambahkan ke file ini adalah untuk menyertakan file stdafx.h karena memiliki termasuk yang akan dibutuhkan untuk file ini. Jadi menambahkan:
Code:
|
#include "stdafx.h"
|
Selanjutnya kita perlu menambahkan kami meliputi dan file library untuk
Detours. Saya sendiri lebih suka menggunakan thats pragma
param digunakan dengan Visual Studio ketimbang
menambahkan file lib
untuk proyek properti, tetapi jika Anda tidak menggunakan VS2005 hanya menghapus
baris pragma saya akan menunjukkan dan menambahkan file lib ke jendela properti
dalam kompiler untuk proyek untuk menyertakan ketika link dan mengkompilasi.
Code:
|
#pragma comment(lib,
"Detours/detours.lib")
#include "Detours/detours.h" |
Berikutnya Saya menyarankan untuk menambahkan variabel
ini ke atas bawah
termasuk untuk jalan
memutar untuk melacak pegangan
modul memetikan Anda
membutuhkannya di tempat lain dalam
kode. Saya tidak berpikir siapa
pun harus pernah benar-benar
membutuhkannya untuk hal mereka
sendiri dan tidak bisa mendapatkan itu metode
lain tapi ini hanya membungkus.
Jadi kita tambahkan:
Jadi kita tambahkan:
Code:
|
HANDLE HookHandle = NULL;
|
Sekarang kita
akan ingin menambahkan trampolin untuk fungsi doyan kami, Direct3DCreate9. Jadi
pertama, Anda mungkin mengatakan wtf adalah trampolin dalam coding? Its just
seperti gua kode. Ketika Anda menghubungkan sesuatu menggunakan Detours, kode
fungsi sasaran ditempatkan di trampolin dan alamat trampolin ditempatkan ke
dalam target pointer. Seperti yang dikatakan dalam membaca saya, kita dapat
mengganti fungsi target seluruhnya atau hanya menambahkan ke atasnya.
Kode untuk trampolin terlihat seperti ini:
Kode untuk trampolin terlihat seperti ini:
Code:
|
DETOUR_TRAMPOLINE(IDirect3D9*
WINAPI Real_Direct3DCreate9(UINT SDKVersion), Direct3DCreate9);
|
Tapi karena
kita membutuhkan fungsi ini tetap dapat digunakan setelah dikompilasi kita
perlu memberitahu compiler tidak "mangle" pengenal. Untuk melakukan
itu kita perlu merangkul kode kita dengan extern "C" kode. Jadi kode
seluruh blok kami untuk trampolin akan:
Code:
|
#ifdef __cplusplus
extern "C" { #endif DETOUR_TRAMPOLINE(IDirect3D9* WINAPI Real_Direct3DCreate9(UINT SDKVersion), Direct3DCreate9); #ifdef __cplusplus } #endif |
Langkah selanjutnya setelah membuat trampolin akan membuat fungsi
baru untuk Direct3DCreate9.
Apa yang kita ingin fungsi untuk melakukan bukan menciptakan contoh
normal Direct3D adalah
untuk menciptakan sebuah contoh baru dari wrapper kami. (Kami
tidak menulis bungkusnya belum tapi thats berikutnya.)
Jadi apa yang akan kita perlu lakukan adalah memiliki fungsi berpikir itu membuat
contoh normal Direct3D melainkan memilikinya membuat
contoh baru dari wrapper kami.
Code:
|
IDirect3D9* WINAPI
Mine_Direct3DCreate9(UINT SDKVersion)
{ IDirect3D9* Direct3D = Real_Direct3DCreate9( SDKVersion ); IDirect3D9* Mine_Direct3D = new Direct3D9Wrapper( Direct3D ); return Mine_Direct3D; } |
Apa kode ini
dilakukan adalah membuat turunan normal Direct3D karena kami hanya hanya ingin
membungkusnya dan tidak recode segalanya. Ini akan melewati pegangan antarmuka
Direct3D baru dibuat untuk wrapper kami yang kemudian akan "proxy"
fungsi yang menggunakan Direct3D.
Sekarang ini bagian selanjutnya adalah opsional, tetapi saya sarankan melakukannya untuk menjaga fungsi DllMain bagus, bersih, dan mudah dibaca. Aku diciptakan untuk fungsi-fungsi yang dipanggil dari DllMain yaitu: HookAPI dan UnhookAPI. Keduanya batal fungsi sederhana karena mereka kembali apa-apa. Untuk HookAPI :
Sekarang ini bagian selanjutnya adalah opsional, tetapi saya sarankan melakukannya untuk menjaga fungsi DllMain bagus, bersih, dan mudah dibaca. Aku diciptakan untuk fungsi-fungsi yang dipanggil dari DllMain yaitu: HookAPI dan UnhookAPI. Keduanya batal fungsi sederhana karena mereka kembali apa-apa. Untuk HookAPI :
Code:
|
void HookAPI()
{ DetourFunctionWithTrampoline( (PBYTE)Real_Direct3DCreate9, (PBYTE)Mine_Direct3DCreate9 ); } |
Dan untuk UnhookAPI:
Code:
|
void UnhookAPI()
{ DetourRemove( (PBYTE)Real_Direct3DCreate9, (PBYTE)Mine_Direct3DCreate9 ); } |
Sekarang untuk
bagian terakhir dari main.cpp kita, kita perlu fungsi DllMain. Bagi mereka yang
baru untuk C ++, setiap DLL memiliki titik masuk yang adalah apa yang pertama
kali disebut ketika modul tersebut dimuat. Entry point ini disebut fungsi
DllMain. (Beberapa compiler akan membiarkan Anda mengubah nama itu tapi saya
menggunakan standar.) Di dalam entri DllMain kami kami ingin modul, ketika
dimuat pertama, untuk memanggil HookAPI, dan ketika yang diturunkan, untuk
memanggil UnhookAPI. Ini sangat mendasar dan sangat mudah. Untuk melakukannya,
kita gunakan:
Code:
|
BOOL APIENTRY DllMain( HMODULE
hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{ if (ul_reason_for_call == DLL_PROCESS_ATTACH) { DisableThreadLibraryCalls(hModule); HookHandle = hModule; HookAPI(); } else if (ul_reason_for_call == DLL_PROCESS_DETACH) { UnhookAPI(); } return TRUE; } |
Perhatikan juga variabel HookHandle
yang digunakan di dalam sana? Kami menyimpan pegangan
modul yang akan digunakan
di kemudian hari memetikan Anda
membutuhkannya lain di mana. Seiring
dengan bahwa kita memiliki DisableThreadLibraryCalls
di sana juga. Hal
ini menghilangkan panggilan dari
DLL_THREAD_ATTACH dan DLL_THREAD_DETACH untuk meminimalkan kode kerja perpustakaan.
(Membantu menjaga ukuran bawah.)
Sekarang main.cpp kami dilakukan. Tapi! Kita perlu kembali dan mengedit stdafx.h. Aku meninggalkan kode ini untuk menunjukkan kepada Anda bagaimana untuk bekerja dengan mencakup yang Anda butuhkan dan menambahkannya bila diperlukan.
Jadi mari kita membuka kembali stdafx.h bawah yang terakhir termasuk yang harus tchar.h kita ingin menambahkan termasuk untuk DirectX 9. Ini akan digunakan dalam pembungkus kami serta dalam main.cpp seperti yang Anda lihat dari kode di atas. Jadi kami ingin menambahkan:
Sekarang main.cpp kami dilakukan. Tapi! Kita perlu kembali dan mengedit stdafx.h. Aku meninggalkan kode ini untuk menunjukkan kepada Anda bagaimana untuk bekerja dengan mencakup yang Anda butuhkan dan menambahkannya bila diperlukan.
Jadi mari kita membuka kembali stdafx.h bawah yang terakhir termasuk yang harus tchar.h kita ingin menambahkan termasuk untuk DirectX 9. Ini akan digunakan dalam pembungkus kami serta dalam main.cpp seperti yang Anda lihat dari kode di atas. Jadi kami ingin menambahkan:
Code:
|
#pragma
comment(lib,"d3d9.lib")
#include <d3d9.h> #include <d3dx9.h> |
Sekali lagi,
saya menggunakan # Pragma menyebabkan mudah dan cepat untuk menambah
perpustakaan untuk proyek tanpa harus meraba-raba dengan sifat proyek. Saya
tidak berpikir compiler apapun tapi Microsoft mendukung ini sehingga Anda
mungkin perlu melakukannya metode yang berbeda untuk menambahkan perpustakaan
untuk proyek.
Sekarang kita selesai dengan itu, simpan dan tutup file tersebut.
Sekarang kita selesai dengan itu, simpan dan tutup file tersebut.
Bagian 5. Wrapper
Sekali lagi saya mendorong istirahat di sini. Di sinilah theres akan banyak coding. Jadi mempersiapkan diri untuk itu Mad
Pertama dan terpenting kita akan perlu menambahkan beberapa file baru untuk proyek tersebut. Sama seperti yang kita lakukan sebelum Anda akan ingin membuat file baru sebagai berikut:
ID3D9Wrapper.h
ID3D9Wrapper.cpp
ID3D9Wrapper_Device.h
ID3D9Wrapper_Device.cpp
Saya sarankan membuat filter baru dalam larutan explorer juga (folder baru) untuk menampung file wrapper. Nama itu D3DWrapper atau sesuatu yang mudah untuk menjaga solusi terorganisir dan mudah untuk menemukan apa yang Anda butuhkan untuk mengedit nanti. Menambahkan banyak file dapat mulai membuat sulit untuk menemukan apa yang Anda cari.
Kita akan mulai dengan ID3D9Wrapper.h dan .cpp ini adalah pembungkus Direct3D utama, di mana sebagai file _Device adalah untuk membungkus fungsi perangkat. (Baca di DirectX jika Anda tidak yakin bagaimana segala sesuatu dengan kerjanya. Saya tidak bisa benar-benar menjelaskan semuanya penyebab yang akan menjadi seluruh tutorial lainnya.)
Sekali lagi saya mendorong istirahat di sini. Di sinilah theres akan banyak coding. Jadi mempersiapkan diri untuk itu Mad
Pertama dan terpenting kita akan perlu menambahkan beberapa file baru untuk proyek tersebut. Sama seperti yang kita lakukan sebelum Anda akan ingin membuat file baru sebagai berikut:
ID3D9Wrapper.h
ID3D9Wrapper.cpp
ID3D9Wrapper_Device.h
ID3D9Wrapper_Device.cpp
Saya sarankan membuat filter baru dalam larutan explorer juga (folder baru) untuk menampung file wrapper. Nama itu D3DWrapper atau sesuatu yang mudah untuk menjaga solusi terorganisir dan mudah untuk menemukan apa yang Anda butuhkan untuk mengedit nanti. Menambahkan banyak file dapat mulai membuat sulit untuk menemukan apa yang Anda cari.
Kita akan mulai dengan ID3D9Wrapper.h dan .cpp ini adalah pembungkus Direct3D utama, di mana sebagai file _Device adalah untuk membungkus fungsi perangkat. (Baca di DirectX jika Anda tidak yakin bagaimana segala sesuatu dengan kerjanya. Saya tidak bisa benar-benar menjelaskan semuanya penyebab yang akan menjadi seluruh tutorial lainnya.)
ID3D9Wrapper.h
Pertama kita ingin membuka notepad dan membuka file yang terletak di:
Pertama kita ingin membuka notepad dan membuka file yang terletak di:
C: \ Program Files \ Microsoft DirectX SDK (Oktober 2006) \ Sertakan \ d3d9.h
(Mungkin berbeda untuk versi SDK tetapi akan disebut d3d9.h)
Kami membuka ini karena file ini berisi fungsi-fungsi yang kita perlu menambah wrapper kami. Di sinilah kita mendapatkan informasi yang kita butuhkan untuk memahami apa setiap bagian dari DirectX melakukan fungsi bijaksana. Jadi gulir ke bawah dalam file tersebut dan Anda harus menemukan beberapa hal yang telah kita lakukan di atas. Seperti typedef baru kami, itu juga digunakan dalam file ini serta fungsi untuk membuat contoh Direct3D. Jauhkan bergulir sampai Anda menemukan:
Code:
|
DECLARE_INTERFACE_(IDirect3D9,
IUnknown)
|
Ini
adalah awal dari antarmuka utama untuk
Direct3D9. Kami ingin
menggunakan dasarnya thats
kode yang tepat infront dari kami.
Pertama, mari kita membuat kelas di dalam file kode kita. Jadi dalam ID3D9Wrapper.h
menambahkan:
Code:
|
#include "stdafx.h"
class Direct3D9Wrapper : public IDirect3D9 { public: Direct3D9Wrapper( LPDIRECT3D9 pDirect3D ); virual ~Direct3D9Wrapper(); IDirect3D9* Direct3D9; }; |
Ini adalah awal dari kelas kami. Kami menyertakan stdafx.h karena termasuk DirectX9 termasuk dan
seperti yang kita butuhkan dalam file ini dan lain-lain segera datang. Berikutnya, kembali jendela
notepad dari d3d9.h
memungkinkan copy dan paste beberapa baris.
Anda ingin menyalin:
Anda ingin menyalin:
Code:
|
/*** IUnknown methods
***/
STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; /*** IDirect3D9 methods ***/ STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE; STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD
Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter,D3DFORMAT
Format) PURE;
STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,D3DFORMAT Format,UINT
Mode,D3DDISPLAYMODE* pMode) PURE;
STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE*
pMode) PURE;
STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE
DevType,D3DFORMAT AdapterFormat,D3DFORMAT BackBufferFormat,BOOL
bWindowed)
PURE;
STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE
DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE
RType,D3DFORMAT CheckFormat) PURE;
STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE
DeviceType,D3DFORMAT SurfaceFormat,BOOL
Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels)
PURE;
STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE
DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT
RenderTargetFormat,D3DFORMAT
DepthStencilFormat) PURE;
STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter,D3DDEVTYP
DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat)
PURE;
STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE
DeviceType,D3DCAPS9* pCaps) PURE;
STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND
hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS*
pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) PURE;
|
Dan paste ke ID3D9Wrapper.h antara fungsi virtual dan variabel IDirect3D9
*. Jika Anda disisipkan
di tempat yang tepat hal terakhir
di bungkusnya harus:
Code:
|
IDirect3D9* Direct3D9;
}; |
Langkah
selanjutnya yang perlu kita lakukan adalah menghapus PURE mendefinisikan dari
masing-masing fungsi. Hapus saja kata PURE sehingga hal terakhir di setiap
baris adalah); Cara mudah untuk melakukan ini adalah menekan CTRL + H, di Cari
Apa menempatkan: "MURNI;" (tanpa tanda kutip tetapi dengan ruang di
depan) dan di Ganti Dengan put: ";" (tanpa tanda kutip) dan pastikan
untuk memilih Document sekarang di bawah Look In. Kemudian tekan mengganti
semua.
Semua selesai, simpan dan tutup file ini.
Semua selesai, simpan dan tutup file ini.
ID3D9Wrapper.cpp
Sekarang untuk file ini, saya tidak menulis semuanya yang akan di sini di forum karena yang satu ton kotoran kode. Anda harus menulis ulang semua fungsi yang kita hanya ditambahkan ke H file. Tapi jangan khawatir mudah sebenarnya. Anda hanya menciptakan fungsi untuk mengembalikan nilai normal seolah-olah itu adalah contoh nyata Direct3D.
Pertama, kita tambahkan kami meliputi dan menciptakan kelas konstruk / mendekonstruksi.
Jadi dalam ID3D9Wrapper.cpp termasuk Anda akan ingin adalah:
Sekarang untuk file ini, saya tidak menulis semuanya yang akan di sini di forum karena yang satu ton kotoran kode. Anda harus menulis ulang semua fungsi yang kita hanya ditambahkan ke H file. Tapi jangan khawatir mudah sebenarnya. Anda hanya menciptakan fungsi untuk mengembalikan nilai normal seolah-olah itu adalah contoh nyata Direct3D.
Pertama, kita tambahkan kami meliputi dan menciptakan kelas konstruk / mendekonstruksi.
Jadi dalam ID3D9Wrapper.cpp termasuk Anda akan ingin adalah:
Code:
|
#include
"ID3D9Wrapper.h"
|
Selanjutnya
kita harus membangun kami kelas. Kami ingin menyimpan pointer Direct3D untuk
digunakan di dalam kelas sehingga kita gunakan:
Code:
|
Direct3D9Wrapper::Direct3D9Wrapper(LPDIRECT3D9
pDirect3D)
{ Direct3D9 = pDirect3D; } |
Dan di bawah, mendekonstruksi kami tidak
perlu melakukan apa-apa jadi:
Code:
|
Direct3D9Wrapper::~Direct3D9Wrapper()
{}
|
Berikutnya adalah fungsi. Anda
bisa hanya berjalan turun melalui
setiap fungsi dan menambahkannya sendiri dengan mudah. Aku
akan menunjukkan contoh bagaimana
untuk melakukannya sendiri. (Anda juga dapat melihat pada contoh jika Anda
tidak mengerti.)
Fungsi pertama kami dalam daftar adalah:
Fungsi pertama kami dalam daftar adalah:
Code:
|
STDMETHOD(QueryInterface)(THIS_
REFIID riid, void** ppvObj);
|
Untuk memahami hal ini, STDMETHOD adalah makro yang menyatakan
apa-apa di dalam ()
akan mengembalikan HRESULT. Adapun
STDMETHOD_ ini adalah seperti versi diperpanjang makro
yang menyatakan nilai pertama dalam () adalah jenis kembali, dan yang kedua adalah nama fungsi.
Jadi melihat garis itu, kita tahu QueryInterface kembali HRESULT. Jadi fungsi kita di dalam file .cpp akan terlihat seperti:
Jadi melihat garis itu, kita tahu QueryInterface kembali HRESULT. Jadi fungsi kita di dalam file .cpp akan terlihat seperti:
Code:
|
HRESULT
Direct3D9Wrapper::QueryInterface(const IID &riid, void **ppvObj)
{ return Direct3D9->QueryInterface(riid, ppvObj); } |
Sederhana bukan?
Sebuah contoh dari fungsi menggunakan STDMETHOD_ akan:
Sebuah contoh dari fungsi menggunakan STDMETHOD_ akan:
Code:
|
STDMETHOD_(ULONG,AddRef)(THIS);
|
Jadi fungsi
kita akan:
Code:
|
ULONG Direct3D9Wrapper::AddRef()
{ return Direct3D9->AddRef(); } |
Setelah Anda mendapatkan ke CreateDevice, berhenti. Ini adalah fungsi yang kita butuhkan untuk mengubah dari kode aslinya. Hal
ini karena jika kita tidak itu
hanya akan membuat antarmuka Direct3DDevice9
biasa. Sebaliknya, kita ingin membuat
sebuah instance dari kelas Direct3DDevice9Wrapper
kami.
Jadi fungsi CreateDevice kami akan terlihat seperti:
Jadi fungsi CreateDevice kami akan terlihat seperti:
Code:
|
HRESULT
Direct3D9Wrapper::CreateDevice(UINT Adapter, D3DDEVTYPE DeviceType,HWND
hFocusWindow, DWORD BehaviorFlags,D3DPRESENT_PARAMETERS
*pPresentationParameters,IDirect3DDevice9 **ppReturnedDeviceInterface)
{ IDirect3DDevice9* pDirect3DDevice9; HRESULT hRes = Direct3D9->CreateDevice( Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, &pDirect3DDevice9 ); *ppReturnedDeviceInterface = new Direct3DDevice9Wrapper( pDirect3DDevice9, this, pPresentationParameters ); return hRes; } |
Seperti yang
Anda lihat, bukannya kembali perangkat biasa digunakan dalam CreateDevice, kami
mengatur perangkat pembungkus pointer kami dengan yang digunakan di
ppReturnedDeviceInterface. Hal ini dimaksudkan agar menggunakan wrapper kami
bukannya fungsi Direct3DDevice normal.
Dan Anda selesai dengan file ini sekarang. Jadi, Anda dapat menyimpan dan menutupnya.
ID3D9Wrapper_Device.h
Sama seperti file H lain untuk bungkusnya, Anda perlu menemukan fungsi-fungsi yang digunakan oleh antarmuka Direct3DDevice9 asli. Untuk melakukan itu, kembali ke notepad Anda yang memiliki d3d9.h membuka dan gulir ke bawah lebih jauh dari tempat terakhir kami menyalin kode dari. Tidak banyak lebih bawah dari tempat kami hanya berada di file tersebut, Anda harus menemukan:
Dan Anda selesai dengan file ini sekarang. Jadi, Anda dapat menyimpan dan menutupnya.
ID3D9Wrapper_Device.h
Sama seperti file H lain untuk bungkusnya, Anda perlu menemukan fungsi-fungsi yang digunakan oleh antarmuka Direct3DDevice9 asli. Untuk melakukan itu, kembali ke notepad Anda yang memiliki d3d9.h membuka dan gulir ke bawah lebih jauh dari tempat terakhir kami menyalin kode dari. Tidak banyak lebih bawah dari tempat kami hanya berada di file tersebut, Anda harus menemukan:
Code:
|
DECLARE_INTERFACE_(IDirect3DDevice9,
IUnknown)
|
Ini adalah awal antarmuka Direct3DDevice9 yang kita akan memerlukan kode dari. Seperti
yang saya katakan di atas, ini
adalah file yang berisi kode yang
paling dalam buku ini dan tutorial. Saya
tidak akan menunjukkan
kepada Anda semua untuk menyalin di
sini karena itu akan
menjadi jalan panjang, tapi, saya akan menunjukkan Anda di mana untuk memulai dan menghentikan:
Mulai menyalin di:
Mulai menyalin di:
Code:
|
/*** IUnknown
methods ***/
STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; STDMETHOD_(ULONG,AddRef)(THIS) PURE; STDMETHOD_(ULONG,Release)(THIS) PURE; |
Menyalin semua, termasuk apa yang baru saja saya menunjukkan di atas, ke, dan termasuk:
Code:
|
STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST
D3DTRIPATCH_INFO* pTriPatchInfo) PURE;
STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) PURE; |
Ya, itu banyak
hal, tapi, sangat mudah untuk menulis mereka. Mereka hanya pass-through fungsi
sehingga Anda tidak perlu menambahkan kode apapun di dalamnya lain kemudian
kembali kecuali Anda memodifikasi mereka untuk kebutuhan anda.
Ok itu dikatakan, copy dan paste kode ke ID3D9Wrapper_Device.h maka Anda akan perlu untuk merangkul ini, seperti header lain, di kelas. Pertama, kita perlu kami meliputi: ng:
Ok itu dikatakan, copy dan paste kode ke ID3D9Wrapper_Device.h maka Anda akan perlu untuk merangkul ini, seperti header lain, di kelas. Pertama, kita perlu kami meliputi: ng:
Code:
|
#pragma once
#include "stdafx.h" |
Selanjutnya, kelas mendefinisikan:
Code:
|
class Direct3DDevice9Wrapper :
public IDirect3DDevice9
{ public: |
Berikutnya, konstruk / mendekonstruksi,
yang akan ditambahkan setelah baris
yang mengatakan publik:
Code:
|
Direct3DDevice9Wrapper(IDirect3DDevice9* pDirect3DDevice9, IDirect3D9*
pDirect3D9, D3DPRESENT_PARAMETERS *pPresentationParameters);
virtual ~Direct3DDevice9Wrapper(); |
Kemudian pada akhir file, Anda akan memerlukan menutup kelas. Tapi
Anda juga akan membutuhkan 3
variabel yang akan digunakan di dalam kelas ini. Yang merupakan variabel yang memegang pointer ke
perangkat dan variabel untuk melacak langkah.
Code:
|
IDirect3DDevice9*
Direct3DDevice9;
IDirect3D9* Direct3D9; UINT m_Stride; }; |
Selanjutnya,
Anda perlu untuk menghapus garis PURE lagi. Sama seperti sebelumnya, tekan CTRL
+ H, di kotak atas masukkan 'PURE;' termasuk ruang tetapi tidak tanda kutip, dan
di bagian bawah, ';' tidak termasuk tanda kutip. Kemudian tekan Ganti Semua yang
harus mengganti seperti 115-120 hal. Sekarang Anda selesai dengan file ini untuk
saat ini, jadi simpan dan tutup
.
ID3D9Wrapper_Device.cpp
Ah, file ibu-beban. File ini berisi kode yang paling seperti yang saya katakan, tapi sekali lagi seperti yang saya katakan, itu hanya melewati fungsi pada awalnya sampai Anda menambahkan hal-hal sendiri. Jadi mari kita mulai ..
Pertama, kita perlu kami meliputi untuk file:
Ah, file ibu-beban. File ini berisi kode yang paling seperti yang saya katakan, tapi sekali lagi seperti yang saya katakan, itu hanya melewati fungsi pada awalnya sampai Anda menambahkan hal-hal sendiri. Jadi mari kita mulai ..
Pertama, kita perlu kami meliputi untuk file:
Code:
|
#include
"ID3D9Wrapper_Device.h"
|
Kita hanya
perlu ini karena H file sudah termasuk stdafx.h yang berisi lainnya termasuk yang
akan dibutuhkan. Selanjutnya, kita perlu membangun kami / mendekonstruksi kelas
ini:
Code:
|
Direct3DDevice9Wrapper::Direct3DDevice9Wrapper(IDirect3DDevice9
*pDirect3DDevice9, IDirect3D9 *pDirect3D9, D3DPRESENT_PARAMETERS
*pPresentationParameters)
{ Direct3DDevice9 = pDirect3DDevice9; Direct3D9 = pDirect3D9; } Direct3DDevice9Wrapper::~Direct3DDevice9Wrapper(){} |
Dalam membangun, kita meraih
pointer ke perangkat dan menyimpannya untuk digunakan dalam kelas ini, dan kemudian mengubah perangkat penunjuk
kembali dengan satu doyan kami sehingga sistem
ini menggunakan fungsi kami
dibungkus.
Selanjutnya, Anda perlu untuk pergi melalui daftar fungsi dan menulis mereka keluar seperti yang Anda lakukan dengan file lain. Ingat, STDMETHOD berarti jenis kembali adalah HRESULT dan STDMETHOD_ berarti jenis kembali adalah variabel pertama dalam kurung.
Lagi Heres beberapa contoh untuk membantu Anda dengan langkah ini:
Selanjutnya, Anda perlu untuk pergi melalui daftar fungsi dan menulis mereka keluar seperti yang Anda lakukan dengan file lain. Ingat, STDMETHOD berarti jenis kembali adalah HRESULT dan STDMETHOD_ berarti jenis kembali adalah variabel pertama dalam kurung.
Lagi Heres beberapa contoh untuk membantu Anda dengan langkah ini:
Code:
|
HRESULT
Direct3DDevice9Wrapper::QueryInterface(const IID &riid, void **ppvObj)
{ return Direct3DDevice9->QueryInterface( riid, ppvObj ); } ULONG Direct3DDevice9Wrapper::AddRef() { return Direct3DDevice9->AddRef(); } ULONG Direct3DDevice9Wrapper::Release() { return Direct3DDevice9->Release(); } |
Sekarang kita perlu
membuat beberapa suntingan ke kode yang baru saja dibuat. Bukan masalah besar, hanya
beberapa hal-hal kecil. Pertama, untuk logger Stride, Anda ingin mengubah SetStreamSource
untuk terlihat seperti ini:
Code:
|
HRESULT
Direct3DDevice9Wrapper::SetStreamSource(UINT StreamNumber,
IDirect3DVertexBuffer9 *pStreamData, UINT OffsetInBytes, UINT Stride)
{ if( StreamNumber == 0 ) m_Stride = Stride; return Direct3DDevice9->SetStreamSource(StreamNumber, pStreamData, OffsetInBytes, Stride); } |
Selanjutnya, Anda perlu untuk mengubah GetDirect3D, bukan membiarkannya pengaturan variabel ke pointer
asli, kita ingin
mengaturnya untuk pembungkus kami, jadi kami menggunakan:
Code:
|
HRESULT
Direct3DDevice9Wrapper::GetDirect3D(IDirect3D9 **ppD3D9)
{ *ppD3D9 = Direct3D9; return D3D_OK; } |
Dan penyesuaian
lain untuk QueryInterface:
Code:
|
HRESULT
Direct3DDevice9Wrapper::QueryInterface(const IID &riid, void **ppvObj)
{ HRESULT hRes = Direct3DDevice9->QueryInterface(riid, ppvObj); if( hRes == S_OK ) *ppvObj = this; else *ppvObj = NULL; return hRes; } |
Ok sekarang
kita harus dilakukan dengan file ini juga. Jadi simpan dan tutup. Berikutnya, kita
perlu kembali dan mengedit beberapa beberapa file pertama untuk menangani perubahan
dengan pembungkus baru. Jadi, pertama memungkinkan stdafx.h terbuka
Di bagian bawah stdafx.h Anda perlu menambahkan mencakup lain:
Di bagian bawah stdafx.h Anda perlu menambahkan mencakup lain:
Code:
|
#include
"ID3D9Wrapper_Device.h"
|
Kemudian Anda dapat menyimpan dan menutup file
tersebut.
Berikutnya, di main.cpp, Anda perlu menambahkan termasuk juga:
Berikutnya, di main.cpp, Anda perlu menambahkan termasuk juga:
Code:
|
#include
"ID3D9Wrapper.h"
|
Yang satu ini harus
pergi di bawah termasuk untuk stdafx.h (Order tidak peduli dalam beberapa kasus.)
Kemudian simpan dan main.cpp dekat.
Selanjutnya kita perlu menambahkan file definisi untuk proyek untuk membuatnya sehingga Direct3DCreate9 dapat diakses oleh program menyebutnya dan bahwa tidak semua giberish ketika compiler link itu. Ini adalah langkah lain yang mungkin membutuhkan pekerjaan yang berbeda jika Anda tidak menggunakan VS2005. Saya tidak tahu apakah file DEF standar untuk kompiler lain, tetapi harus. Anda mungkin harus bekerja berbeda untuk mengkompilasi satu ke proyek Anda sekalipun.
Bagi orang-orang yang menggunakan VS2005, cukup lakukan hal berikut:
- Dalam solusi explorer, klik kanan pada 'Sumber Files' dan goto:
- Tambahkan -> New Item
- Pilih file 'Modul-definition' dari popup dan nama itu nama yang sama sebagai proyek. Dalam kasus saya, itu akan disebut, 'dxhook.def'
Sekarang jika file tidak membuka diri sudah, cukup klik ganda itu. File ini adalah file ekspor yang akan mengandung ekspor kita perlu untuk memungkinkan program lain akses langsung ke. Dalam kasus kami, satu-satunya untuk saat ini adalah Direct3DCreate9. Tapi bukannya hanya mengatakan, ekspor, kami ingin mengatur Direct3DCreate9 fungsi doyan kami. Jadi file kode DEF kami akan:
Selanjutnya kita perlu menambahkan file definisi untuk proyek untuk membuatnya sehingga Direct3DCreate9 dapat diakses oleh program menyebutnya dan bahwa tidak semua giberish ketika compiler link itu. Ini adalah langkah lain yang mungkin membutuhkan pekerjaan yang berbeda jika Anda tidak menggunakan VS2005. Saya tidak tahu apakah file DEF standar untuk kompiler lain, tetapi harus. Anda mungkin harus bekerja berbeda untuk mengkompilasi satu ke proyek Anda sekalipun.
Bagi orang-orang yang menggunakan VS2005, cukup lakukan hal berikut:
- Dalam solusi explorer, klik kanan pada 'Sumber Files' dan goto:
- Tambahkan -> New Item
- Pilih file 'Modul-definition' dari popup dan nama itu nama yang sama sebagai proyek. Dalam kasus saya, itu akan disebut, 'dxhook.def'
Sekarang jika file tidak membuka diri sudah, cukup klik ganda itu. File ini adalah file ekspor yang akan mengandung ekspor kita perlu untuk memungkinkan program lain akses langsung ke. Dalam kasus kami, satu-satunya untuk saat ini adalah Direct3DCreate9. Tapi bukannya hanya mengatakan, ekspor, kami ingin mengatur Direct3DCreate9 fungsi doyan kami. Jadi file kode DEF kami akan:
Code:
|
LIBRARY
"dxhook"
EXPORTS Direct3DCreate9 = Mine_Direct3DCreate9 |
Sekarang, VS2005 harus menambahkan file DEF untuk proyek properti secara otomatis selama Anda menambahkan dengan cara saya menunjukkan di atas. Simpan dan
tutup file yang sekarang.
Selamat! Hook / wrapper selesai! Mengambil
nafas selama beberapa sebelum
menulis launcher singkat
untuk Hook ini.
Bagian 6. Injector The
Ok pertama dan terutama, mari mulai dengan, ini adalah injektor sangat dasar. Ada banyak cara untuk menulis ulang ini dan seperti itu, dan saya sangat menyarankan bahwa Anda lakukan. Ada libs sangat bagus Anda harus menggunakan seperti ForceLib, dan rewriter CRC32 untuk menjaga mata kail terdeteksi dan semacamnya. Ini hanyalah sebuah contoh kecil untuk menunjukkan kepada Anda bagaimana untuk menyuntikkan menggunakan Detours.
Detours dilengkapi dengan fungsi yang membungkus CreateProcessEx dan menyuntikkan modul yang Anda berikan, untuk Anda. Anda dapat melakukan ini sendiri juga dengan menggunakan CreateProcess / Ex kemudian berhenti proses, membuat thread baru, dan menyuntikkan kode Anda ke benang, kemudian memanggil DllMain diri dan semacamnya. Sekali lagi, theres banyak cara untuk melakukannya, sehingga Anda dapat memilih mana yang ingin Anda gunakan.
Untuk ini saya akan menggunakan aplikasi konsol sederhana. Tidak ada yang besar, 1 file, tidak banyak kode.
Untuk memulai, mari kita membuat proyek baru sehingga membuka contoh lain dari VS2005 dan goto: File -> New -> Project, pilih Win32 Project dari kotak, nama itu dxlauncher atau apa pun yang Anda inginkan. Sekali lagi tetap "Buat direktori untuk solusi" diperiksa karena membuat hal-hal baik dan rapi. Kemudian klik ok.
Ketika Aplikasi Wisaya muncul, klik pada link Pengaturan Aplikasi di sebelah kiri, kemudian pilih pengaturan berikut:
Aplikasi Jenis: Console Application
Pilihan lain: Proyek Kosong
Kemudian klik finish untuk membuka proyek baru kosong. Berikutnya, klik kanan di explorer solusi, dan goto: Tambah -> New Item, Pilih C ++ File (.cpp) dari kotak, masukkan nama, 'main.cpp' dan klik add.
Sekarang folder baru untuk proyek ini harus telah dibuat. Anda harus copy dan paste Detours folder ke direktori proyek ini juga menyebabkan kita membutuhkan mereka untuk proyek ini juga. Alih-alih benar-benar menjelaskan hal-hal untuk ini aku hanya gunna posting kode:
Ok pertama dan terutama, mari mulai dengan, ini adalah injektor sangat dasar. Ada banyak cara untuk menulis ulang ini dan seperti itu, dan saya sangat menyarankan bahwa Anda lakukan. Ada libs sangat bagus Anda harus menggunakan seperti ForceLib, dan rewriter CRC32 untuk menjaga mata kail terdeteksi dan semacamnya. Ini hanyalah sebuah contoh kecil untuk menunjukkan kepada Anda bagaimana untuk menyuntikkan menggunakan Detours.
Detours dilengkapi dengan fungsi yang membungkus CreateProcessEx dan menyuntikkan modul yang Anda berikan, untuk Anda. Anda dapat melakukan ini sendiri juga dengan menggunakan CreateProcess / Ex kemudian berhenti proses, membuat thread baru, dan menyuntikkan kode Anda ke benang, kemudian memanggil DllMain diri dan semacamnya. Sekali lagi, theres banyak cara untuk melakukannya, sehingga Anda dapat memilih mana yang ingin Anda gunakan.
Untuk ini saya akan menggunakan aplikasi konsol sederhana. Tidak ada yang besar, 1 file, tidak banyak kode.
Untuk memulai, mari kita membuat proyek baru sehingga membuka contoh lain dari VS2005 dan goto: File -> New -> Project, pilih Win32 Project dari kotak, nama itu dxlauncher atau apa pun yang Anda inginkan. Sekali lagi tetap "Buat direktori untuk solusi" diperiksa karena membuat hal-hal baik dan rapi. Kemudian klik ok.
Ketika Aplikasi Wisaya muncul, klik pada link Pengaturan Aplikasi di sebelah kiri, kemudian pilih pengaturan berikut:
Aplikasi Jenis: Console Application
Pilihan lain: Proyek Kosong
Kemudian klik finish untuk membuka proyek baru kosong. Berikutnya, klik kanan di explorer solusi, dan goto: Tambah -> New Item, Pilih C ++ File (.cpp) dari kotak, masukkan nama, 'main.cpp' dan klik add.
Sekarang folder baru untuk proyek ini harus telah dibuat. Anda harus copy dan paste Detours folder ke direktori proyek ini juga menyebabkan kita membutuhkan mereka untuk proyek ini juga. Alih-alih benar-benar menjelaskan hal-hal untuk ini aku hanya gunna posting kode:
Code:
|
#include <windows.h>
#include <stdio.h> #include <tchar.h> #include <atlbase.h> #include <atlstr.h> #pragma comment(lib,"Detours/detours.lib") #include "Detours/detours.h" int main() { CString strHookPath; CString strINIPath; //////////////////////////////////// // Get The Current Paths //////////////////////////////////// _wfullpath(strHookPath.GetBuffer(MAX_PATH), L"dxhook.dll", MAX_PATH); strHookPath.ReleaseBuffer(); _wfullpath(strINIPath.GetBuffer(MAX_PATH), L"settings.ini", MAX_PATH); strINIPath.ReleaseBuffer(); //////////////////////////////////// // Check For Files //////////////////////////////////// if( GetFileAttributes( strHookPath ) == 0xFFFFFFFF ) { // Hook Was Not Found return 0; } if( GetFileAttributes( strINIPath ) == 0xFFFFFFFF ) { // INI File Was Not Found return 0; } //////////////////////////////////// // Read INI For Game Path //////////////////////////////////// CString strGamePath; GetPrivateProfileString( _T("settings"), _T("Path"), _T(""), strGamePath.GetBuffer(MAX_PATH), MAX_PATH, strINIPath ); strGamePath.ReleaseBuffer(); //////////////////////////////////// // Create Game Path Variables //////////////////////////////////// CString strGameExe = strGamePath + "\\GAME_EXE_NAME.exe"; //////////////////////////////////// // Launch The Process //////////////////////////////////// STARTUPINFO si = {sizeof(STARTUPINFO)}; PROCESS_INFORMATION pi = {0}; BOOL bResult = DetourCreateProcessWithDll( strGameExe, NULL, 0, 0, TRUE, CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE, NULL, strGamePath, &si, &pi, strHookPath, 0 ); if( !bResult ) { // Process Failed To Launch return 0; } //////////////////////////////////// // Done! //////////////////////////////////// return 0; } |
Sekali lagi, saya
tidak merekomendasikan menggunakan ini sebagai launcher Anda. Hal ini tidak
aman dan akan terdeteksi. Seiring dengan itu wont bekerja untuk beberapa game
yang terlambat launching berarti 1 window peluncuran lain. Anda akan perlu
untuk membuat injector memantau proses gaya untuk itu.
Sekarang, mengkompilasi baik launcher dan DLL dan menempatkan mereka dalam folder yang sama. Jika Anda menggunakan launcher saya, membuat file teks baru dan rename menjadi 'settings.ini' dan dimasukkan di dalamnya:
Sekarang, mengkompilasi baik launcher dan DLL dan menempatkan mereka dalam folder yang sama. Jika Anda menggunakan launcher saya, membuat file teks baru dan rename menjadi 'settings.ini' dan dimasukkan di dalamnya:
Code:
|
[settings]
Path=C:/Path/To/Your/Game |
Kemudian
memulai permainan dan bermain.
kompilasi
Dengan Visual Studio 2005, Anda mungkin mengalami masalah dengan orang lain menggunakan program Anda setelah dikompilasi. Hal ini disebabkan thats perpustakaan runtime diatur ke default ketika dikompilasi. Hal ini, bagaimanapun, penyesuaian sederhana. Buka proyek Anda di VS2005, dan membuka proyek properti dengan pergi ke:
Project -> <Nama Proyek> Properties
Setelah proyek properti terbuka, memperluas item pohon Konfigurasi Properties, kemudian memperluas C / C ++ item. Kemudian klik pada item 'Kode Generation'. Di sisi kanan, Anda harus menemukan opsi berlabel, "Runtime Library ', mengubah nilai ini ke' Multi-Threaded (/ MT) 'untuk rilis membangun Anda yang akan dibagikan kepada orang lain.
kompilasi
Dengan Visual Studio 2005, Anda mungkin mengalami masalah dengan orang lain menggunakan program Anda setelah dikompilasi. Hal ini disebabkan thats perpustakaan runtime diatur ke default ketika dikompilasi. Hal ini, bagaimanapun, penyesuaian sederhana. Buka proyek Anda di VS2005, dan membuka proyek properti dengan pergi ke:
Project -> <Nama Proyek> Properties
Setelah proyek properti terbuka, memperluas item pohon Konfigurasi Properties, kemudian memperluas C / C ++ item. Kemudian klik pada item 'Kode Generation'. Di sisi kanan, Anda harus menemukan opsi berlabel, "Runtime Library ', mengubah nilai ini ke' Multi-Threaded (/ MT) 'untuk rilis membangun Anda yang akan dibagikan kepada orang lain.
Catatan
- Detours 2.1 telah dihapus fungsi yang digunakan untuk buku ini jadi silakan gunakan link yang diberikan bukan Detours Download sebenarnya.
- Detours 2.1 telah dihapus fungsi yang digunakan untuk buku ini jadi silakan gunakan link yang diberikan bukan Detours Download sebenarnya.
Diterjemahkan Oleh : Deva Maulana
Sumber Doc : http://forum.cheatengine.org/viewforum.php?f=38
Dilarang Post Tanpa Sumber
Post ini telah mendapat ijin dari pihak yg terkait(Penulis Alsi)
Sumber Doc : http://forum.cheatengine.org/viewforum.php?f=38
Dilarang Post Tanpa Sumber
Post ini telah mendapat ijin dari pihak yg terkait(Penulis Alsi)
BiTDeMaCyber. Diberdayakan oleh Blogger.