27-03-2011, 01:59 PM
Premetto che :
Voglio essere generoso e vi sto aiutando con questa guida.
Quindi siete pregati di non dire è poco dettagliata ecc.
Premessa:
Questa guida non contiene nessun tipo di hack: un Addys Logger è una semplice Log, ovvero un file .txt del blocco note creato attraverso linguaggio macchina C++ che serve per trovare gli address. Cos'è un address? In due parole una qualsiasi cosa che effettuate su nostale è un address corrispondente di un suo value (valore). Esemplificamente il movimento è un address: muovendovi si modificherà il suo value, stando fermi rimarrà statico e così via; un oggetto in inventario è un address e il suo value è caratterizzato dalla quantità di questi oggetti che avete, ecc. ecc.
Se non capite questo, evitate di seguire questa guida e di fare domande monotone.
OCCORRENTE :
C++ 2010
SDK SUMMER 2004
///////////////////////
COSE UN ADDYS LOGGER?
///////////////////////
Un addys logger vi permette di cercare address ogni aggiornamento lo avviate e vi usciranno nel file .txt tutti gli address e non vi resterà altro che creare il vostro HACK
///////////////////////////
PROCEDIAMO
///////////////////////////
Create un nuovo progetto con destinazione in una cartella sul desktop :
Bene cancellate tutti i file che ci sono nella cartella del progetto da voi creato che si trova a sinistra Dipendenze esterne e intestazioni
Poi fate un po di ordine in intestazione Fate due cartelle E le rinominate : INCLUDE e l'altra MAIN.
In include (cartella) fate tasto destro Aggiungi -> Nuovo elemento
si aprirà una finesta e selezionate file di intestazione (.h) che chiameremo Log.h e un altro file [RIPETE PROCEDIMENTO] solo che quest'altro lo chiamerete Pattern.h
________________
Bene quindi ricapitolando dentro i file di intestazione avete due cartelle Include e main in include ci sono due file di intestazione uno di nome Log.h e un altro di nome Pattern.h bene in Log.h inserite il seguente codice :
e in Pattern.h
Non vi spiego a significare a cosa servono senò ci mettereste troppo tempo per capire e lo capireste in modo sbagliato bene.
Bene adesso rifacciamo lo stesso procedimento solo nella cartella main e creiamo sta volta al posto di file di intestazione (.h) dobbiamo creare file di C++ (.cpp) ne creiamo due chiamati uno Log.cpp e l'altro Main.cpp in log.cpp ci inseriamo questo codice :
e in Main.cpp
Benissimo adesso io vi ho fatto un piccolo esempio di byte ovvero :
DWORD dwlevel20 = FindPattern((PBYTE)"\x3B\x48\x18\x75\x08};", "xx?x?", 1, true);
voi dovrete cercarli tramite un decompiler
e cheatengine per gli address statici e attaccherete NostaleX.dat al decompiler E andate con il rock and roll
in questo caso se abbiamo un codice come questo :
3B5D43 5V86
il codice finale sarà :
mentre questi :xxx?? è molto semplice la x equivale a due cifre ovvero in questo caso x3B poi continui xx = x3B/x5D mentre quelli di destra si inserisce il punto interrogativo = ?
e poi sotto
Spero di essere stato chiaro alla prossima !
Voglio essere generoso e vi sto aiutando con questa guida.
Quindi siete pregati di non dire è poco dettagliata ecc.
Premessa:
Questa guida non contiene nessun tipo di hack: un Addys Logger è una semplice Log, ovvero un file .txt del blocco note creato attraverso linguaggio macchina C++ che serve per trovare gli address. Cos'è un address? In due parole una qualsiasi cosa che effettuate su nostale è un address corrispondente di un suo value (valore). Esemplificamente il movimento è un address: muovendovi si modificherà il suo value, stando fermi rimarrà statico e così via; un oggetto in inventario è un address e il suo value è caratterizzato dalla quantità di questi oggetti che avete, ecc. ecc.
Se non capite questo, evitate di seguire questa guida e di fare domande monotone.
OCCORRENTE :
C++ 2010
SDK SUMMER 2004
///////////////////////
COSE UN ADDYS LOGGER?
///////////////////////
Un addys logger vi permette di cercare address ogni aggiornamento lo avviate e vi usciranno nel file .txt tutti gli address e non vi resterà altro che creare il vostro HACK
///////////////////////////
PROCEDIAMO
///////////////////////////
Create un nuovo progetto con destinazione in una cartella sul desktop :
Bene cancellate tutti i file che ci sono nella cartella del progetto da voi creato che si trova a sinistra Dipendenze esterne e intestazioni
Poi fate un po di ordine in intestazione Fate due cartelle E le rinominate : INCLUDE e l'altra MAIN.
In include (cartella) fate tasto destro Aggiungi -> Nuovo elemento
si aprirà una finesta e selezionate file di intestazione (.h) che chiameremo Log.h e un altro file [RIPETE PROCEDIMENTO] solo che quest'altro lo chiamerete Pattern.h
________________
Bene quindi ricapitolando dentro i file di intestazione avete due cartelle Include e main in include ci sono due file di intestazione uno di nome Log.h e un altro di nome Pattern.h bene in Log.h inserite il seguente codice :
Codice:
char *GetDirectoryFile(char *filename);
void __cdecl Writelog (const char * fmt, ...);
void logging(HMODULE hDll);
Codice:
DWORD dwSize;
DWORD dwStartAddress;
BOOL bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
{
if(*szMask == 'x' && *pData != *bMask)
return 0;
}
return (*szMask)==NULL;
}
DWORD FindPattern(BYTE *bMask, char * szMask, int codeOffset, BOOL extract)
{
for(DWORD i = 0; i < dwSize; i++)
{
if(bCompare((BYTE*)(dwStartAddress + i),bMask,szMask))
{
if(extract)
{
return *(DWORD*)(dwStartAddress + i + codeOffset);
}
else
{
return (DWORD)(dwStartAddress + i + codeOffset);
}
}
}
return NULL;
}
Bene adesso rifacciamo lo stesso procedimento solo nella cartella main e creiamo sta volta al posto di file di intestazione (.h) dobbiamo creare file di C++ (.cpp) ne creiamo due chiamati uno Log.cpp e l'altro Main.cpp in log.cpp ci inseriamo questo codice :
Codice:
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <stdio.h>
using namespace std;
ofstream ofile;
char dlldirectory[320];
char *GetDirectoryFile(char *filename)
{
static char path[320];
strcpy(path, dlldirectory);
strcat(path, filename);
return path;
}
void __cdecl Writelog(const char *fmt, ...)
{
if(ofile != NULL)
{
if(!fmt) { return; }
va_list va_alist;
char logbuf[256] = {0};
va_start (va_alist, fmt);
_vsnprintf (logbuf+strlen(logbuf), sizeof(logbuf) - strlen(logbuf), fmt, va_alist);
va_end (va_alist);
ofile << logbuf << endl;
}}
void logging(HMODULE hDll){
DisableThreadLibraryCalls(hDll);
GetModuleFileName(hDll, dlldirectory, 512);
for(int i = strlen(dlldirectory); i > 0; i--) { if(dlldirectory[i] == '\\') { dlldirectory[i+1] = 0; break; } }
ofile.open(GetDirectoryFile("Address Nostale.txt"), ios::app);
}
Codice:
#include <windows.h>
#include <stdio.h>
#include "Log.h"
#include "Pattern.h"
void SearchPatterns(void)
{
Sleep(1000);
dwStartAddress = 0x400000;
do {
dwStartAddress = (DWORD)GetModuleHandle("NostaleX.dat");
Sleep(10);
}while(!dwStartAddress);
dwSize = 0x500000;
DWORD dwlevel20 = FindPattern((PBYTE)"\x3B\x48\x18\x75\x08};", "xx?x?", 1, true);
Writelog("/=============================================================/");
Writelog("/SanMarinus Addys logger a.k.a Because or Quadcore for nostale/");
Writelog("/=============================================================/");
Writelog("/ ~ OFFSET ~/");
Writelog("#define OFS_LEVEL_20 0x%X",dwlevel20);
Writelog("/=============================================================/");
Writelog("/=============Finish Process Excute Addys======================/");
Writelog("/=============================================================/");
ExitProcess(0);
}
BOOL WINAPI DllMain ( HMODULE hDll, DWORD dwReason, LPVOID lpReserved )
{
DisableThreadLibraryCalls(hDll);
if (dwReason==DLL_PROCESS_ATTACH)
{
logging(hDll);
CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)SearchPatterns, NULL, NULL, NULL);
}
return TRUE;
}
DWORD dwlevel20 = FindPattern((PBYTE)"\x3B\x48\x18\x75\x08};", "xx?x?", 1, true);
voi dovrete cercarli tramite un decompiler
e cheatengine per gli address statici e attaccherete NostaleX.dat al decompiler E andate con il rock and roll
in questo caso se abbiamo un codice come questo :
3B5D43 5V86
il codice finale sarà :
Codice:
DWORD dwMIOCODE = FindPattern((PBYTE)"\x3B\x5D\x43\x5V\x86};", "xxx??", 1, true);
e poi sotto
Codice:
Writelog("#define OFS_MIOCODE 0x%X",dwMIOCODE);