All pastes #553848 Raw Edit

Sna4x8

public cpp v1 · immutable
·published 2007-06-09 22:26 UTC
rendered paste body
// diablo_1.2.cpp : Defines the entry point for the DLL application.//#include "stdafx.h"#include "stdio.h"#include "stdlib.h"#include "string.h"#include "diablo.h"#ifdef _MANAGED#pragma managed(push, off)#endifDWORD WINAPI InitializeVariables();int GetChat();int MyCamera(int intPlayerNumber);int MyEnum();int MyGodMode();int MyMap();int MyMax();int MySpell(int intSpellID, int intSpellLevel);int MyVitality(int intVitalityBase, int intVitalityMax);int MyWarp(int intX, int intY);Me Me;  //my struct in diablo.h so i can say Me.SomeStat =BOOL APIENTRY DllMain( HMODULE hModule,                       DWORD  ul_reason_for_call,                       LPVOID lpReserved					 ){    HANDLE hndDllHandle;	if (ul_reason_for_call == DLL_PROCESS_ATTACH) {		CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)InitializeVariables, 			NULL, 0, (LPDWORD)&hndDllHandle);		CloseHandle(hndDllHandle);		return TRUE;	}	else	{		return TRUE;	}}int GetChat(){	char chrArg0[70]; //the buffer is 69bytes	char chrArg1[70];	char chrArg2[70];	char chrArg3[70];	char chrArg4[70];	char chrBuffer[70];	HANDLE hndMyCamera = NULL;	HANDLE hndMyEnum = NULL;	HANDLE hndUnload;	int intArgIndex;	int intBufferIndex;	int intExitCode;	BYTE *bytChatBase = (BYTE *)0x4B87AD;	BYTE *bytChatCommandStart = (BYTE *)0x4B87AD;	BYTE *bytChatOpen = (BYTE *)0x4B8960;	//126 is a ~ character.  a command can't start with ~	*bytChatCommandStart = 126;	while(1) {		intArgIndex = 0;		//only room for 5 args, chat is closed, and doesn't start with ~(126)		while (intArgIndex < 5 && *bytChatOpen == 0 && *bytChatCommandStart != 126) {			intBufferIndex = 0;			//32 is a space character			while (*bytChatBase != 0 && *bytChatBase != 32) {				chrBuffer[intBufferIndex] = (char)*bytChatBase;				intBufferIndex++;				(BYTE *)bytChatBase = (BYTE *)bytChatBase+1;			}			chrBuffer[intBufferIndex] = 0;			if (chrBuffer[0] != 0 && chrBuffer[0] != 32) {				if (intArgIndex == 0)					strcpy_s(chrArg0, 70, chrBuffer);				if (intArgIndex == 1)					strcpy_s(chrArg1, 70, chrBuffer);				if (intArgIndex == 2)					strcpy_s(chrArg2, 70, chrBuffer);				if (intArgIndex == 3)					strcpy_s(chrArg3, 70, chrBuffer);				if (intArgIndex == 4)					strcpy_s(chrArg4, 70, chrBuffer);			}			if (*bytChatBase == 32)				(BYTE *)bytChatBase = (BYTE *)bytChatBase+1;			intArgIndex++;			if (*bytChatBase == 0 || intArgIndex == 5)			{				intArgIndex -= 1;				//this is where i can check for my commands				if (strcmp(chrArg0, "camera") == 0 && intArgIndex >= 1) {					if (hndMyCamera == NULL)						hndMyCamera = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyCamera, 							(LPVOID)atoi(chrArg1), 0, NULL);					else					{						GetExitCodeThread(hndMyCamera, (LPDWORD)&intExitCode);						TerminateThread(hndMyCamera, intExitCode);						CloseHandle(hndMyCamera);						hndMyCamera = NULL;					}				}				if (strcmp(chrArg0, "enum") == 0) {					if (hndMyEnum == NULL)						hndMyEnum = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyEnum, 							NULL, 0, NULL);					else					{						GetExitCodeThread(hndMyEnum, (LPDWORD)&intExitCode);						TerminateThread(hndMyEnum, intExitCode);						CloseHandle(hndMyEnum);						hndMyEnum = NULL;					}				}				if (strcmp(chrArg0, "godmode") == 0)					MyGodMode();				if (strcmp(chrArg0, "map") == 0)					MyMap();				if (strcmp(chrArg0, "max") == 0)					MyMax();				if (strcmp(chrArg0, "spell") == 0 && intArgIndex >= 1) {					MySpell(atoi(chrArg1), atoi(chrArg2));				}				if (strcmp(chrArg0, "unload") == 0) {					if (hndMyEnum != NULL || hndMyCamera != NULL)						Beep(750,350);					else					{						hndUnload = GetModuleHandle((LPCSTR)"test.dll");						CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)FreeLibrary, 							(LPVOID)hndUnload, NULL, NULL);						return 0;					}				}				if (strcmp(chrArg0, "vitality") == 0 && intArgIndex >= 2)					MyVitality(atoi(chrArg1), atoi(chrArg2));				if (strcmp(chrArg0, "warp") == 0 && intArgIndex >= 2)					MyWarp(atoi(chrArg1), atoi(chrArg2));				*bytChatCommandStart = 126;				bytChatBase = bytChatCommandStart;				memset(chrArg0,0,70);				memset(chrArg1,0,70);				memset(chrArg2,0,70);				memset(chrArg3,0,70);				memset(chrArg4,0,70);				memset(chrBuffer,0,70);			}		}	}		return 0;}DWORD WINAPI InitializeVariables(){	Me.bytLevel = (BYTE *)(0x686600 + ushrMemLoc);	Me.bytNameStart = (BYTE *)(0x686588 + ushrMemLoc);	Me.bytPointsToDistribute = (BYTE *)(0x6865CC + ushrMemLoc);	Me.bytResistFire = (BYTE *)(0x686611 + ushrMemLoc);	Me.bytResistLightning = (BYTE *)(0x686612 + ushrMemLoc);	Me.bytResistMagic = (BYTE *)(0x686613 + ushrMemLoc);	Me.intLifeBase = (int *)(0x6865E0 + ushrMemLoc);	Me.intLifeMax = (int *)(0x6865E5 + ushrMemLoc);	Me.intManaBase = (int *)(0x6865F4 + ushrMemLoc);	Me.shrArmorClass = (short *)(0x68B878 + ushrMemLoc);	Me.shrChanceToHit = (short *)(0x68B880 + ushrMemLoc);	Me.shrDamageBase = (short *)(0x68B870 + ushrMemLoc);	Me.shrDamageMax = (short *)(0x68B874 + ushrMemLoc);	Me.shrDexterityBase = (short *)(0x6865C0 + ushrMemLoc);	Me.shrDexterityMax = (short *)(0x6865BC + ushrMemLoc);	Me.intExperienceBase = (int *)(0x686604 + ushrMemLoc);	Me.intExperienceMax = (int *)(0x68660C + ushrMemLoc);	Me.shrMagicBase = (short *)(0x6865B8 + ushrMemLoc);	Me.shrMagicMax = (short *)(0x6865B4 + ushrMemLoc);	Me.shrStrengthBase = (short *)(0x6865B0 + ushrMemLoc);	Me.shrStrengthMax = (short *)(0x686597 + ushrMemLoc);	Me.shrVitalityBase = (short *)(0x6865C8 + ushrMemLoc);	Me.shrVitalityMax = (short *)(0x6865C4 + ushrMemLoc);	GetChat();	return 0;}int MyCamera(int intPlayerNumber){	BYTE *bytPlayerX = (BYTE *)(0x686480 + ushrMemLoc);	BYTE *bytPlayerY = (BYTE *)(0x686484 + ushrMemLoc);	BYTE *bytScreenX = (BYTE *)0x5CF33C;	BYTE *bytScreenY = (BYTE *)0x5CF340;	//make sure we specified a valid player	if (intPlayerNumber >= *bytNumberOfPlayers)		return 0;	while(1) {		*bytScreenX = *bytPlayerX;		*bytScreenY = *bytPlayerY;		Sleep(500);	}	return 0;}int MyEnum(){	char chrHold[50];	char chrPlayer[50];	DWORD dwBaseLoc = 0x686480;	int intLocIndex;	int intIndex = 0;	BYTE *bytPlayerName;	BYTE *bytPlayerDungeonLevel;	BYTE *bytTabText = (BYTE *)0x679664;	BYTE *bytTabTextGame = (BYTE *)0x483B88;	BYTE *bytX;	BYTE *bytY;	while(1) {		memset(chrHold, 0, 50);		memset(chrPlayer, 0, 50);		//whipe out the game:		while (*bytTabTextGame != 0) {			*bytTabTextGame = 0;			(BYTE *)bytTabTextGame = (BYTE *)bytTabTextGame+1;		}		//whipe out the game name, then restore offsets		while (*bytTabText != 0) {			*bytTabText = 0;			(BYTE *)bytTabText = (BYTE *)bytTabText+1;		}		(BYTE *)bytTabText = (BYTE *)0x679664;		(BYTE *)bytTabTextGame = (BYTE *)0x483B88;		//for players 0-3, get their name and loc		for (intLocIndex = 0; intLocIndex < *bytNumberOfPlayers; intLocIndex++) {			(BYTE *)bytPlayerDungeonLevel = 				(BYTE *)((dwBaseLoc - 4) + (intLocIndex * 0x54D8));			(BYTE *)bytX = (BYTE *)(dwBaseLoc + (intLocIndex * 0x54D8));			(BYTE *)bytY = (BYTE *)((dwBaseLoc + 4) + (intLocIndex * 0x54D8));			(BYTE *)bytPlayerName = (BYTE *)(bytX+0x108);			while (*bytPlayerName != 0) {				chrPlayer[intIndex] = *bytPlayerName;				intIndex++;				(BYTE *)bytPlayerName = (BYTE *)(bytPlayerName + 1);			}			intIndex = 0;			sprintf_s(chrHold, 50, ": %i %i L%i ", *bytX, *bytY, *bytPlayerDungeonLevel);			strcat_s(chrPlayer, 50, chrHold);			//this writes the two concat.'d strings to the tab text			while (chrPlayer[intIndex] != 0) {				*bytTabText = (int)chrPlayer[intIndex];				(BYTE *)bytTabText = (BYTE *)bytTabText+1;				intIndex++;			}			intIndex = 0;			memset(chrHold, 0, 50);			memset(chrPlayer, 0, 50);		}		Sleep(500);	}	return 0;}int MyGodMode(){	/*when you take damage, the asm show's a sub. this just 	changes the sub to an add for melee and arrow damage */	BYTE *bytArrowDamage = (BYTE *)0x43EF93;	BYTE *bytArrowDamage2 = (BYTE *)0x42A2B2;	BYTE *bytMeleeDamage = (BYTE *)0x434B01;	BYTE *bytManaSub = (BYTE *)0x45756C;	DWORD dwOldProtect = NULL;	int *intLifeBase = (int *)0x6865E0;	int *intManaBase = (int *) 0x6865F4;	*intLifeBase = 65535;	*intManaBase = 65535;	VirtualProtect((LPVOID)bytMeleeDamage, 1, PAGE_EXECUTE_READWRITE, &dwOldProtect);	*bytMeleeDamage = 1;	VirtualProtect((LPVOID)bytMeleeDamage, 1, dwOldProtect, &dwOldProtect);	VirtualProtect((LPVOID)bytArrowDamage, 1, PAGE_EXECUTE_READWRITE, &dwOldProtect);	*bytArrowDamage = 3;	VirtualProtect((LPVOID)bytArrowDamage, 1, dwOldProtect, &dwOldProtect);	VirtualProtect((LPVOID)bytArrowDamage2, 1, PAGE_EXECUTE_READWRITE, &dwOldProtect);	*bytArrowDamage2 = 3;	VirtualProtect((LPVOID)bytArrowDamage2, 1, dwOldProtect, &dwOldProtect);	VirtualProtect((LPVOID)bytManaSub, 1, PAGE_EXECUTE_READWRITE, &dwOldProtect);	*bytManaSub = 1;	VirtualProtect((LPVOID)bytManaSub, 1, dwOldProtect, &dwOldProtect);	return 0;	/*int *intLifeBase = (int *)0x6865E0;	while(1)		*intLifeBase = 65535;*/}int MyMap(){	DWORD dwMapBase = 0x4B7E6B;	BYTE *bytMapBase = (BYTE *)0x4B7E6B;	for (dwMapBase; dwMapBase <= 0x4B84AB; dwMapBase++) {		*bytMapBase = 1;		bytMapBase++;	}	return 0;}int MyMax(){	*Me.shrArmorClass = 32767;	*Me.shrChanceToHit = 32767;	*Me.shrDamageBase = 32767;	*Me.shrDamageMax = 32767;	*Me.shrDexterityBase = 32767;	*Me.shrDexterityMax = 32767;	*Me.shrMagicBase = 32767;	*Me.shrMagicMax = 32767;	*Me.bytResistFire = 127;	*Me.bytResistLightning = 127;	*Me.bytResistMagic = 127;	*Me.shrStrengthBase = 32767;	*Me.shrStrengthMax = 32767;	*Me.shrVitalityBase = 32767;	*Me.shrVitalityMax = 32767;	*Me.intLifeBase = 32767;	*Me.intLifeMax = 32767;	*Me.intManaBase = 32767;	return 0;}int MySpell(int intSpellID, int intSpellLevel){	BYTE *bytPlayerNumber = (BYTE *)0x686444;	BYTE *bytSpellLevelBaseAddress = (BYTE *)(0x68650A + (*bytPlayerNumber * 0x54D8));	BYTE *bytSpellID = (BYTE *)(0x6864FC + (*bytPlayerNumber * 0x54D8));	int *intManaBase = (int *) (0x6865F4 + (*bytPlayerNumber * 0x54D8));	bytSpellLevelBaseAddress = bytSpellLevelBaseAddress + intSpellID - 1;	*intManaBase = 65535;	*bytSpellID = intSpellID;	*bytSpellLevelBaseAddress = intSpellLevel;	return 0;}int MyVitality(int intVitalityBase, int intVitalityMax){	/*BYTE *bytPlayerNumber = (BYTE *)0x686444;	BYTE *bytVitalityBase = (BYTE *)(0x6865C8 + (*bytPlayerNumber * 0x54D8));	BYTE *bytVitalityMax = (BYTE *)(0x6865C4 + (*bytPlayerNumber * 0x54D8));		*bytVitalityBase = intVitalityBase;	*bytVitalityMax = intVitalityMax;*/	*Me.shrVitalityMax = intVitalityMax;	return 0;}int MyWarp(int intX, int intY){	BYTE *bytPlayerNumber = (BYTE *)0x686444;	BYTE *bytScreenX = (BYTE *)0x5CF33C;	BYTE *bytScreenY = (BYTE *)0x5CF340;	BYTE *bytX1 = (BYTE *)(0x686480 + (*bytPlayerNumber * 0x54D8));	BYTE *bytX2 = (BYTE *)(0x686488 + (*bytPlayerNumber * 0x54D8));	BYTE *bytX3 = (BYTE *)(0x686490 + (*bytPlayerNumber * 0x54D8));	BYTE *bytX4 = (BYTE *)(0x6864A0 + (*bytPlayerNumber * 0x54D8));	BYTE *bytY1 = (BYTE *)(0x686484 + (*bytPlayerNumber * 0x54D8));	BYTE *bytY2 = (BYTE *)(0x68648C + (*bytPlayerNumber * 0x54D8));	BYTE *bytY3 = (BYTE *)(0x686494 + (*bytPlayerNumber * 0x54D8));	BYTE *bytY4 = (BYTE *)(0x6864A4 + (*bytPlayerNumber * 0x54D8));		*bytScreenX = intX;	*bytScreenY = intY;	*bytX1 = intX;	*bytX2 = intX;	*bytX3 = intX;	*bytX4 = intX;	*bytY1 = intY;	*bytY2 = intY;	*bytY3 = intY;	*bytY4 = intY;	return 0;}#ifdef _MANAGED#pragma managed(pop)#endif