SolvedComo pegar uma base estática ?

Posts 16–26 of 26 · Page 2 of 2
Quote Originally Posted by Code64 View Post
nada a ver com ImageBase, o endereço está dentro de uma THREAD, por isso não é fixo, thread é executada como se fosse outro programa externo so que pertence ao mesmo processo.
Não sei onde você aprendeu isso mas você precisa rever seus conceitos.

Todo processo tem pelo menos uma Thread que é a função Main(), você pode criar outras Threads no seu projeto e elas estarão no mesmo espaço de memória do seu módulo, exceções são quando você aloca espaço na memória com VirtualAlloc ou na Heap com HeapAlloc e transfere a função para esses espaços alocados e usa CreateThread nesse caso o endereço sera diferente do espaço de memória do seu módulo, malwares utilizam essa técnica para bypassear Anti Virus, Cheats utilizam essa técnica para bypassear Anti Cheats e packers utilizam essa técnica para dificultar a analise estática do código.

Exemplos:
Code:
 teste.exe
void hotkey()
{
     if(GetAsyncKeyState(VK_F5))
        MessageBox(0,"HotKey","teste",0);
     Sleep(100);
}

int main()
{
    CreateThread(0,0,(LPTHREAD_START_ROUTINE)hotkey,0,0,0); // essa Thread estará no mesmo espaço de memória do módulo teste.exe
     CreateThread(0,0,(LPTHREAD_START_ROUTINE)Sleep,100,0,0); // essa Thread estará no mesmo espaço de memória do módulo Kernel32.dll
    return 0;
}
Ou seja toda Thread faz parte de um módulo, apenas com as exceções que eu falei que isso vai ser diferente.

Threads compartilham a seção .CODE e a .DATA.

Para saber se Thread faz parte do módulo main.exe é só pegar o entry addr da Thread no botão T e comparar com o endereço do módulo main.exe para saber se está no mesmo espaço de memória, se estiver no mesmo espaço de memória é só usar GetModuleHandle(0); ou o método da PEB e somar a offset.


Quote Originally Posted by luizimloko View Post


como eu faço para pegar a thread que contem o endereço e somar a + 68FE ?
Para pegar o endereço da Thread é só usar NtQueryInformationThread passando o parâmetro ThreadQuerySetWin32StartAddress.
Quote Originally Posted by 0xB4DF00D View Post
Não sei onde você aprendeu isso mas você precisa rever seus conceitos.

Todo processo tem pelo menos uma Thread que é a função Main(), você pode criar outras Threads no seu projeto e elas estarão no mesmo espaço de memória do seu módulo, exceções são quando você aloca espaço na memória com VirtualAlloc ou na Heap com HeapAlloc e transfere a função para esses espaços alocados e usa CreateThread nesse caso o endereço sera diferente do espaço de memória do seu módulo, malwares utilizam essa técnica para bypassear Anti Virus, Cheats utilizam essa técnica para bypassear Anti Cheats e packers utilizam essa técnica para dificultar a analise estática do código.

Exemplos:
Code:
 teste.exe
void hotkey()
{
     if(GetAsyncKeyState(VK_F5))
        MessageBox(0,"HotKey","teste",0);
     Sleep(100);
}

int main()
{
    CreateThread(0,0,(LPTHREAD_START_ROUTINE)hotkey,0,0,0); // essa Thread estará no mesmo espaço de memória do módulo teste.exe
     CreateThread(0,0,(LPTHREAD_START_ROUTINE)Sleep,100,0,0); // essa Thread estará no mesmo espaço de memória do módulo Kernel32.dll
    return 0;
}
Ou seja toda Thread faz parte de um módulo, apenas com as exceções que eu falei que isso vai ser diferente.

Threads compartilham a seção .CODE e a .DATA.

Para saber se Thread faz parte do módulo main.exe é só pegar o entry addr da Thread no botão T e comparar com o endereço do módulo main.exe para saber se está no mesmo espaço de memória, se estiver no mesmo espaço de memória é só usar GetModuleHandle(0); ou o método da PEB e somar a offset.




Para pegar o endereço da Thread é só usar NtQueryInformationThread passando o parâmetro ThreadQuerySetWin32StartAddress.
Eu disse que não tem nada a ver pelo fato do luizim dizer que o endereço da thread nunca é o mesmo. Então eu ja não sei como o jogo trata as threads, então pelo o que o luizim postou no tópico, ja sabemos que não da pra pegar pelo GetModuleHandle nullo.
Quote Originally Posted by Code64 View Post
Eu disse que não tem nada a ver pelo fato do luizim dizer que o endereço da thread nunca é o mesmo. Então eu ja não sei como o jogo trata as threads, então pelo o que o luizim postou no tópico, ja sabemos que não da pra pegar pelo GetModuleHandle nullo.

Mas você pode pegar pelo pé do endereço, jogando ele na cabeça da thread.
Quote Originally Posted by BACKD00R View Post



Mas você pode pegar pelo pé do endereço, jogando ele na cabeça da thread.
Tente utilizar Ponteiros...

Vou dar apenas uma ideia em VB.NET:

Dim MeuLevel As Long
Dim Level As Long
Dim Som As Long
Call ReadALong("Main", &0B8968FE, MeuLevel)
Level = MeuLevel + &OFFSET
Call WriteAFloat("Main", Level, XXX)''Aqui você se vira, substituindo o XXX pelo valor que desejar.

If Level >= 300 Then
Som = PlaySound("C:\musica.mp3", 0, 0)''Aqui o áudio, pode ser personalizado.
EndIf
O Loop pode ser feito de maneira classica ou Timer. Use a criatividade.
boa manu legal o que disse ensina muito

Quote Originally Posted by VDS View Post
Tente utilizar Ponteiros...

Vou dar apenas uma ideia em VB.NET:



O Loop pode ser feito de maneira classica ou Timer. Use a criatividade.
@VDS, @Code64, @0xB4DF00D @experthack

Valeu todos ai, já consegui !!!

ps: Eu censurei os endereços
Code:
DWORD WINAPI MuManiacos(LPVOID)
{
	while(1)
	{
		DWORD MuEngine  = (DWORD)GetModuleHandle("muonline.exe");
		DWORD myLevels  = *(DWORD *)(MuEngine + 0x*******); // muonline.exe+*******
		DWORD myPointer = myLevels + 0x*;

		if(*(BYTE *)myPointer >= 144 /* 400 em byte = 144 */) // Level 400
		{
			Beep(562, 100);
		}
		else
		{
			return FALSE;
		}
		
		Sleep(100);
	}
}
@Rullez pode fechar
Quote Originally Posted by luizimloko View Post
@VDS, @Code64, @0xB4DF00D @experthack

Valeu todos ai, já consegui !!!

ps: Eu censurei os endereços
Code:
DWORD WINAPI MuManiacos(LPVOID)
{
	while(1)
	{
		DWORD MuEngine  = (DWORD)GetModuleHandle("muonline.exe");
		DWORD myLevels  = *(DWORD *)(MuEngine + 0x*******); // muonline.exe+*******
		DWORD myPointer = myLevels + 0x*;

		if(*(BYTE *)myPointer >= 144 /* 400 em byte = 144 */) // Level 400
		{
			Beep(562, 100);
		}
		else
		{
			return FALSE;
		}
		
		Sleep(100);
	}
}
@Rullez pode fechar
Não tenho mais esse poder !
@Flengo

Quote Originally Posted by Rullez View Post
Não tenho mais esse poder !
@Flengo

ah tá, eu me esqueci que a tag GM era zoação do @Dave84311
Quote Originally Posted by luizimloko View Post


ah tá, eu me esqueci que a tag GM era zoação do @Dave84311

ksksk
foi bom enquanto durou

peça ao @BACKD00R @Flengo

Para fechar
É a mesma lógica que eu apresentei
Posts 16–26 of 26 · Page 2 of 2
This thread is closed for replies.

Similar Threads

Tags for this Thread

None

Need help?