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);
}
}
低レベルな質問ですいません
Re: 低レベルな質問ですいません
あじゃじ さんが書きました: ↑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); } }
Re: 低レベルな質問ですいません
>{ 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 } ; です )
> バイト型で数値を表しているのですか?
そうです。
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 } ; です )
Re: 低レベルな質問ですいません
[参考までに]
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
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