Unknown

Baca dan simak baik.

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.
 
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.

Bagian 2. Peralatan yang Dibutuhkan

     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
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




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.
Alat

 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:

         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.
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. = -
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 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.

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:

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:

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:

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:

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:

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:

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 :

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:

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.



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.)
ID3D9Wrapper.h

     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:

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.

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:

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:

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:

Code:
HRESULT Direct3D9Wrapper::QueryInterface(const IID &riid, void **ppvObj)
{
   return Direct3D9->QueryInterface(riid, ppvObj);
}

Sederhana bukan?

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:

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:

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:

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:

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:

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:

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:

Code:
#include "ID3D9Wrapper_Device.h"

Kemudian Anda dapat menyimpan dan menutup file tersebut.

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:

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:


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:

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.
Catatan
- 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)

[Comment Area]
Jangan lupa comment bro !!!

Subscribe to Posts | Subscribe to Comments

BiTDeMaCyber. Diberdayakan oleh Blogger.