Ajuda com códigos

Posts 1–6 of 6 · Page 1 of 1
Ajuda com códigos
Como ninguém nasceu sabendo e mesmo procurando não encontrei, não me custa perguntar né?
Afinal, como o próprio Luizimloko já falou : "Querer ajuda é diferente de querer tudo de mão beijada."

Minhas dúvidas começam com HOOKING
Estudei um pouco sobre o assunto, tentei ler apostilas em inglês porém como não sou fluente não adiantou quase nada.
Reparei que quase todas as sources que baixei com HOOK utilizam o seguinte código para DIP :

Code:
__declspec( naked ) HRESULT WINAPI DIPMID( )
{
	static LPDIRECT3DDEVICE9 pDevice;

	__asm
	{
		MOV EDX, DWORD PTR DS:[EAX]
		MOV EDX, DWORD PTR DS:[EDX + 0x148]
		MOV DWORD PTR DS:[pDevice], EAX
		PUSHAD
	}

	CALL DA FUNÇÃO DOS HACKS D3D( pDevice );

	__asm
	{
		POPAD
		JMP retDIPEngine
	}
}
Primeira dúvida : Esse código permanece funcional? Pois estou obtendo problemas com detecção e estou utilizando ele.
Eu acredito que não funcione mais, porém alguém poderia me indicar o caminho para atualiza-lo ou me dar alguma referência...

Bom, com present engine é a mesma dúvida :

Code:
{
	static LPDIRECT3DDEVICE9 pDevice;

	__asm
	{
		MOV ECX, DWORD PTR DS:[EAX]
		MOV EDX, DWORD PTR DS:[ECX + 0x44]
		MOV DWORD PTR DS:[pDevice], EAX
		PUSH 0
		PUSHAD
	}

	pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_FALSE );

	StartFont( pDevice );
	CALL DO MENU( pDevice );
	CALL FUNCOES DE MEMORIA( pDevice );

	pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE );

	__asm
	{
		POPAD
		JMP retPresentEngine
	}
}
Segunda dúvida : A Mesma da primeira referente ao código acima.

Conforme o desenrolar do tópico eu talvez publique mais dúvidas.
Até

A Present e EndScene estão funcionando normalmente.
O Caminho para "Atualizar" é modificando o código. Talvez Funcione deste modo.

Code:
{
		MOV ECX, DWORD PTR DS:[EAX]
		MOV EDX, DWORD PTR DS:[ECX + 0x44]
		MOV DWORD PTR DS:[pDevice], EAX
		PUSH 0
		PUSHAD
                CALL[Menu]
		POPAD
		JMP retPresentEngine
	}
Ou talvez o problema esteja em outro local. Eu apenas testei a EndScene.
Quote Originally Posted by Coder.DiasII View Post
A Present e EndScene estão funcionando normalmente.
O Caminho para "Atualizar" é modificando o código. Talvez Funcione deste modo.

Code:
{
		MOV ECX, DWORD PTR DS:[EAX]
		MOV EDX, DWORD PTR DS:[ECX + 0x44]
		MOV DWORD PTR DS:[pDevice], EAX
		PUSH 0
		PUSHAD
                CALL[Menu]
		POPAD
		JMP retPresentEngine
	}
Ou talvez o problema esteja em outro local. Eu apenas testei a EndScene.
Então, quanto o Present e EndScene eu já tinha sanado que estavam funcionando
Pois o problema é só ao ativar funções que são chamadas pelo DIP
OBS : Sanei ao perceber que mesmo com o menu ativo não tomava DC, somente ao ativar funções
Quote Originally Posted by Coder.DiasII View Post
A Present e EndScene estão funcionando normalmente.
O Caminho para "Atualizar" é modificando o código. Talvez Funcione deste modo.

Code:
{
		MOV ECX, DWORD PTR DS:[EAX]
		MOV EDX, DWORD PTR DS:[ECX + 0x44]
		MOV DWORD PTR DS:[pDevice], EAX
		PUSH 0
		PUSHAD
                CALL[Menu]
		POPAD
		JMP retPresentEngine
	}
Ou talvez o problema esteja em outro local. Eu apenas testei a EndScene.
You can Help Me please? Thank you in Advance
Coder.DiasII You can help me bro? Thank you in advance!
Bem ..., irei recomendar dois conteúdos de estudo para você:

Code:
Google ( Primeiro item ): Mid-Function hook, that big deal ?
Como funciona um Detour: http://www.mpgh.net/forum/showthread.php?t=843252

e também irei dar algumas explicações, baseado em:



Code:
//0045E3BE  |. A1 C8221701    MOV EAX,DWORD PTR DS:[11722C8]  	  //Armazena em EAX o endereço do ponteiro 'pDevice'.
//0045E3C3  |. 3BC1           CMP EAX,ECX			  //Comparação de memória entre dois espaços de memória.
//0045E3C5  |. 74 34          JE SHORT crossfir.0045E3FB	  //Caso a instrução a cima for falsa pula para o techo: 0x0045E3FB
//0045E3C7  |. 880D 4C241701  MOV BYTE PTR DS:[117244C],CL	  //Armazenamento de alguma coisa, semelhante a isso: *( char * ) ( 0x117244C ) = CL ( conteúdo de CL ).
//0045E3CD  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]	  //Cria o ponteiro para o device, semelhante a isso: *( LPDIRECT3DDEVICE9 * ).
//0045E3CF  |. 8B08           MOV ECX,DWORD PTR DS:[EAX]	  //Aponta novamente, semelhante a isso: **( LPDIRECT3DDEVICE9 ** ).
//0045E3D1  |. 8B91 A8000000  MOV EDX,DWORD PTR DS:[ECX+A8]	  //Acesso a função do EndScene dentro da classe do device, semelhante a isso: pDevice->EndScene, lembrando: A8 / 4 = 42.
//0045E3D7  |. 50             PUSH EAX				  //Passagem do parâmetro do device semelhante a isso: EndScene( pDevice ), que esta em EAX.
//0045E3D8  |. FFD2           CALL EDX				  //Chama a função do EndScene, que foi armazenado em EDX.

DWORD dwEndSceneStart  = 0x0045E3CF; //0045E3CF  |. 8B08           MOV ECX,DWORD PTR DS:[EAX]
DWORD dwEndSceneReturn = 0x0045E3D7; //0045E3D7  |. 50             PUSH EAX

__declspec( naked ) HRESULT WINAPI EndSceneEngine( void )
{
	static LPDIRECT3DDEVICE9 pDevice;

	__asm
	{
		MOV ECX, DWORD PTR DS:[ EAX ]
		MOV EDX, DWORD PTR DS:[ ECX + 0xA8 ]
		MOV DWORD PTR DS:[ pDevice ], EAX
	}

	//Funções
	//Quando você faz isso daqui, você esta fazendo um hook literamente hook = gancho, ou 'emenda',
	//ou seja, emendando seu código ao do jogo, para rodar seus códigos em paralelo ao mesmo.

	__asm
	{
		//Ao fazer isso, após a execução do código a cima retornamos ao código original do jogo,
		//para prosseguir com a execução.
		JMP DWORD PTR DS:[ dwEndSceneReturn ]
	}
}
Posts 1–6 of 6 · Page 1 of 1

Post a Reply

Similar Threads

Tags for this Thread

None

Need help?