Pesquisar na Comunidade
Mostrando resultados para as tags ''Hook''.
Encontrado 29 registros
-
Pro pessoal que estava a procura disso, ai está .. * O Modo de tratar o NPC é o mesmo que os outros .. [Hidden Content]
- 11 respostas
-
- 160
-
-
-
-
Olá pessoal, nunca postei algo útil para a comunidade, então deixo esse hook onde os créditos são somente meus, tirando a parte da função que converte hostname para ip que não lembro de onde peguei, acho que foi de um emu do Ragnarok, mais enfim segue. Esse hook é para fazer o cliente reconhecer DNS no serverlist, isso é muito útil para aqueles que querem abrir servidor do próprio PC sem ter o IP fixo pois podem utilizar como exemplo o NO-IP como dns, entre vários outros, lembre que além de colocar esse hook vocês devem liberar a porta no firewall e no modem. #include <iostream> #include <winsock.h> #pragma comment(lib, "Ws2_32.lib") int hostname_to_ip(char * hostname, char* ip) { struct hostent *he; struct in_addr **addr_list; int i; if ((he = gethostbyname(hostname)) == NULL) { return 1; } addr_list = (struct in_addr **) he->h_addr_list; for (i = 0; addr_list[i] != NULL; i++) { strcpy(ip, inet_ntoa(*addr_list[i])); return 0; } return 1; } void ConvertDNStoIP() { DWORD ip[256]; for (int i = 0; i < 110; i++) { char * Valor = (char*)(0x011D8CB8 + (64 * i)); if (!memcmp(Valor, "http:/", 6)) { /*LogLine("\n"); LogLine("HTTP Encontrado "); LogLine(Valor);*/ } else { if (memcmp(Valor, "", 1)) { hostname_to_ip(Valor, (char*)ip); memset(Valor, 0x00, strlen(Valor)); memcpy(Valor, (char*)ip, strlen((char*)ip)); } } } } DWORD dwBackFix6 = 0x0053A3B5; __declspec(naked) void Fix6() { ConvertDNStoIP(); __asm { MOV DWORD PTR SS : [EBP - 0x8], 1 MOV DWORD PTR SS : [EBP - 0x4], 0 JMP[dwBackFix6] } } //Esse é o Hook para chamar a função PlaceJMP((BYTE*)0x0053A3A7, (DWORD)Fix6, 12); Então é isso, espero que a comunidade faça bom uso. Abraço a todos.
- 7 respostas
-
- 75
-
-
-
-
-
-
-
- hook cliente
- 7662
-
(e 3 mais)
Tags:
-
Hook adiciona novos pots ao macro, isso inclui a Poção Poderosa. [Hidden Content]
-
- 61
-
-
-
-
Esse hook permite que o BM utilize traje mesmo transformado. [Hidden Content]
-
- 67
-
-
-
Esse hook permite utilizar itens no inventario. Exemplo: Usar âmagos encima das montarias no inventario invés de levar o amago até o equip. [Hidden Content]
-
- 58
-
-
-
Hook permite o cliente reconhecer as capas novas em novos ids. [Hidden Content]
- 2 respostas
-
- 59
-
-
-
Salve, Uma das primeiras coisas que fui atrás, quando estava fuçando sobre ASM, foi aprender como alterar a resolução do WYD. Este hook altera todas as resoluções, tamanhos das fontes e deixa tudo em 32bits. Estou compartilhando aqui com vocês agora: [Hidden Content] Créditos: Inspirado no WYD2.0 SeiTbNao, por me ajudar no inicio a transformar hook direto do ollydbg para hook cpp. E claro, Eu XD
- 40 respostas
-
- 310
-
-
-
-
Antes de tudo, antes de começar, você deve saber alguma coisa. Pré-requisitos: - C++ (obviamente) 😎 - O que é um Hook e como usá-lo. ( A Wikipedia é nossa amiga. ) - Pare o C&P e entenda este tutorial Antes de começar na parte de codificação, você deve saber que o Unreal Engine 3 é baseado quase no ProcessEvent. Todas as funções do jogo passam pelo ProcessEvent (que é outra função) que executa todas as funções dentro do jogo. Então, nosso objetivo de hackear é conectar este ProcessEvent e usar um ProcessEvent Func modificado, para que possamos ver TODAS as funções que passam por ele e usá-las a nosso favor. Podemos usar muitos métodos de hooking... do JMP Hook ao IAT Hook... Sugiro que você comece com Detour (já que o JMP Hook é detectado por quase todos os AntiCheats) Para começar, você deve criar uma DLL vazia projeto em C++. Depois de fazer isso, você deve incluir apenas os cabeçalhos do SDK completos no projeto. (C/C++ -> Geral -> Diretório de inclusões adicionais) Depois de ter feito isso, você pode começar a codificar seu cheat. Então crie um Main.cpp E comece a incluir todos os cabeçalhos necessários e inclua também apenas o PRIMEIRO cabeçalho do SDK (SdkHeader.h) que inclui automaticamente todos os outros cabeçalhos do SDK. Como isso: Agora que você fez isso, você obviamente deve criar o DllMain que iniciará a dll no jogo. Assim: Agora você pode iniciar a parte Hooking de ProcessEvent dentro de OnAttach(). Antes de iniciar o hooking você deve saber o endereço do ProcessEvent, que está contido dentro do SDK em algum lugar... Normalmente está dentro do Core_Classess.h, no meio de VirtualFunctions de UObjects (comentado à direita)... o endereço e comece a definir seu ProcessEvent globalmente (fora do OnAttach) assim: Onde 0xXXXXXX é o endereço do seu ProcessEvent. Depois de definir seu ProcessEvent, você pode iniciar a parte do hooking, então volte na função OnAttach e use o detour para iniciar o hooking assim: (estou usando o Detour da Microsoft neste exemplo) Como você pode ver, usamos "HookedPE" dentro da função DetourAttach... É nossa função hooked que substituiremos para o ProcessEvent original, então devemos começar a codificar a função HookedPE.... Então vamos começar: a função de ProcessEvent de O Unreal Engine 3 SEMPRE tem estes 4 argumentos: - UObject *pObject (este é o objeto da função que é passado pelo PE original) - UFunction *pFunction (esta é a função passada pelo PE original) - void *pParms (este é o parâmetros da função) - void *pResult (este é o resultado da função) Então apenas defina nossa função hooked como esta: Como você pode ver, passamos também um void *edx porque ele é gerado por nossa chamada ( __fastcall ) que salva dados na memória, então quando chamamos novamente o ProcessEvent original (no final do nosso PE ligado) passamos apenas o principal quatro argumentos. Agora o gancho está feito. Basta começar a implementar e usar nosso SDK. Antes de tudo, devemos encontrar todas as Functions Name porque precisamos da função de PostRender (isso existe em todos os jogos). Quando encontrarmos o nome da nossa função PostRender, podemos pegar seus parâmetros e usar o parâmetro UCanvas* para desenhar dentro do jogo 😉 Então vamos fazer algo assim: Agora é só compilar isso e injetar no seu jogo (enquanto estiver no lobby ou jogando). Vamos executar a dll por 10-15 segundos e depois feche o jogo. Vá em sua área de trabalho e abra Functions.txt também com o bloco de notas e procure por: E você encontrará a função Engine do PostRender ... no meu caso é: (Esta função é igual em quase todos os jogos) Agora vá no seu HookedPE e delete a parte de impressão da função e podemos começar a filtrar todas as funções para selecionar apenas a nossa função necessária (PostRender)... Então vamos usar strcmp para fazer isso... Agora vá em "Engine_functions.h" e procure por "Function Engine.GameViewportClient.PostRender" e você encontrará algo assim: Como você pode ver, o único parâmetro desta função é UCanvas* que podemos pegar de dentro da estrutura "UGameViewportClient_eventPostRender_Parms" definida como abaixo: Portanto, devemos antes de todas as outras coisas definir uma nova função em nossa dll, então vamos escrevê-la: Em nossa função PostRender passamos o argumento UCanvas* que vamos pegar da função passada pelo nosso HookedPE. Então agora é só voltar no seu HookedPE e adicionar isto: E agora fizemos .... para testar nosso hack, vá em PostRender func e adicione isto: Agora compile sua Dll e injete no jogo... espere alguns segundos e você verá a string "Tutorial by dano20zoo" no canto superior esquerdo da tela. Este é o código completo se você não entendeu alguma coisa: Isso é apenas para entender como o SDK funciona! Se você quiser algum código fonte do Aimbot, Wallhack etc, esta seção do fórum está CHEIA de exemplos de código... Basta ligar PlayerController (no ProcessEvent) e usá-lo para fazer quaisquer outros hacks. Isso é tudo. Feliz hacking pessoal! Créditos: dano20zoo
- 1 resposta
-
- 32
-
-
-
hook Modificações nos atributos das montarias 759
NadaMal- postou um tópico no fórum em WYD - Desenvolvimento
/* Modificações nos atributos das montarias.*/ JMP_NEAR(0x005384D9, HookNaked::NKD_GetItemAbility_Montarias, 3); __declspec(naked) void HookNaked::NKD_GetItemAbility_Montarias() { static const DWORD dwContinue[2] = { 0x005384E1, 0x005388BF }; __asm { MOV EAX, DWORD PTR SS : [EBP + 0Ch] AND EAX, 0FFh PUSH EAX PUSH DWORD PTR SS : [EBP + 08h] CALL HKD_GetItemAbility_Montarias ADD ESP, 08h TEST EAX, EAX JE lbl_continue JMP dwContinue + 04h lbl_continue : MOV EAX, DWORD PTR SS : [EBP + 0Ch] AND EAX, 0FFh JMP dwContinue } } INT32 HKD_GetItemAbility_Montarias(STRUCT_ITEM* item, INT32 effectId) { if (item->sIndex == 2381) { switch (effectId) { case EF_DAMAGE: return 50; case EF_RESISTALL: return 72; } } return 0; }- 1 resposta
-
- 46
-
-
-
-
O hook muda a cor, posição ... WYD.SetHook(eHookType::JMP, 0x4DA26F, WYD.GetPtr(&NKD_Create_Scene_World_MobTarget), 2); __declspec(naked) void HookNaked::NKD_Create_Scene_World_MobTarget() { static int jmp_saida = 0x4DA2AB; static int call_CreateProgress = 0x404D20; _asm { // sprite, curr, max, X, Y, Width, Height, color, backcolor, 1); PUSH 1 PUSH 0x40333333 PUSH 0x0FF800000 PUSH 0x41900000 PUSH 0x43480000 MOV EAX, 0x428c0000 PUSH EAX //y PUSH 0x428c0000 //x PUSH 0 //max PUSH 0x1E //curr PUSH - 2 //sprite MOV ECX, DWORD PTR SS : [EBP - 0x60] CALL call_CreateProgress MOV DWORD PTR SS : [EBP - 0x98], EAX JMP jmp_saida } }
- 2 respostas
-
- 43
-
-
-
WYD.SetHook(eHookType::JMP, 0x40D7E9, WYD.GetPtr(&HookNaked::NKD_AddItemSanc), 4); WYD.SetHook(eHookType::JMP, 0x40D832, 0x40D84D, 4); declspec(naked) void HookNaked::NKD_AddItemSanc() { __asm { MOV ECX, DWORD PTR SS : [EBP - 0x24] ADD ECX, 0xAC PUSH ECX MOV EDX, DWORD PTR SS : [EBP + 0xC] PUSH EDX CALL AddItemSanc PUSH 0x40D7F5 RETN } } int32_t AddItemSanc(STRUCT_ITEM* item, char* str) { if (item->sIndex == 413) sprintf(str, "Teste"); return 1; return 0; }
- 6 respostas
-
- 20
-
-
-
Salve, Como muitos gostam de tirar uns prints bem bonitos sem a HUD do WYD, Eu fui atrás e fiquei estudando a DLL de vários clients 7.56 e extraí todo o hook de colocar o client em modo foto. [Hidden Content] Créditos: DLL dos clients 7.56: DoN e WYD2.0
- 7 respostas
-
- 115
-
-
-
Esse hook tem como função adicionar lugares em que o GreenTime vai funcionar. Para quem não sabe, poucos lugares do jogo tem o GreeenTime funcionando. JMP_NEAR(0x0047D3D5, NKD_GreenTime_NewArea, 1); __declspec(naked) void NKD_GreenTime_NewArea() { __asm { MOV EDX,DWORD PTR SS:[EBP - 07B8h] MOV EAX,DWORD PTR DS:[EDX + 040h] PUSH DWORD PTR DS:[EAX + 020A24h] MOV EDX,DWORD PTR SS:[EBP - 07B8h] MOV EAX,DWORD PTR DS:[EDX + 040h] PUSH DWORD PTR DS:[EAX + 020A20h] CALL HKD_GreenTime_NewArea ADD ESP,08h TEST EAX,EAX JE lbl_retn MOV EAX,0047D625h JMP EAX lbl_retn: MOV EAX,0047D3FDh JMP EAX } } Basta adicionar a divisão do mapa que você deseja ter o tempo verde. Caso queira em QUALQUER LUGAR, apenas ponha return 1 na função. INT32 HKD_GreenTime_NewArea(INT32 posX, INT32 posY) { if(posX == 2 && posY == 4) return 1; if(posX == 1 && posY == 31) return 1; if(posX == 20 && posY == 13) return 1; if(posX == 13 && posY == 16) return 1; return 0; } Créditos: shepher
- 27 respostas
-
- 27
-
-
//GreeenTime hooks.setHook(eHookType::JMP, 0x0047DACA, hooks.getAddress(&NKD_GreenTime_NewArea), 1); __declspec(naked) void NKD_GreenTime_NewArea() { __asm { MOV EDX, DWORD PTR SS : [EBP - 07B8h] MOV EAX, DWORD PTR DS : [EDX + 040h] PUSH DWORD PTR DS : [EAX + 020A24h] MOV EDX, DWORD PTR SS : [EBP - 07B8h] MOV EAX, DWORD PTR DS : [EDX + 040h] PUSH DWORD PTR DS : [EAX + 020A20h] CALL HKD_GreenTime_NewArea ADD ESP, 08h TEST EAX, EAX JE lbl_retn MOV EAX, 0047DD1Ah JMP EAX lbl_retn : MOV EAX, 0047DAF2h JMP EAX } } //Basta adicionar a divisão do mapa que você deseja ter o tempo verde. Caso queira em QUALQUER LUGAR, apenas ponha return 1 na função. INT32 HKD_GreenTime_NewArea(INT32 posX, INT32 posY) { /*if (posX == 2 && posY == 4) return 1; if (posX == 1 && posY == 31) return 1; if (posX == 20 && posY == 13) return 1; if (posX == 13 && posY == 16) return 1;*/ return 1; } Créditos: shepher Ethan atualizei os addrs pra versão que todos usam.
- 17 respostas
-
- 14
-
-
-
hook Hook para mudar dano das montarias.
Sc2ALLin postou um tópico no fórum em WYD - Desenvolvimento
Bom a há um tempo foi postado esse hook aqui mesmo, mais o conteúdo se perdeu (eu acho) então estou disponibilizando novamente. Não sei quem é o autor do código então os créditos são dele. [Hidden Content]- 4 respostas
-
- 60
-
-
-
-
Acredito que esse comando ira ajudar muitos servidores aqui deixo minha colaboração if (!strcmp(packet->Cmd, "quest")) { if (Func::GetPlayerClass(client) == Mortal && mob->Mob.BaseStatus.Level >= 320) { SendClientMessage(client, "Bem Vindo a Quest Elfos!"); DoTeleport(client, 1300, 4036, 0); return true; } if (Func::GetPlayerClass(client) == Mortal && mob->Mob.BaseStatus.Level >= 265) { SendClientMessage(client, "Bem Vindo a Quest Hidra!"); DoTeleport(client, 668, 3769, 0); return true; } if (Func::GetPlayerClass(client) == Mortal && mob->Mob.BaseStatus.Level >= 190) { SendClientMessage(client, "Bem Vindo a Quest Kaizen!"); DoTeleport(client, 454, 3910, 0); return true; } if (Func::GetPlayerClass(client) == Mortal && mob->Mob.BaseStatus.Level >= 115) { SendClientMessage(client, "Bem Vindo a Quest Jardim de Deus!"); DoTeleport(client, 2224, 1712, 0); return true; } if (Func::GetPlayerClass(client) == Mortal && mob->Mob.BaseStatus.Level >= 39) { SendClientMessage(client, "Bem Vindo a Quest do Coveiro!"); DoTeleport(client, 2371, 2101, 0); return true; } } .
-
Ola Pessoal Venho disponibilizar um comando muito bom para vocês para pegar cidadão em qualquer lugar. #pragma region cidadania if (!strcmp(packet->Cmd, "cidadao")) { if (mob->Mob.Equip[0].Effect[2].Value == 0 && mob->Mob.Gold >= 2000000) // Colocar Cidadania { mob->Mob.Equip[0].Effect[2].Value = 1; mob->Mob.Gold -= 2000000; SendEtc(client); Language::instance().getString(KibitaRegister); SendClientMessage(client, "Parabéns Você se registrou em nosso canal."); return true; } } #pragma endregion
-
Bom dia, eu acho que foi o Fernando que postou esse hook há um tempo ai... esse que tenho aqui está faltando uma parte que seria responsável pelo sumiço vamos dizer assim do item quando chega-se no tempo dele. então vamos lá. [Hidden Content]
- 2 respostas
-
- 60
-
-
7.60+ Descrição do item + Tab colorido 76xx
Ethan taves postou um tópico no fórum em WYD - Desenvolvimento
hooks.setHook(eHookType::JMP, 0x41C468, hooks.getAddress(&NKD_FixItemDescription), 4); __declspec(naked) void NKD_FixItemDescription() { static COLORREF line1Color = 0, line2Color = 0, line3Color = 0, line4Color = 0, line5Color = 0, line6Color = 0, line7Color = 0, line8Color = 0, line9Color = 0, line10Color = 0; static int32_t lineCounter = 0, index = 0; static char line2[128] = { 0 }, line3[128] = { 0 }, line4[128] {0, }, line5[128] = { 0 }, line6[128] = { 0 }, line7[128] {0, }, line8[128] = { 0 }, line9[128] = { 0 }, line10[128] {0, }; __asm { LEA EAX, line10Color PUSH EAX LEA EAX, line9Color PUSH EAX LEA EAX, line8Color PUSH EAX LEA EAX, line7Color PUSH EAX LEA EAX, line6Color PUSH EAX LEA EAX, line5Color PUSH EAX LEA EAX, line4Color PUSH EAX LEA EAX, line3Color PUSH EAX LEA EAX, line2Color PUSH EAX LEA EAX, line1Color PUSH EAX LEA ECX, line10 PUSH ECX LEA ECX, line9 PUSH ECX LEA ECX, line8 PUSH ECX LEA ECX, line7 PUSH ECX LEA ECX, line6 PUSH ECX LEA ECX, line5 PUSH ECX LEA ECX, line4 PUSH ECX LEA ECX, line3 PUSH ECX LEA ECX, line2 PUSH ECX LEA EDX, DWORD PTR SS : [EBP - 0xAC] PUSH EDX MOV ECX, DWORD PTR SS : [EBP - 0x8] MOV EDX, DWORD PTR DS : [ECX + 0x670] PUSH EDX CALL AddItemDescription TEST EAX, EAX JE lblContinueExec MOV lineCounter, EAX MOV index, 0 JMP LoopStart LoopEnd : MOV EAX, index ADD EAX, 1 MOV index, EAX LoopStart : MOV EAX, index CMP EAX, lineCounter JGE lblContinueExec PUSH 0 CMP index, 0 JG lblLine2 LEA ECX, DWORD PTR SS : [EBP - 0xAC] PUSH ECX JMP lblContinuePush lblLine2 : CMP index, 1 JG lblLine3 LEA ECX, line2 PUSH ECX JMP lblContinuePush lblLine3 : CMP index, 2 JG lblLine4 LEA ECX, line3 PUSH ECX JMP lblContinuePush lblLine4 : CMP index, 3 JG lblLine5 LEA ECX, line4 PUSH ECX JMP lblContinuePush lblLine5 : CMP index, 4 JG lblLine6 LEA ECX, line5 PUSH ECX JMP lblContinuePush lblLine6 : CMP index, 5 JG lblLine7 LEA ECX, line6 PUSH ECX JMP lblContinuePush lblLine7 : CMP index, 6 JG lblLine8 LEA ECX, line7 PUSH ECX JMP lblContinuePush lblLine8 : CMP index, 7 JG lblLine9 LEA ECX, line8 PUSH ECX JMP lblContinuePush lblLine9 : CMP index, 8 JG lblLine10 LEA ECX, line9 PUSH ECX JMP lblContinuePush lblLine10 : CMP index, 9 JG lblEmptyLine LEA ECX, line10 PUSH ECX JMP lblContinuePush lblEmptyLine : PUSH 0 JMP lblContinuePush lblContinuePush : MOV EDX, DWORD PTR SS : [EBP - 0x28] MOV EAX, DWORD PTR SS : [EBP - 0x10] MOV ECX, DWORD PTR DS : [EAX + EDX * 4 + 0x27A10] MOV EDX, DWORD PTR SS : [EBP - 0x28] MOV EAX, DWORD PTR SS : [EBP - 0x10] MOV EDX, DWORD PTR DS : [EAX + EDX * 4 + 0x27A10] MOV EAX, DWORD PTR DS : [EDX] CALL DWORD PTR DS : [EAX + 0x80] CMP index, 0 JG lblColorLine2 PUSH line1Color JMP lblContinueFuncCall lblColorLine2 : CMP index, 1 JG lblColorLine3 PUSH line2Color JMP lblContinueFuncCall lblColorLine3 : CMP index, 2 JG lblColorLine4 PUSH line3Color JMP lblContinueFuncCall lblColorLine4 : CMP index, 3 JG lblColorLine5 PUSH line4Color JMP lblContinueFuncCall lblColorLine5 : CMP index, 4 JG lblColorLine6 PUSH line5Color JMP lblContinueFuncCall lblColorLine6 : CMP index, 5 JG lblColorLine7 PUSH line6Color JMP lblContinueFuncCall lblColorLine7 : CMP index, 6 JG lblColorLine8 PUSH line7Color JMP lblContinueFuncCall lblColorLine8 : CMP index, 7 JG lblColorLine9 PUSH line8Color JMP lblContinueFuncCall lblColorLine9 : CMP index, 8 JG lblColorLine10 PUSH line9Color JMP lblContinueFuncCall lblColorLine10 : CMP index, 9 JG lblNoColor PUSH line10Color JMP lblContinueFuncCall lblNoColor : PUSH 0 JMP lblContinueFuncCall lblContinueFuncCall : MOV EDX, DWORD PTR SS : [EBP - 0x28] MOV EAX, DWORD PTR SS : [EBP - 0x10] MOV ECX, DWORD PTR DS : [EAX + EDX * 4 + 0x27A10] MOV EDX, DWORD PTR SS : [EBP - 0x28] MOV EAX, DWORD PTR SS : [EBP - 0x10] MOV EDX, DWORD PTR DS : [EAX + EDX * 4 + 0x27A10] MOV EAX, DWORD PTR DS : [EDX] CALL DWORD PTR DS : [EAX + 0x84] MOV ECX, DWORD PTR SS : [EBP - 0x28] ADD ECX, 0x1 MOV DWORD PTR SS : [EBP - 0x28], ECX JMP LoopEnd lblContinueExec : MOV EDX, DWORD PTR SS : [EBP - 0x8] MOV EAX, DWORD PTR DS : [EDX + 0x670] PUSH 0x41C471 RETN } } Tab Colorido *(int*)(0x4E21DC) = 0xFFFFA500;//Coloque a cor aqui Créditos: Criadores da mystical Ethan atualizei os addrs pra versão que todos usam.- 14 respostas
-
- 19
-
-
Insere casas decimais nas lojas tanto autovenda quanto de NPCs. Serve para o cliente do LoK, qualquer coisa, ache o address correspondente no seu cliente. Geralmente não muda muita coisa de uma versão pra outra caso não use o mesmo exe. JMP_NEAR(0x041CC7D, NKD_ItemPrice_FormatDecimal_02, 1); JMP_NEAR(0x041CE40, NKD_ItemPrice_FormatDecimal_03, 1); JMP_NEAR(0x0420F4B, NKD_ItemPrice_FormatDecimal); void HKD_ItemPrice_FormatDecimal_AutoTrade(char *gold, int value) { if(value <= 1000) { sprintf(gold, "Item em modo demonstração"); return; } char st[32]; char result[32]; memset(result, 0, sizeof result); itoa(value, st, 10); int len = strlen(st); int sum = ((len - 1) / 3); for(int i = (len - 1), count = 0, index = (len - 1) + sum; i >= 0; i--, count++) { if(!(count % 3) && count != 0) { result[index] = ','; index--; } result[index] = st[i]; count++; index--; } sprintf(gold, "%s Gold", result); } void HKD_ItemPrice_FormatDecimal_02(char *pointer, int gold) { char st[32]; char result[32]; memset(result, 0, sizeof result); itoa(gold, st, 10); int len = strlen(st); int sum = ((len - 1) / 3); for(int i = (len - 1), count = 0, index = (len - 1) + sum; i >= 0; i--, count++) { if(!(count % 3) && count != 0) { result[index] = ','; index--; } result[index] = st[i]; count++; index--; } sprintf(pointer, "Preço: %s", result); } void HKD_ItemPrice_FormatDecimal_03(char *pointer, int gold) { char st[32]; char result[32]; memset(result, 0, sizeof result); itoa(gold, st, 10); int len = strlen(st); int sum = ((len - 1) / 3); for(int i = (len - 1), count = 0, index = (len - 1) + sum; i >= 0; i--, count++) { if(!(count % 3) && count != 0) { result[index] = ','; index--; } result[index] = st[i]; count++; index--; } sprintf(pointer, "Preço de venda: %s", result); } __declspec(naked) void NKD_ItemPrice_FormatDecimal_03() { __asm { MOV EDX,DWORD PTR SS:[EBP - 011D0h] PUSH EDX LEA EAX,DWORD PTR SS:[EBP - 01254h] PUSH EAX CALL HKD_ItemPrice_FormatDecimal_03 ADD ESP, 08h MOV EAX, 0x041CE5B JMP EAX } } __declspec(naked) void NKD_ItemPrice_FormatDecimal_02() { static int retn = 0; __asm { MOV EDX,DWORD PTR SS:[EBP - 01130h] ADD EDX,EAX PUSH EDX LEA EAX,DWORD PTR SS:[EBP - 011B0h] PUSH EAX CALL HKD_ItemPrice_FormatDecimal_02 ADD ESP,08h MOV EAX, 0x041CC9A JMP EAX } } __declspec(naked) void NKD_ItemPrice_FormatDecimal() { __asm { MOV EAX,DWORD PTR SS:[EBP - 08Ch] MOV ECX,DWORD PTR DS:[EAX + 058Ch] PUSH ECX MOV EAX, DWORD PTR SS:[EBP + 08h] PUSH EAX CALL HKD_ItemPrice_FormatDecimal_AutoTrade ADD ESP,08h MOV EAX, 0420FCFh JMP EAX } } Dica: crie uma rotina que faça a formatação do número para evitar a repetição de códigos. Como por exemplo uma função chamada void NumberFormat(char *); Créditos: shepher
- 2 respostas
-
- 13
-
-
hook Autotrade - Item em Modo Demonstrativo
bitou postou um tópico no fórum em WYD - Desenvolvimento
Estou estudando muitas dlls de clients antigos e novos 7556. Aprendendo sobre hooks etc. Uma das coisas que me interessou foi os itens de venda em modo Demonstrativo, segue o hook para 7556: Hookpatch.cpp: ------- hooks.setHook(eHookType::JMP, 0x424F19, hooks.getAddress(&HookPatch::NKD_ItemPriceAutoTrade)); ------- __declspec(naked) void HookPatch::NKD_ItemPriceAutoTrade() { __asm { MOV EAX, DWORD PTR SS : [EBP - 04h] CMP EAX, 03E8h JE lblChangeValue LEA EAX, DWORD PTR SS : [EBP - 0110h] PUSH EAX PUSH 05E563Ch MOV ECX, DWORD PTR SS : [EBP + 08h] PUSH ECX MOV EAX, 05B7E64h CALL EAX ADD ESP, 00Ch JE lblContinue lblChangeValue: LEA EAX, DWORD PTR SS : [EBP - 0110h] PUSH EAX MOV ECX, DWORD PTR DS : [EBP - 04h] PUSH ECX CALL Func::SetItemPriceAutoTrade LEA EAX, DWORD PTR SS : [EBP - 0110h] PUSH EAX PUSH 05E563Ch MOV ECX, DWORD PTR SS : [EBP + 08h] PUSH ECX MOV EAX, 05B7E64h CALL EAX ADD ESP, 00Ch lblContinue: PUSH 0424F31h RETN } } ------------- Functions: .h: static void __stdcall SetItemPriceAutoTrade(int gold, char *pointer); .cpp: void Func::SetItemPriceAutoTrade(int gold, char *pointer) { if (gold <= 1000) { sprintf(pointer, "Valor demonstrativo: %d", gold); } } Para completar o hook, você deve tratar o packet 0x398 e fazer uma checagem do valor do produto, segue exemplo: /* Deve inserir o tratamento do packet no ReadClientMessage da sua source TMSRV. */ switch (header->PacketId) { case 0x398: return AutoTrade::RequestBuyItem(client, (p398h*)header); break; } /* Exemplo de Tratamento do packet */ bool AutoTrade::RequestBuyItem(const uint16_t client, p398h* packet) { if (packet->Price <= 1000) { NativeFunctions::sendClientMessage(client, "Item em modo Demonstrativo."); return false; } } Créditos: WYD 2.0 Shepher (Comecei este hook estudando boa parte no hook "Casas Decimais" que o mesmo postou para 761.)- 3 respostas
-
- 17
-
-
-
.cpp int HKD_TabColor(char* msg) { int color = 0xFFCCCCCC; if (!strcmp(msg, "Vendedor")) color = 0xCD6600; return color; } hook patch JMP_NEAR(0x04E21DB, HookNaked::NKD_TabColor); __declspec(naked) void NKD_TabColor() { __asm { MOV EDX, DWORD PTR SS : [EBP - 0x1B4] ADD EDX, 0x100 PUSH EDX CALL HKD_TabColor ADD ESP, 04h PUSH EAX MOV EDX, 0x04E21E0 JMP EDX } }
- 3 respostas
-
- 14
-
-
Quero compartilhar um hook simples que foi atualizado da mystical há muito tempo. Em Geral auto explicativo. [Hidden Content] Créditos dos criadores da mytical eu por att os adrrs, sugestão de hooks criados pra atualizar ? Basta me chamar no discord acesse : Discord
- 13 respostas
-
- 86
-
-
-
-
-
Olá muitos donos de servidores me pedem esse hooks na versão 759(760) decidir postar ! [Hidden Content] Créditos aos criadores SOD ou Nix não sei ao certo, eu por atualizar os addrs se tiver alguém souber os verdadeiros criadores eu coloco os créditos. Porta usada no hook 700 no caso de alguém não entender.
-
- 84
-
-
-
-
Vieram me pedir o hook e como eu tinha atualizado os addrs de quando o shepher tinha postado, e agora estarei postando aqui, créditos totalmente a ele, eu apenas passei pro executável da W2PP, como o código foi perdido, estarei passando novamente. Onde colocar? Na dll de vocês... JMP_NEAR(0x045488D, NKD_KeyPress_NewButton, 1); __declspec(naked) void NKD_KeyPress_NewButton() { __asm { CMP EAX, 01h JE lbl_end XOR EAX, EAX MOV AL, BYTE PTR SS : [EBP + 08h] PUSH EAX CALL HKD_KeyPress_NewButton TEST EAX, EAX JE lbl_xor MOV EAX, 01h JMP lbl_end lbl_xor : XOR EAX, EAX lbl_end : MOV ESP, EBP POP EBP RETN 08h } } INT32 HKD_KeyPress_NewButton(BYTE button) { if (button == 'b' || button == 'B') { // coloque sua função aqui dentro return 1; } // retorne 0 para o WYD continuar manipulando return 0; }
- 1 resposta
-
- 14
-
-
