Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //---------------------------------------------------------------------------
- #pragma hdrstop
- #include <Windows.h>
- #include <stdio.h>
- //---------------------------------------------------------------------------
- int getManaBarStatus()
- {
- return 1;
- }
- //////////////////////////////////////////////////////////////////////////
- #define ADDRESS LPVOID
- #define GADDRESS LPVOID
- GADDRESS g16FF24;
- GADDRESS g16FF68;
- GADDRESS a16FF64;
- GADDRESS a16FF5C;
- GADDRESS a16FF58;
- GADDRESS a16FF20;
- ADDRESS a16F088;
- GADDRESS a2C7F10;
- ADDRESS a16F08C;
- ADDRESS a16F004;
- ADDRESS a1698A0;
- ADDRESS a16F090;
- ADDRESS a16F06C;
- ADDRESS a16F070;
- ADDRESS a3000AC;
- ADDRESS a3000B0;
- DWORD temp,temp1,temp2,temp3;
- DWORD temp4;
- DWORD vartemp = 0x2D66EE1B;
- DWORD calltemp1;
- DWORD calltemp2;
- DWORD pushMana1;
- DWORD pushMana2;
- BYTE a16F008[0x80];
- char* a164684 = "scaleFactor";
- double a164A18 = 72;
- double a164A10 = 0.0005000000237487257;
- double a164A08 = 0.006000000052154064;
- double a1649D4 = 0.03000000;
- double a1649D0 = 0.004000000;
- double a1649CC = 0.3000000;
- int status = 1;
- void __declspec(naked) f00152750()
- {
- __asm
- {
- push ebx
- mov ebx, a16FF64
- push edi
- mov edi, a16FF5C
- push 0
- push 0
- push 0
- xor edx, edx
- mov ecx, esi
- call a16FF58
- fld a1649D4
- push 0
- fstp dword ptr [esi+0x58]
- xor edx, edx
- mov ecx, esi
- call edi
- fld a1649D0
- push 0
- fstp dword ptr [esi+0x5C]
- xor edx, edx
- mov ecx, esi
- call edi
- fld a1649CC
- push 1
- sub esp, 0x8
- fst dword ptr [esp+0x4]
- xor edx, edx
- fstp dword ptr [esp]
- push 1
- mov ecx, esi
- call ebx
- mov eax, dword ptr [esi]
- mov eax, dword ptr [eax+0x64]
- pop edi
- xor edx, edx
- mov ecx, esi
- pop ebx
- jmp eax
- }
- }
- void __declspec(naked) f001527C0()
- {
- __asm
- {
- pop a16F08C
- pop eax
- add eax, eax
- push eax
- call a16F088
- pushad
- mov a16F004, eax
- mov esi, a16F004
- add esi, 0x158
- call f00152750
- popad
- push a16F08C
- retn
- }
- }
- void __declspec(naked) f152950()
- {
- __asm
- {
- mov eax, a16F090
- mov eax, dword ptr [eax+0x64]
- push esi
- push edi
- mov esi, edx
- mov edi, ecx
- call eax
- mov eax, a16F090
- mov eax, dword ptr [eax+0x64]
- lea ecx, dword ptr [edi+0x158]
- pop edi
- mov edx, esi
- pop esi
- jmp eax
- }
- }
- void __declspec(naked) f152980()
- {
- __asm
- {
- mov eax, a16F090
- mov eax, dword ptr [eax+0x68]
- jmp eax
- }
- }
- void __declspec(naked) f00152710()
- {
- __asm
- {
- mov a16F090, ecx
- xor eax, eax
- jmp L004
- lea ebx, dword ptr [ebx]
- L004:
- mov dl, byte ptr [eax+ecx]
- mov byte ptr [eax+a16F008], dl
- inc eax
- cmp eax, 0x80
- jb L004
- push eax
- push ebx
- lea eax, a16F008
- add eax, 0x64
- lea ebx, f152950
- mov dword ptr [eax], ebx
- lea eax, a16F008
- add eax, 0x68
- lea ebx, f152980
- mov dword ptr [eax], ebx
- pop ebx
- pop eax
- retn
- }
- }
- void __declspec(naked) f001527F0()
- {
- __asm
- {
- sub esp, 0x10
- cmp a3000AC, 0
- push edi
- mov edi, a16F004
- je L093
- mov eax, dword ptr [edi+0x50]
- test eax, eax
- je L093
- cmp a3000B0, 0
- push ebx
- mov ebx, dword ptr [eax+0xC]
- push esi
- lea esi, dword ptr [ebx+0x158]
- jnz L017
- mov ecx, dword ptr [ebx]
- call f00152710
- mov a3000B0, 1
- L017:
- push 0
- lea eax, dword ptr [esp+0x10]
- push eax
- xor edx, edx
- mov ecx, edi
- push eax
- lea eax, a16F008
- mov dword ptr [ebx], eax
- pop eax
- call g16FF24
- fldz
- fcomp dword ptr [esp+0xC]
- fstsw ax
- test ah, 1
- je L091
- push 3
- lea ecx, dword ptr [esp+0x10]
- push ecx
- xor edx, edx
- mov ecx, edi
- call g16FF24
- fldz
- fcomp dword ptr [esp+0xC]
- fstsw ax
- test ah, 5
- jpe L091
- mov eax, dword ptr [esi]
- mov eax, dword ptr [eax+0x74]
- push ebp
- push edi
- xor edx, edx
- mov ecx, esi
- call eax
- mov ebx, a16FF64
- mov ebp, a16FF5C
- lea ecx, dword ptr [esp+0x1C]
- push ecx
- lea edx, dword ptr [esp+0x18]
- mov ecx, edi
- call g16FF68
- mov ecx, dword ptr [edi+0x30]
- mov eax, a16FF20
- lea edx, a164684
- call eax
- test eax, eax
- jnz L062
- fld1
- jmp L063
- L062:
- fld dword ptr [eax+0x54]
- L063:
- fstp dword ptr [esp+0x10]
- push 0
- fld dword ptr [esp+0x14]
- xor edx, edx
- fmul qword ptr [a164A18]
- mov ecx, esi
- fmul qword ptr [a164A10]
- fstp dword ptr [esi+0x58]
- call ebp
- fld dword ptr [esp+0x18]
- push 1
- fsub qword ptr [a164A08]
- sub esp, 8
- xor edx, edx
- mov ecx, esi
- fstp dword ptr [esp+0x24]
- fld dword ptr [esp+0x24]
- fstp dword ptr [esp+0x4]
- fld dword ptr [esp+0x20]
- fstp dword ptr [esp]
- push 1
- call ebx
- mov eax, dword ptr [esi]
- mov eax, dword ptr [eax+0x68]
- xor edx, edx
- mov ecx, esi
- call eax
- pop ebp
- L091:
- pop esi
- pop ebx
- L093:
- pop edi
- add esp, 0x10
- retn
- }
- }
- void __declspec(naked) call1mana()
- {
- __asm
- {
- SHR ECX,0x18
- CMP ECX,0x49
- JE L007
- CMP ECX,0x5A
- JG L007
- MOV EAX,1
- RETN
- L007:
- XOR EAX,EAX
- RETN
- }
- }
- void __declspec(naked) call2mana()
- {
- __asm
- {
- MOV EAX,DWORD PTR DS:[temp4]
- MOV ECX,DWORD PTR DS:[EAX]
- MOV EAX,DWORD PTR DS:[ECX+0x28]
- AND EAX,0x0F
- RETN
- }
- }
- void __declspec(naked) call3mana()
- {
- __asm
- {
- MOV EAX,DWORD PTR DS:[temp4]
- MOV EDX,DWORD PTR DS:[EAX]
- LEA EAX,DWORD PTR DS:[EDX+ECX*0x4+0x58]
- RETN
- }
- }
- void __declspec(naked) call4mana()
- {
- __asm
- {
- PUSH EBP
- MOV EBP,ESP
- PUSH -2
- MOV EAX,DWORD PTR FS:[0]
- PUSH EAX
- SUB ESP,0x10
- PUSH EBX
- PUSH ESI
- PUSH EDI
- MOV EAX,DWORD PTR DS:[vartemp] //2D66EE1B
- XOR DWORD PTR SS:[EBP-8],EAX
- XOR EAX,EBP
- PUSH EAX
- LEA EAX,DWORD PTR SS:[EBP-0x10]
- MOV DWORD PTR FS:[0],EAX
- MOV DWORD PTR SS:[EBP-0x18],ESP
- MOV DWORD PTR SS:[EBP-0x1C],EDX
- MOV DWORD PTR SS:[EBP-0x20],ECX
- MOV DWORD PTR SS:[EBP-4],0
- PUSH ESI
- MOV ECX,DWORD PTR SS:[EBP-0x20]
- MOV ESI,DWORD PTR SS:[EBP-0x1C]
- MOV ECX,DWORD PTR DS:[ECX]
- MOV ESI,DWORD PTR DS:[ESI]
- MOV EAX,ECX
- MOVZX ESI,BYTE PTR DS:[ESI+0x30]
- MOV ECX,EAX
- CALL DWORD PTR DS:[calltemp1] //6F41B420
- LEA ECX,DWORD PTR DS:[EAX+0x38]
- CALL DWORD PTR DS:[calltemp2] //6F473170
- MOV ECX,ESI
- MOV EDX,1
- SHL EDX,CL
- AND EAX,EDX
- NEG EAX
- SBB EAX,EAX
- INC EAX
- POP ESI
- MOV DWORD PTR SS:[EBP-4],-2
- MOV ECX,DWORD PTR SS:[EBP-0x10]
- MOV DWORD PTR FS:[0],ECX
- POP ECX
- POP EDI
- POP ESI
- POP EBX
- MOV ESP,EBP
- POP EBP
- RETN
- MOV EAX,1
- RETN
- MOV ESP,DWORD PTR SS:[EBP-0x18]
- MOV DWORD PTR SS:[EBP-4],-2
- XOR AL,AL
- MOV ECX,DWORD PTR SS:[EBP-0x10]
- MOV DWORD PTR FS:[0],ECX
- POP ECX
- POP EDI
- POP ESI
- POP EBX
- MOV ESP,EBP
- POP EBP
- RETN
- }
- }
- void __declspec(naked) f00152930()
- {
- __asm
- {
- pushad
- call getManaBarStatus
- mov status, eax
- popad
- pushad
- MOV ECX,DWORD PTR DS:[ECX+0x8]
- mov [a16F004], ecx
- MOV DWORD PTR DS:[temp3],ECX
- CMP DWORD PTR DS:[temp3],0
- JE L026
- MOV EAX,DWORD PTR DS:[temp3]
- MOV ECX,DWORD PTR DS:[EAX+0x30]
- CALL call1mana
- MOVZX ECX,AL
- TEST ECX,ECX
- JNZ L028
- L026:
- JMP L049
- L028:
- CALL call2mana
- MOV ECX,EAX
- CALL call3mana
- MOV ESI,EAX
- MOV EDX,DWORD PTR DS:[temp3]
- MOV ECX,DWORD PTR DS:[EDX+0x58]
- CALL call3mana
- MOV EDX,ESI
- MOV ECX,EAX
- CALL call4mana
- CMP BYTE PTR DS:[status],al
- Jnz L048
- MOV ECX,DWORD PTR DS:[a16F004]
- call f001527F0
- L048:
- cmp byte ptr ds:[status],2
- jnz L049
- MOV ECX,DWORD PTR DS:[a16F004]
- call f001527F0
- L049:
- POPAD
- RETN
- }
- }
- void __declspec(naked) manabar()
- {
- __asm
- {
- pushad
- call getManaBarStatus
- mov status, eax
- popad
- CMP BYTE PTR DS:[status],-1
- JE L016
- POP DWORD PTR DS:[temp]
- MOV DWORD PTR DS:[temp1],ECX
- MOV DWORD PTR DS:[temp2],EDX
- CALL f00152930
- MOV ECX,DWORD PTR DS:[temp1]
- MOV EDX,DWORD PTR DS:[temp2]
- PUSH DWORD PTR DS:[temp]
- L016:
- PUSH -1
- PUSH pushMana1
- PUSH pushMana2
- RETN
- }
- }
- ADDRESS a6F37A563;
- ADDRESS a6F37A968;
- void Hook(ADDRESS lpBase)
- {
- DWORD old;
- VirtualProtect(a6F37A563, 5, PAGE_EXECUTE_READWRITE, &old);
- VirtualProtect(a6F37A968, 5, PAGE_EXECUTE_READWRITE, &old);
- {
- unsigned char* p = reinterpret_cast<unsigned char*>(a6F37A563);
- *p = 0xe8;
- p += 5;
- int X = (int)f001527C0 - (int)p;
- p -= 5;
- *reinterpret_cast<DWORD*>(p+1) = X;
- }
- {
- unsigned char* p = reinterpret_cast<unsigned char*>(a6F37A968);
- *p = 0xe9;
- p += 5;
- *p = 0x90;
- *(p+1) = 0x90;
- int X = (int)manabar - (int)p;
- p -= 5;
- *reinterpret_cast<DWORD*>(p+1) = X;
- }
- }
- BOOL WINAPI InjectManabar(char version[], DWORD gameBase)
- {
- (int)&a3000AC = 1;
- HMODULE hMod = LoadLibraryA("storm.dll");
- a16F088 = (ADDRESS)GetProcAddress(hMod, (LPCSTR)0x191);
- a1698A0 = (void*)gameBase;
- if (strcmp(version, "1.24c") == 0) //falta
- {
- (int)&g16FF24 = (int)a1698A0 + 0x27B950; // 6f27B950
- (int)&g16FF68 = (int)a1698A0 + 0x334C00; // 6f334C00
- (int)&a16FF64 = (int)a1698A0 + 0x606860; // 6f606860
- (int)&a16FF5C = (int)a1698A0 + 0x606370; // 6f606370
- (int)&a16FF58 = (int)a1698A0 + 0x35A740; // 6f35A740
- (int)&a16FF20 = (int)a1698A0 + 0x32D300; // 6f32D300
- (int)&a2C7F10 = (int)a1698A0 + 0x2C7F10;
- (int)&a6F37A563 = (int)a1698A0 + 0x37A563;
- temp4 = gameBase + 0xACD44C;
- calltemp1 = gameBase + 0x41BEA0;
- calltemp2 = gameBase + 0x473BC0;
- pushMana1 = gameBase + 0x833DC0;
- pushMana2 = gameBase + 0x37C537;
- (int)&a6F37A968 = pushMana2-7
- }
- else if (strcmp(version, "1.24b") == 0)
- {
- (int)&g16FF24 = (int)a1698A0 + 0x27B950 ;
- (int)&g16FF68 = (int)a1698A0 + 0x334C00 ;
- (int)&a16FF64 = (int)a1698A0 + 0x6068A0 ;
- (int)&a16FF5C = (int)a1698A0 + 0x6063B0 ;
- (int)&a16FF58 = (int)a1698A0 + 0x35A740 ;
- (int)&a16FF20 = (int)a1698A0 + 0x32D300;
- (int)&a2C7F10 = (int)a1698A0 + 0x2C7F10;
- (int)&a6F37A563 = (int)a1698A0 + 0x37A563;
- temp4 = gameBase + 0xACD44C;
- calltemp1 = gameBase + 0x41BF90;
- calltemp2 = gameBase + 0x473C00;
- pushMana1 = gameBase + 0x833E00;
- pushMana2 = gameBase + 0x37C537;
- (int)&a6F37A968 = pushMana2-7 ;
- }
- else if (strcmp(version, "1.24d") == 0)
- {
- (int)&g16FF24 = (int)a1698A0 + 0x27B950 ;
- (int)&g16FF68 = (int)a1698A0 + 0x334C60 ;
- (int)&a16FF64 = (int)a1698A0 + 0x6068C0 ;
- (int)&a16FF5C = (int)a1698A0 + 0x6063D0 ;
- (int)&a16FF58 = (int)a1698A0 + 0x35A7A0 ;
- (int)&a16FF20 = (int)a1698A0 + 0x32D360 ;
- (int)&a2C7F10 = (int)a1698A0 + 0x2C7F70 ;
- (int)&a6F37A563 = (int)a1698A0 + 0x37A5C3 ;
- temp4 = gameBase + 0xACD44C;
- calltemp1 = gameBase + 0x41BF00;
- calltemp2 = gameBase + 0x473C20;
- pushMana1 = gameBase + 0x833E20;
- pushMana2 = gameBase + 0x37C597;
- (int)&a6F37A968 = pushMana2-7 ;
- }
- else if (strcmp(version, "1.24e") == 0)
- {
- (int)&g16FF24 = (int)a1698A0 + 0x27B9B0 ;
- (int)&g16FF68 = (int)a1698A0 + 0x334CC0 ;
- (int)&a16FF64 = (int)a1698A0 + 0x606950 ;
- (int)&a16FF5C = (int)a1698A0 + 0x606460 ;
- (int)&a16FF58 = (int)a1698A0 + 0x35A800 ;
- (int)&a16FF20 = (int)a1698A0 + 0x32D3C0 ;
- (int)&a2C7F10 = (int)a1698A0 + 0x2C7FD0 ;
- (int)&a6F37A563 = (int)a1698A0 + 0x37A623 ;
- temp4 = gameBase + 0xACD44C;
- calltemp1 = gameBase + 0x41BF60;
- calltemp2 = gameBase + 0x473C80;
- pushMana1 = gameBase + 0x833EC0;
- pushMana2 = gameBase + 0x37C5F7;
- (int)&a6F37A968 = pushMana2-7 ;
- }
- else if (strcmp(version, "1.25b") == 0)
- {
- (int)&g16FF24 = (int)a1698A0 + 0x27AC60 ;
- (int)&g16FF68 = (int)a1698A0 + 0x333F50 ;
- (int)&a16FF64 = (int)a1698A0 + 0x605F80 ;
- (int)&a16FF5C = (int)a1698A0 + 0x605A90 ;
- (int)&a16FF58 = (int)a1698A0 + 0x359A90 ;
- (int)&a16FF20 = (int)a1698A0 + 0x32C650 ;
- (int)&a2C7F10 = (int)a1698A0 + 0x2C7280 ;
- (int)&a6F37A563 = (int)a1698A0 + 0x3798B3 ;
- temp4 = gameBase + 0xAB65F4;
- calltemp1 = gameBase + 0x41B1F0;
- calltemp2 = gameBase + 0x472F40;
- pushMana1 = gameBase + 0x8213F0;
- pushMana2 = gameBase + 0x37B887;
- (int)&a6F37A968 = pushMana2-7 ;
- }
- else if (strcmp(version, "1.26a") == 0)
- {
- (int)&g16FF24 = (int)a1698A0 + 0x27AE90 ;
- (int)&g16FF68 = (int)a1698A0 + 0x334180 ;
- (int)&a16FF64 = (int)a1698A0 + 0x6061B0 ;
- (int)&a16FF5C = (int)a1698A0 + 0x605CC0 ;
- (int)&a16FF58 = (int)a1698A0 + 0x359CC0 ;
- (int)&a16FF20 = (int)a1698A0 + 0x32C880 ;
- (int)&a2C7F10 = (int)a1698A0 + 0x2C74B0 ;
- (int)&a6F37A563 = (int)a1698A0 + 0x379AE3 ;
- temp4 = gameBase + 0xAB65F4;
- calltemp1 = gameBase + 0x41B420;
- calltemp2 = gameBase + 0x473170;
- pushMana1 = gameBase + 0x821620;
- pushMana2 = gameBase + 0x37BAB7;
- (int)&a6F37A968 = pushMana2-7 ;
- }
- else
- {
- char text[100];
- sprintf(text, "Mana bars don't support this version of warcraft [%s] YET, we are working on it.", version);
- MessageBoxA(NULL, text, "error", MB_OK);
- return FALSE;
- }
- Hook(a1698A0);
- return TRUE;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement