Ir ao conteúdo

Posts recomendados

Postado

Opa meus amigos, boa tarde, todos bem? Espero que sim!

 

Eu estou com um probleminha com um código que estou trabalhando em cima, e gostaria de partilhar com vocês para ver se consigo contornar este problema.

- O projeto foi feito em x86 e ficou parado uns 3 anos +- nessa configuração, porém agora resolvi pegar esse projeto da mão de um colega alemão e tentar tocar adiante (sou um entusiasta na área de programação), mas ajustando ele para x64 e compilando normal para .exe

 

  • Me deparei com o seguinte problema adiante: em x86 no msvst é possível escrever e compilar com assembly embutido e algumas funções e sintaxes são reconhecidas ainda, porém quando vamos para o x64 não conseguimos mais escrever e compilar com o assembly embutido e algumas funções como "naked" não são mais reconhecidas.
  • Meu intento é continuar com o código, a única mudança proválvel seria ajusta-lo para x64.

 

Segue abaixo as 2 partes do código em que me encontro com o problema e junto a elas irei comentar a situaçãoa atual e meu progresso em cima delas, "arranjei" uma "solução" de forma "feia" para uma delas, me encontro receoso, já que não consegui depurar por estar ainda nas análises das linhas do código, e também gostaria (se possível) de uma ideia vinda de profissionais da área e de pessoas com maior experiência para que eu possa tornar a solução para esse problema a melhor possível e não acabar "cheio de emendas aqui e ali"..

 

  • Para este, o problema está nos assembly pushad e popad (__asm pushad, __asm popad), ainda pensando aqui se seria plausível e funcional fazer um argumento simples e chama-los, já que não consegui ver nenhuma substituição para o assembly ali do pushad e do popad.

 

DWORD WINAPI SendFunc(
	SOCKET     s,
	char* buf,
	int        len,
	int        flags)
{
	typedef DWORD(WINAPI * p_Send)(SOCKET s, char* buf, int len, int flags);
	p_Send o_Send = reinterpret_cast<p_Send>(fake_Variable_Send);
	__asm pushad
	hexdump(reinterpret_cast<void*>(buf), len,true);
	__asm popad
	/*if (buf && len > 6 && buf[0] == 0x04 && buf[1] == 0x02 ||
		buf && len >= 3 && buf[0] == 0x63 && buf[1] == 0x03)
		return o_Send(s, const_cast<char*>(buf), len, flags);*/
	sg = s;
	return o_Send(s, const_cast<char*>(buf), len, flags);
}

 

  • Enquanto neste, o problema está primeiramente no __declspec(naked) onde a função naked não se aplica mais em x64, e posteriormente na call do __asm (assembly embutido). Bom, depurando do jeito que está ai em x86 vai que é sucesso, mas quando jogo para x64 a sequência de erro aparece, já que o msvst em compilações x64 não aceita o assembly embutido. O que eu fiz então até o momento para tentar contornar? Criei um arquivo .asm e coloquei toda o assembly embutido abaixo dentro do arquivo .asm e linkei ele no projeto (logo mais abaixo).

         

__declspec(naked) void CRC_Hook1()
{

	__asm
	{
		cmp eax,0x00400A04
		je FAKE
		cmp eax, 0x00400A05
		je FAKE2
		cmp eax, 0x00400A06
		je FAKE3
		cmp eax, 0x00400A07
		je FAKE4

		cmp eax, 0x00400A00
		je FAKE5
		cmp eax, 0x00400A01
		je FAKE6
		cmp eax, 0x00400A02
		je FAKE7
		cmp eax, 0x00400A03
		je FAKE8


		lea edi, [edi + 0x00000002]
		jmp CRC_1Back
	FAKE:
		lea eax, fake_Variable_Send
		lea edi, [edi + 0x00000002]
		mov dx,[eax]
		jmp CRC_1Back
	FAKE2:
		lea eax, fake_Variable_Send
		add eax,1
		lea edi, [edi + 0x00000002]
		mov dx, [eax]
		jmp CRC_1Back
	FAKE3 :
		lea eax, fake_Variable_Send
		add eax,2
		lea edi, [edi + 0x00000002]
		mov dx, [eax]
		jmp CRC_1Back
	FAKE4 :
		lea eax, fake_Variable_Send
		add eax,3
		lea edi, [edi + 0x00000002]
		mov dx, [eax]
		jmp CRC_1Back
	FAKE5 :
		lea eax, fake_Variable_Recv
		lea edi, [edi + 0x00000002]
		mov dx, [eax]
		jmp CRC_1Back
	FAKE6 :
		lea eax, fake_Variable_Recv
		add eax, 1
		lea edi, [edi + 0x00000002]
		mov dx, [eax]
		jmp CRC_1Back
	FAKE7 :
		lea eax, fake_Variable_Recv
		add eax, 2
		lea edi, [edi + 0x00000002]
		mov dx, [eax]
		jmp CRC_1Back
	FAKE8 :
		lea eax, fake_Variable_Recv
		add eax, 3
		lea edi, [edi + 0x00000002]
		mov dx, [eax]
		jmp CRC_1Back

	}
}

 

 

arquivo.asm:

 

Citação

bits 64 ;
global CRC_Hook1 ;
CRC_Hook1:

 

        cmp eax,0x00400A04
        je FAKE
        cmp eax, 0x00400A05
        je FAKE2
        cmp eax, 0x00400A06
        je FAKE3
        cmp eax, 0x00400A07
        je FAKE4

        cmp eax, 0x00400A00
        je FAKE5
        cmp eax, 0x00400A01
        je FAKE6
        cmp eax, 0x00400A02
        je FAKE7
        cmp eax, 0x00400A03
        je FAKE8


        lea edi, [edi + 0x00000002]
        jmp 0
    FAKE:
        lea eax, [0]
        lea edi, [edi + 0x00000002]
        mov dx,[eax]
        jmp 0
    FAKE2:
        lea eax, [0]
        add eax,1
        lea edi, [edi + 0x00000002]
        mov dx, [eax]
        jmp 0
    FAKE3 :
        lea eax, [0]
        add eax,2
        lea edi, [edi + 0x00000002]
        mov dx, [eax]
        jmp 0
    FAKE4 :
        lea eax, [0]
        add eax,3
        lea edi, [edi + 0x00000002]
        mov dx, [eax]
        jmp 0
    FAKE5 :
        lea eax, [0]
        lea edi, [edi + 0x00000002]
        mov dx, [eax]
        jmp 0
    FAKE6 :
        lea eax, [0]
        add eax, 1
        lea edi, [edi + 0x00000002]
        mov dx, [eax]
        jmp 0
    FAKE7 :
        lea eax, [0]
        add eax, 2
        lea edi, [edi + 0x00000002]
        mov dx, [eax]
        jmp 0
    FAKE8 :
        lea eax, [0]
        add eax, 3
        lea edi, [edi + 0x00000002]
        mov dx, [eax]
        jmp 0

 

Link no projeto substituindo o __declspec(naked) void CRC_Hook1():

 

extern "C" int CRC_Hook1(void);

 

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!