Aimbot: IsVisible/IntersectSegment crash

Posts 16–23 of 23 · Page 2 of 2
Fiz o hook da função na ILTClient e funcionou sem nenhum crash.

Obrigado a todos.

Screenshot:

Base: Iflux Full Remake
Menu top hein ;3
Quote Originally Posted by matheusgtx View Post
Fiz o hook da função na ILTClient e funcionou sem nenhum crash.

Obrigado a todos.

Screenshot:

Base: Iflux Full Remake
Show de bola
acho que você é o unico que ainda cria em CF !
Melhor menu que ja vi '-'
Quote Originally Posted by matheusgtx View Post
Consegui fazer um aimbot funcional, mas ele está dando crash no IsVisible, alguem sabe o que há de errado?

Acho que está nas classes mas não sei o certo, de resto tudo funciona.

Aimbot.h
Code:
typedef bool(*IntersectSegment)(const IntersectQuery& Query, IntersectInfo *pInfo);
IntersectSegment pIntersectSegment;

bool __cdecl IsVisible(D3DXVECTOR3 MePos, D3DXVECTOR3 TargetPos)
{
	
	IntersectQuery iQuery;
	IntersectInfo iInfo;

	pIntersectSegment = (IntersectSegment)(*(DWORD*)(0x641480)); // Pattern Scan Address

	memset(&iQuery, 0, sizeof(iQuery));

	iQuery.m_From = MePos;
	iQuery.m_To = TargetPos;

	if (pIntersectSegment) // Redundante
	{
                // Aqui acontece o crash
		return !pIntersectSegment(iQuery, &iInfo);
	}

	return true;
}
pIntersectSegment = (IntersectSegment)(*(DWORD*)(0x641480));

Você está desreferenciando um ponteiro, quando na verdade você só precisa pegar o endereço, estranho seria se esse código não provocasse o crash.
Depois dessa linha o valor de pIntersectSegment será os 4 primeiros bytes da função que geralmente é
Code:
push ebp 
mov ebp,esp
...
Fixando o problema
Code:
pIntersectSegment = reinterpret_cast<IntersectSegment>(0x641480); //C++
pIntersectSegment = (IntersectSegment)0x641480; //C
Quote Originally Posted by 0xB4DF00D View Post
pIntersectSegment = (IntersectSegment)(*(DWORD*)(0x641480));

Você está desreferenciando um ponteiro, quando na verdade você só precisa pegar o endereço, estranho seria se esse código não provocasse o crash.
Depois dessa linha o valor de pIntersectSegment será os 4 primeiros bytes da função que geralmente é
Code:
push ebp 
mov ebp,esp
...
Fixando o problema
Code:
pIntersectSegment = reinterpret_cast<IntersectSegment>(0x641480); //C++
pIntersectSegment = (IntersectSegment)0x641480; //C
ele estava fazendo um pointer em uma função ( não estou dizendo que você esta errado, só estou confirmando oque você disse ) :

Code:
pIntersectSegment = (IntersectSegment)(*(DWORD*)(0x641480));
esse tipo de função no caso do intersectsegment é um wrapper que você usa a própria função do jogo.
Eu percebi depois de um tempo que a LTClient faz um call para a função IntersectSegment da crossfire.exe e depois disso eu arrumei o erro.
Quote Originally Posted by luizimloko View Post


Code:
pIntersectSegment = (IntersectSegment)(*(DWORD*)(0x641480));
esse tipo de função no caso do intersectsegment é um wrapper que você usa a própria função do jogo.
Não faz diferença se é um wrapper ou não, chamar uma função não tem segredo, você descobre o endereço da função a convenção de chamada e os argumentos usados.
Contanto que os 3 passos estejam corretos não pode ocorrer o crash, isso claro se o game não adicionar proteções adicionais como checar o endereço de retorno ou usar TLS tricks.

Olhando o código novamente notei outro erro.
Code:
typedef bool(*IntersectSegment)(const IntersectQuery& Query, IntersectInfo *pInfo);
Mesmo que o VisualStudio use como padrão a convenção de chamada __cdecl, que é o mesmo que essa função usa, pode ser que esteja setado como __stdcall.
__cdecl o compilador corrige a stack com add esp,numero de argumentos*4 depois da chamada, __stdcall a própria função corrige a stack no final com RETN numero de argumentos*4.
Ou seja lembre sempre de setar a conveção de chamada.
Code:
typedef bool(__cdecl *IntersectSegment)(const IntersectQuery& Query, IntersectInfo *pInfo);
Posts 16–23 of 23 · Page 2 of 2

Post a Reply

Similar Threads

Tags for this Thread

Talk with us