低レベルな質問ですいません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あじゃじ

低レベルな質問ですいません

#1

投稿記事 by あじゃじ » 5年前

Ammo VARSのところの
BYTE AmmoValue[] = { 0xA3, 0X1C, 0X0 };

{ 0xA3, 0X1C, 0X0 };の中身はなにを表しているのでしょうか
バイト型で数値を表しているのですか?



#include <iostream>
#include <Windows.h>
#include <string>
#include <ctime>

DWORD FinddmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD offsets[], DWORD BaseAddress);
void WriteToMemory(HANDLE hProcHandle);

std::string GameName = "Assaultcube";
LPCSTR LGameWindow = "Assaultcube";
std::string GameStatus;

bool isGameAvail;
bool UpdateOnNextRun;

//Ammo VARS
bool AmmoStatus;
BYTE AmmoValue[] = { 0xA3, 0X1C, 0X0 };
DWORD AmmoBaseAdress = { 0x004DF73C };
DWORD AmmoOffsets[] = { 0x378, 0x14, 0x0 };

//Healt VARS
bool HealthStatus;
BYTE HealthValue[] = { 0x39, 0x5, 0X0, 0X0 };
DWORD HealthBaseAdress = { 0x004DF73C };
DWORD HealthOffsets[] = { 0xF4 };

int main()
{
HWND hGameWindow = NULL;
int timeSinceLastUpdate = clock();
int GameAvailTMR = clock();
int onePressTMR = clock();
DWORD dwProcID = NULL;
HANDLE hProcHandle = NULL;
UpdateOnNextRun = true;
std::string sAmmoStatus = "OFF";
std::string sHealthStatus = "OFF";

while (!GetAsyncKeyState(VK_INSERT))
{
if (clock() == GameAvailTMR > 100)
{
GameAvailTMR = clock();
isGameAvail = false;
}//if

hGameWindow = FindWindow(NULL, LGameWindow);
if (hGameWindow)
{
GetWindowThreadProcessId(hGameWindow, &dwProcID);
if (dwProcID != 0)
{
hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);
if (hProcHandle == INVALID_HANDLE_VALUE || hProcHandle == NULL)
{
GameStatus = "Failed to open process for valid handle";
}
else
{
GameStatus = "AssaultCube Ready to Hack";
}
}

else
{
GameStatus = "Failed to get Process ID";
}
}
else
{
GameStatus = "AssaultCube NOT FOUND";
}



if (UpdateOnNextRun || clock() == timeSinceLastUpdate > 50000)
{
system("cls");
std::cout << "........................................................." << std::endl;
std::cout << " AssaultCube Memory Hacker" << std::endl;
std::cout << "........................................................." << std::endl << std::endl;
std::cout << "GAME STATUS: " << GameStatus << " <-" << std::endl << std::endl;
std::cout << "[F1] Unlimited Ammo -> " << sAmmoStatus << " <-" << std::endl << std::endl;
std::cout << "[F2] Unlimited Health -> " << sHealthStatus << " <-" << std::endl << std::endl;
std::cout << "[INSERT] Exit" << std::endl;
UpdateOnNextRun; false;
timeSinceLastUpdate = clock();
}
if (isGameAvail)
{
//WRITE TO MEMORY
//I know this is not done yet.
}
if (clock() == onePressTMR > 400)
{
if (true)
{
//Ammo
if (GetAsyncKeyState(VK_F1))
{
onePressTMR = clock();
AmmoStatus = !AmmoStatus;
UpdateOnNextRun = true;
if (AmmoStatus)AmmoStatus = "ON";
else sAmmoStatus = "OFF";
}
//Health
else if (GetAsyncKeyState(VK_F1))
{
onePressTMR = clock();
HealthStatus = !HealthStatus;
UpdateOnNextRun = true;
if (HealthStatus)sHealthStatus = "ON";
else sHealthStatus = "OFF";
}//else if
}
}
}


CloseHandle(hProcHandle);
CloseHandle(hGameWindow);
return ERROR_SUCCESS;
}//main

DWORD FindDmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD offsets[], DWORD BaseAddress)
{
DWORD pointer = BaseAddress;
DWORD pTemp;
DWORD pointerAddr;
for (int c = 0; c < PointerLevel; c++)
{
if (c == 0)
{
ReadProcessMemory(hProcHandle, (LPCVOID)pointer, &pTemp, sizeof(pTemp), NULL);
}

pointerAddr = pTemp + offsets[c];
ReadProcessMemory(hProcHandle, (LPCVOID)pointerAddr, &pTemp, sizeof(pTemp), NULL);
}
return pointerAddr;
}


void WriteToMemory(HANDLE hProcHandle)
{
DWORD AddressToWrite;
if (AmmoStatus)
{
AddressToWrite = FindDmaAddy(3, hProcHandle, AmmoOffsets, AmmoBaseAdress);
WriteProcessMemory(hProcHandle, (BYTE*)AddressToWrite, &AmmoValue, sizeof(AmmoValue), NULL);
}
if (HealthStatus)
{
AddressToWrite = FindDmaAddy(3, hProcHandle, HealthOffsets, HealthBaseAdress);
WriteProcessMemory(hProcHandle, (BYTE*)AddressToWrite, &HealthValue, sizeof(HealthValue), NULL);
}
}

iwama yoshikazu

Re: 低レベルな質問ですいません

#2

投稿記事 by iwama yoshikazu » 5年前

あじゃじ さんが書きました:
5年前
Ammo VARSのところの
BYTE AmmoValue[] = { 0xA3, 0X1C, 0X0 };

{ 0xA3, 0X1C, 0X0 };の中身はなにを表しているのでしょうか
バイト型で数値を表しているのですか?

コード:


 #include <iostream>
#include <Windows.h>
#include <string>
#include <ctime>

DWORD FinddmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD offsets[], DWORD BaseAddress);
void WriteToMemory(HANDLE hProcHandle);

std::string GameName = "Assaultcube";
LPCSTR LGameWindow = "Assaultcube";
std::string GameStatus;

bool isGameAvail;
bool UpdateOnNextRun;

//Ammo VARS
bool AmmoStatus;
BYTE AmmoValue[] = { 0xA3, 0X1C, 0X0 };
DWORD AmmoBaseAdress = { 0x004DF73C };
DWORD AmmoOffsets[] = { 0x378, 0x14, 0x0 };

//Healt VARS
bool HealthStatus;
BYTE HealthValue[] = { 0x39, 0x5, 0X0, 0X0 };
DWORD HealthBaseAdress = { 0x004DF73C };
DWORD HealthOffsets[] = { 0xF4 };

int main()
{
	HWND hGameWindow = NULL;
	int timeSinceLastUpdate = clock();
	int GameAvailTMR = clock();
	int onePressTMR = clock();
	DWORD dwProcID = NULL;
	HANDLE hProcHandle = NULL;
	UpdateOnNextRun = true;
	std::string sAmmoStatus = "OFF";
	std::string sHealthStatus = "OFF";
	
	while (!GetAsyncKeyState(VK_INSERT))
	{
		if (clock() == GameAvailTMR > 100)
		{
			GameAvailTMR = clock();
			isGameAvail = false;
		}//if

			hGameWindow = FindWindow(NULL, LGameWindow);
			if (hGameWindow)
			{
				GetWindowThreadProcessId(hGameWindow, &dwProcID);
				if (dwProcID != 0)
				{
					hProcHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcID);
					if (hProcHandle == INVALID_HANDLE_VALUE || hProcHandle == NULL)
					{
						GameStatus = "Failed to open process for valid handle";
					}
					else
					{
						GameStatus = "AssaultCube Ready to Hack";
					}
				}
				
					    else
					    {
						    GameStatus = "Failed to get Process ID";
					    }
			}
			            else
			            {
							GameStatus = "AssaultCube NOT FOUND";
			            }
		
	
	
	if (UpdateOnNextRun || clock() == timeSinceLastUpdate > 50000)
			{
				system("cls");
				std::cout << "........................................................." << std::endl;
				std::cout << "               AssaultCube Memory Hacker" << std::endl;
				std::cout << "........................................................." << std::endl << std::endl;
				std::cout << "GAME STATUS: " << GameStatus << " <-" << std::endl << std::endl;
				std::cout << "[F1] Unlimited Ammo -> " << sAmmoStatus << " <-" << std::endl << std::endl;
				std::cout << "[F2] Unlimited Health -> " << sHealthStatus << " <-" << std::endl << std::endl;
				std::cout << "[INSERT] Exit" << std::endl;
				UpdateOnNextRun; false;
				timeSinceLastUpdate = clock();
			}
			if (isGameAvail)
			{
				//WRITE TO MEMORY
                                //I know this is not done yet.
			}
			if (clock() == onePressTMR > 400)
			{
				if (true)
				{
					//Ammo
					if (GetAsyncKeyState(VK_F1))
					{
						onePressTMR = clock();
						AmmoStatus = !AmmoStatus;
						UpdateOnNextRun = true;
						if (AmmoStatus)AmmoStatus = "ON";
						else sAmmoStatus = "OFF";
					}
					//Health
					else if (GetAsyncKeyState(VK_F1))
					{
						onePressTMR = clock();
						HealthStatus = !HealthStatus;
						UpdateOnNextRun = true;
						if (HealthStatus)sHealthStatus = "ON";
						else sHealthStatus = "OFF";
					}//else if
					}
				}
			}


	CloseHandle(hProcHandle);
	CloseHandle(hGameWindow);
	return ERROR_SUCCESS;
		}//main

DWORD FindDmaAddy(int PointerLevel, HANDLE hProcHandle, DWORD offsets[], DWORD BaseAddress)
{
	DWORD pointer = BaseAddress;
	DWORD pTemp;
	DWORD pointerAddr;
	for (int c = 0; c < PointerLevel; c++)
	{
		if (c == 0)
		{
			ReadProcessMemory(hProcHandle, (LPCVOID)pointer, &pTemp, sizeof(pTemp), NULL);
		}

		pointerAddr = pTemp + offsets[c];
		ReadProcessMemory(hProcHandle, (LPCVOID)pointerAddr, &pTemp, sizeof(pTemp), NULL);
	}
	return pointerAddr;
}


void WriteToMemory(HANDLE hProcHandle)
{
	DWORD AddressToWrite;
	if (AmmoStatus)
	{
		AddressToWrite = FindDmaAddy(3, hProcHandle, AmmoOffsets, AmmoBaseAdress);
		 WriteProcessMemory(hProcHandle, (BYTE*)AddressToWrite, &AmmoValue, sizeof(AmmoValue), NULL);
	}
	if (HealthStatus)
	{
		AddressToWrite = FindDmaAddy(3, hProcHandle, HealthOffsets, HealthBaseAdress);
		WriteProcessMemory(hProcHandle, (BYTE*)AddressToWrite, &HealthValue, sizeof(HealthValue), NULL);
	}
}

Math

Re: 低レベルな質問ですいません

#3

投稿記事 by Math » 5年前

>{ 0xA3, 0X1C, 0X0 };の中身はなにを表しているのでしょうか
> バイト型で数値を表しているのですか?

そうです。
0x 又は 0X は 16進数を表します。

VisualStudio2017Community でみると

http://www2.koyoen.birdview.co.jp/~abcx ... -24-1-.PNG

http://www2.koyoen.birdview.co.jp/~abcx ... -24-2-.PNG

http://www2.koyoen.birdview.co.jp/~abcx ... -24-3-.PNG

( 10進数で { 163, 28, 0 } ;  です  )

Math

Re: 低レベルな質問ですいません

#4

投稿記事 by Math » 5年前

[参考までに]

http://www.mermaid-tavern.com/pluto/tpc ... _0219.html

によると
ーーーーー
これがWindowsの製造元であるMicrosoft公認の意味である。私が知っているのももちろんこれである。
BYTE
Byte (8 bits). 8ビットの整数。

WORD
16-bit unsigned integer. 16ビットの符号なし整数。

DWORD
32-bit unsigned integer. 32ビットの符号なし整数。

要するに、BYTEは8ビットの整数(データ)であり、WORDは16ビットの符号なしの整数であり、DWORDは32ビットの符号なしの整数であるというだけである。

バカにもわかるように言うと、100円という金額を表すのに、8桁のソロバンを使うか、16桁のソロバンを使うか、32桁のソロバンを使うかというだけのことである。
ソロバンを変えたところで100円は100円のままである。これが1000円や100ドルになることはないのである。
ーーーーー

参考
https://nantonaku-shiawase.hatenablog.c ... /24/212616

http://www.mermaid-tavern.com/pluto/tpc ... _data2.gif

返信

“C言語何でも質問掲示板” へ戻る