-
Автор темы
- #1
Спасибо, что зашли на пост! У меня вопрос: можно ли читать ХП врагов только по смещениям из дампа source 2 sdk от неверлуза? Если можно, подскажите пожалуйста, какие офсеты нужно добавить, чтобы получить ХП врага? Раньше я писал читы для ксго и там можно было это реализовать вот так
Можно ли это реализовать в самой Доте? По такому принципу
где я читал уровень прокачки ульта Зевса (уже не работает)
Можно ли использовать этот принцип для чтения HP противника?
Заранее спасибо за вашу помощь!
часть кода из ксго:
for (int x; x < 32; x++) {
uintptr_t Enemy = [I](uintptr_t[/I])(GameModule + dwEntityList + x * 0x10);
}
где я читал уровень прокачки ульта Зевса (уже не работает)
Можно ли использовать этот принцип для чтения HP противника?
сурс говно код:
//c++20
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
#include <vector>
#include <conio.h>
#include <thread>
using namespace std;
HWND hwnd;
DWORD procID;
HANDLE hProcess;
uintptr_t ModuleBase;
uintptr_t ModuleServer;
void SetConsoleTitleText(const wchar_t* text) { //это для дизайна консоли
int i = 0;
while (true) {
switch (i) {
case 0:
SetConsoleTitle(L"1");
Sleep(400);
break;
case 1:
SetConsoleTitle(L"2");
Sleep(400);
break;
case 2:
SetConsoleTitle(L"3");
Sleep(400);
break;
case 3:
SetConsoleTitle(L"4");
Sleep(400);
break;
case 4:
SetConsoleTitle(L"5");
Sleep(400);
break;
case 5:
SetConsoleTitle(L"6");
Sleep(400);
break;
case 6:
SetConsoleTitle(L"7");
Sleep(400);
break;
case 7:
SetConsoleTitle(L"8");
Sleep(400);
break;
case 8:
SetConsoleTitle(L"9");
Sleep(400);
break;
}
i = (i + 1) % 9;
}
}
uintptr_t GetModuleBaseAddress(const char* modName) {
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procID);
if (hSnap != INVALID_HANDLE_VALUE) {
MODULEENTRY32 modEntry;
modEntry.dwSize = sizeof(modEntry);
if (Module32First(hSnap, &modEntry)) {
do {
char szModuleName[MAX_PATH] = { 0 };
WideCharToMultiByte(CP_UTF8, 0, modEntry.szModule, -1, szModuleName, MAX_PATH, NULL, NULL);
if (!strcmp(szModuleName, modName)) {
CloseHandle(hSnap);
return (uintptr_t)modEntry.modBaseAddr;
}
} while (Module32Next(hSnap, &modEntry));
}
}
return 0;
}
uintptr_t FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
uintptr_t addr = ptr;
for (unsigned int i = 0; i < offsets.size(); ++i)
{
ReadProcessMemory(hProc, (BYTE*)addr, &addr, sizeof(addr), 0);
addr += offsets[i];
}
return addr;
}
void ReadFromMemory(HANDLE hProc, uintptr_t address, void* buffer, SIZE_T size) {
ReadProcessMemory(hProc, reinterpret_cast<LPCVOID>(address), buffer, size, NULL);
}
void ZeusUlt() { //читаю оффсет(уже устарел)
while (true) {
uintptr_t dynamicptrbaseaddr = ModuleBase + 0x04774960;
std::vector<unsigned int> zuusoffset = { 0x8D0, 0x558 };
uintptr_t myAddr = FindDMAAddy(hProcess, dynamicptrbaseaddr, zuusoffset);
int value;
ReadFromMemory(hProcess, myAddr, &value, sizeof(value));
cout << "Уровень ульты зевса> " << value;
if (value < 1) {
cout << "\nульта не прокачена!";
}
if (value == 1) {
cout << "\nурон> 300";
}
if (value == 2) {
cout << "\nурон> 425";
}
if (value == 3) {
cout << "\nурон> 550";
}
Sleep(500);
system("cls");
}
}
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
thread titleThread(SetConsoleTitleText, L"Dota Ultimate");
titleThread.detach();
hwnd = FindWindow(NULL, L"Dota 2");
while (hwnd == NULL)
{
cout << "waiting for dota2" << endl;
Sleep(1000);
system("cls");
};
procID = 0;
GetWindowThreadProcessId(hwnd, &procID);
ModuleBase = GetModuleBaseAddress("client.dll");
ModuleServer = GetModuleBaseAddress("server.dll");// это для теста не юзается в коде
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
int ans;
while (true) {
cout << " [+] Dota 2 активирована" << endl;
cout << " test external code" << endl;
cout << "\n [ 1 ] Авто ульта зевса";// работало
cout << "\n [ 2 ] Авто абуз армлета";// не работает
cout << "\n [ 3 ] Авто перекачка морфа";// не работает
cout << "\n [ 4 ] Отображения хп на оверлейе";// не работает
cout << "\n [ 5 ] Отдалить камеру";// не работает
cout << "\n [ 6 ] Включть партиклы";// не работает
cout << "\n [ 7 ] Камера фикс";// не работает
cout << "\n [ 8 ] Изменить погоду";// не работает
cout << "\n\n />";
cin >> ans;
if (ans == 1)
{
ZeusUlt();
}
else
{
CloseHandle(hProcess);
return 0;
}
}
}