PDA

Просмотр полной версии : [Помогите!] Как Вставить Мемхак В Свой Вх?


ГоГоГоГоГоГоГо
01.04.2013, 03:44
У меня есть D3D ВХ. Мне надо вставить туда команды работы с памятью.
1. Определил переменные;
2. Функции поиска адреса - типа DWORD ADDRES;
3. Функции замена адреса:

if(antirandom)
{
MEMwrite((void*)(ADDRES_randomize),(int*)(PBYTE)"\x\x\x\x\x",5);
}
else
{
MEMwrite((void*)(ADDRES_randomize),(int*)(PBYTE)"\x\x\x\x\x",5);//исходное значение
}


Вот с 3 пунктом загвоздка - не знаю куда его вставить.
Если в DrawIndexedPrimitive, то пишет MEMwrite: идентификатор не найден.
Пробовал вставлять под это - void MEMwrite(void *adr,void *ptr,int size) - пишет синтактическая ошибка.

Помогите пожалуйста.

артём612
01.04.2013, 16:34
Использование такое....
MEMwrite((void *)(12345678),(void *)"\x00",1); изменяет байт по адресу 12345678 на 00
-Красное = адрес
-Зелёное = байт на который изменить
-Синее = количество байт для изменения

Вот с 3 пунктом загвоздка - не знаю куда его вставить.
Если в DrawIndexedPrimitive, то пишет MEMwrite: идентификатор не найден.
Пробовал вставлять под это - void MEMwrite(void *adr,void *ptr,int size) - пишет синтактическая ошибка.


создай тогда файлик заготовки (.h)
там функции напиши и за инклюдь в основной файл проэкта...


ps MEMwrite: идентификатор не найден указывает на то что из этого место вызова функции она не видна....

ГоГоГоГоГоГоГо
01.04.2013, 22:01
Спасибо, все скомпилировалось.

Создал дополнительный файл проекта MemHack.h в нем прописал:

int antirandom = false;// Переменные memhacka
int antiotd = false;// Переменные memhacka


HMODULE Game_exe = GetModuleHandle("Game.exe");// Модуль memhacka
// Поиск адреса получения значения отдачи и разброса
DWORD ADDRES_randomize = FindPattern ((DWORD)Game_exe ,0xххххххх,(PBYTE)"\x8B\x\x\x\x\x\x\x\x\x\x\x\x24" ,"xxxxxxxxxxxxx")+0x; адреса убрал.
DWORD ADDRES_antiotd= FindPattern ((DWORD)Game_exe ,0xххххххх,(PBYTE)"\x\x\x\x\x\x\x\x\x\x\x\x\x","xx xxxxxxxxxxx")+0x+0x;

void MEMwrite(void *adr,void *ptr,int size)
{
DWORD OldProtection;
VirtualProtect(adr,size,PAGE_EXECUTE_READWRITE, &OldProtection);
memcpy(adr,ptr,size);
VirtualProtect(adr,size,OldProtection, &OldProtection);
}
но игру крашит при запуске, может еще что-то подскажите.

артём612
02.04.2013, 14:49
Да пожалуй подскажу... /dgs

у вас раньше чит с использованием поиска сигнатур(FindPattern)
работал?

Просто у меня читы с этими функциями крашат в некоторых играх...

OneShot
02.04.2013, 15:54
Warface не?

ГоГоГоГоГоГоГо
02.04.2013, 21:32
Warface не?

Да.

Да пожалуй подскажу... /dgs

у вас раньше чит с использованием поиска сигнатур(FindPattern)
работал?

Просто у меня читы с этими функциями крашат в некоторых играх...
Я читы с FindPattern еще не использовал. Так, что не знаю.



Сделал немного по другому:

DWORD WINAPI Room_Hacks(LPVOID param)
{

HMODULE Game_exe = GetModuleHandle("Game.exe");// Модуль memhacka
// Поиск адреса получения значения отдачи и разброса
DWORD ADDRES_antirandom = FindPattern ((DWORD)Game_exe ,0xxxxxxxx,(PBYTE)"\x\x\x\x\x\x\x\x\x\x\x\x\x","xxxxxxxxxxxxx")+x;
DWORD ADDRES_antiotd= FindPattern ((DWORD)Game_exe ,0xxxxxxxx,(PBYTE)"\x\x\x\x\x\x\x\x\x\x\x\x\x","xxxxxxxxxxxxx")+x;

if(bantirandom)
{
MEMwrite((void*)(ADDRES_antirandom),(int*)(PBYTE)"\x90\x90\x90\x90\x90",5);//nop
}
else
{
MEMwrite((void*)(ADDRES_antirandom),(int*)(PBYTE)"\x\x\x\x\x",5);//исходное значение
}
}
return true;
}

Вызов функции DWORD WINAPI Room_Hacks(LPVOID param) поставил в

bool WINAPI DllMain(HMODULE hDll, DWORD dwReason, PVOID pvReserved)

сам вызов:
CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) Room_Hacks, 0, 0, 0);

Все равно крашит. Если без вызова - то все загружается, но эти функции не работают.

Может точку входа неправильно делаю?

Подскажите пожалуйста, уже и адреса нашел, и функции вычисления, а все не работает, можно в личку. Ничего не сливаю, со своим читом скоро как год играю, потому что знаю - что в инете то пофиксят.

twice
02.04.2013, 23:47
HMODULE*Game_exe*=*GetModuleHandle("Game.exe");//*Модуль*memhacka

Будет NULL, если только твоя DLL не вызывает этот exeшник сама.

Retrieves a module handle for the specified module. The module must have been loaded by the calling process.

ГоГоГоГоГоГоГо
03.04.2013, 03:26
Будет NULL, если только твоя DLL не вызывает этот exeшник сама.
?????????????????????????????????
В институте не учился.

twice
03.04.2013, 09:40
?????????????????????????????????
В институте не учился.

институт тут причем?

Поясни как у тебя происходит взаимодействие модуля с представленным кодом и непосредственно game.exe.

ГоГоГоГоГоГоГо
03.04.2013, 20:37
институт тут причем?

Поясни как у тебя происходит взаимодействие модуля с представленным кодом и непосредственно game.exe.

Опять ничего не понял. Есть Рабочее ВХ, дальше пишу все что добавил для мемхака (переменные для вызова функции не буду приводить):

В основной файл d3d9.cpp вставил в начало:
void MEMwrite(void *adr,void *ptr,int size)
{
DWORD OldProtection;
VirtualProtect(adr,size,PAGE_EXECUTE_READWRITE, &OldProtection);
memcpy(adr,ptr,size);
VirtualProtect(adr,size,OldProtection, &OldProtection);
}

Потом после DrawIndexedPrimitive:
DWORD WINAPI Room_Hacks(LPVOID param)
{

HMODULE Game_exe = GetModuleHandle("Game.exe");// Модуль memhacka
// Поиск адреса получения значения отдачи и разброса
DWORD ADDRES_antirandom = FindPattern ((DWORD)Game_exe ,0xxxxxxxx,(PBYTE)"\x\x\x\x\x\x\x\x\x\x\x\x\x","xxxxxxxxxxxxx")+x;
DWORD ADDRES_antiotd= FindPattern ((DWORD)Game_exe ,0xxxxxxxx,(PBYTE)"\x\x\x\x\x\x\x\x\x\x\x\x\x","xxxxxxxxxxxxx")+x;

if(bantirandom)
{
MEMwrite((void*)(ADDRES_antirandom),(int*)(PBYTE)"\x90\x90\x90\x90\x90",5);//nop
}
else
{
MEMwrite((void*)(ADDRES_antirandom),(int*)(PBYTE)"\x\x\x\x\x",5);//исходное значение
}
}
return true;
}

В файл main.cpp в начало для объявления идентификатора Room_Hacks :
DWORD WINAPI Room_Hacks(LPVOID param);

В bool WINAPI DllMain(HMODULE hDll, DWORD dwReason, PVOID pvReserved):
bool WINAPI DllMain(HMODULE hDll, DWORD dwReason, PVOID pvReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hDll);

GetModuleFileName(hDll, dlldir, 512);
for(int i = strlen(dlldir); i > 0; i--) { if(dlldir[i] == '\\') { dlldir[i+1] = 0; break; } }
ofile.open(GetDirectoryFile("log.txt"), ios::app);

add_log("\ОК");

HMODULE hMod = LoadLibrary("d3d9.dll");

oDirect3DCreate9 = (tDirect3DCreate9)DetourFunc(
(BYTE*)GetProcAddress(hMod, "Direct3DCreate9"),
(BYTE*)hkDirect3DCreate9,
5);

CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) Room_Hacks, 0, 0, 0);// - ЭТО ВСТАВИЛ

return true;
}

else if(dwReason == DLL_PROCESS_DETACH)
{
add_log("НЕТ");
if(ofile) { ofile.close(); }
}

return false;
}

ВСЕ.

Добавлено через 3 часа 57 минут
Опытным путем выяснил, что крашит вот на этих строчках (без них все работает):
// Поиск адреса получения значения отдачи и разброса
DWORD ADDRES_antirandom = FindPattern ((DWORD)Game_exe ,0xxxxxxxx,(PBYTE)"\x\x\x\x\x\x\x\x\x\x\x\x\x","xx xxxxxxxxxxx")+x;
DWORD ADDRES_antiotd= FindPattern ((DWORD)Game_exe ,0xxxxxxxx,(PBYTE)"\x\x\x\x\x\x\x\x\x\x\x\x\x","xx xxxxxxxxxxx")+x;

Подскажите, можно поиск адреса написать другими командами?
Или как то по другому.

twice
04.04.2013, 09:16
Опытным путем выяснил, что крашит вот на этих строчках (без них все работает):

// Поиск адреса получения значения отдачи и разброса
DWORD ADDRES_antirandom = FindPattern ((DWORD)Game_exe ,0xxxxxxxx,(PBYTE)"\x\x\x\x\x\x\x\x\x\x\x\x\x","xx xxxxxxxxxxx")+x;
DWORD ADDRES_antiotd= FindPattern ((DWORD)Game_exe ,0xxxxxxxx,(PBYTE)"\x\x\x\x\x\x\x\x\x\x\x\x\x","xx xxxxxxxxxxx")+x;


Подскажите, можно поиск адреса написать другими командами?
Или как то по другому.

Паттерный скан - вещь нормальная и рабочая, раз у тебя падает - значит или в функции проблемы, или ты туда не те значения передаешь.

Покажи саму функцию и что конкретно ты туда передаешь.

Dimedrol1536
15.04.2013, 20:09
Не мучай себя и нас.

Создаеш к примеру adress.h, пишеш в нем это.
Подключаеш к нему к примеру hack_helper.h,
тот в котором есть твои опредиления.


DWORD Recoil = FindPattern ((DWORD)Game_exe ,0x2A715B2,(PBYTE)"\x75\x03\xFF\x48\x04\x8B\x4E\x0C\x8B\x49\x04\x8B\x 11\x8B\x42\x10\x68\x80\x00\x00\x00\xFF\xD0\x8B\x4E","xxxxxxxxxxxxxxxxxxxxxxxxx")+0x17;
DWORD Call1 = FindPattern ((DWORD)Game_exe ,0x2A715B2,(PBYTE)"\x51\x56\x8B\xF1\x57\x8D\x7E\x58\x68\x00\x00\x50","xxxxxxxxx??x");
DWORD Call2 = FindPattern ((DWORD)Game_exe ,0x2A715B2,(PBYTE)"\x55\x8B\xEC\x83\xE4\xF0\x83\xEC\x14\x53\x56\x57\x 8B\xF1\x8D\x4E","xxxxxxxxxxxxxxxx");


__declspec(naked)void recoil_func()
{
if(Fun.antirandom)//Функция в меню
{
_asm
{

mov ecx, [esi+24h]
nop
mov ecx, [esi+24h]
nop
pop edi
pop esi
pop ebp
pop ebx
add esp, 0D0h
retn
}
}
else
{
_asm
{

mov ecx, [esi+24h]
call [Call1]
mov ecx, [esi+24h]
call [Call2]
pop edi
pop esi
pop ebp
pop ebx
add esp, 0D0h
retn
}
}
}


В Эндсцене:
DetourCreate((PBYTE)Recoil,(PBYTE)recoil_func ,5);

ГоГоГоГоГоГоГо
15.04.2013, 21:19
Это я на "D3D" видел но куда что "совать" не мог разобраться. Ща попробуем.
------------------------------------------------------------------------------

Аааааааааааааааааааааааааааааааааааааааааааааа....
Я конечно понимаю, что дареному коню в зубы не смотрят, но.......

Можно хоть раз поподробнее написать - что куда и вместо чего:/facepalm

это оставлять:
//DWORD ADDRES_antirandom = FindPattern ((DWORD)Game_exe ,0x2A715B2,(PBYTE)"\x8B\x42\x10\x68\x80\x00\x00\x00\xFF\xD0\x8B\x4E\x 24","xxxxxxxxxxxxx")+0xD;// MemHack
//DWORD ADDRES_antiotd = FindPattern ((DWORD)Game_exe ,0x2A715B2,(PBYTE)"\x8B\x42\x10\x68\x80\x00\x00\x00\xFF\xD0\x8B\x4E\x 24","xxxxxxxxxxxxx")+0xD+0x8;// MemHack
//DWORD ADDRES_antiotd = FindPattern((DWORD)Game_exe,0x2A715B2,(PBYTE)"\x76\x0A\x8B\x19\x33\xDF","xxxxxx");// MemHack

или теперь вот это заместо того:
DWORD Recoil = FindPattern ((DWORD)Game_exe ,0x2A715B2,(PBYTE)"\x75\x03\xFF\x48\x04\x8B\x4E\x0C\x8B\x49\x04\x8B\x 11\x8B\x42\x10\x68\x80\x00\x00\x00\xFF\xD0\x8B\x4E","xxxxxxxxxxxxxxxxxxxxxxxxx")+0x17;
DWORD Call1 = FindPattern ((DWORD)Game_exe ,0x2A715B2,(PBYTE)"\x51\x56\x8B\xF1\x57\x8D\x7E\x58\x68\x00\x00\x50","xxxxxxxxx??x");
DWORD Call2 = FindPattern ((DWORD)Game_exe ,0x2A715B2,(PBYTE)"\x55\x8B\xEC\x83\xE4\xF0\x83\xEC\x14\x53\x56\x57\x 8B\xF1\x8D\x4E","xxxxxxxxxxxxxxxx");


DetourCreate: идентификатор не найден - как его определить?

Ну нет у меня образования по программированию.

Хоть я и готов на себе волосы рвать , но все равно Большое спасибо.
По крупицам может что-то соберу рабочее.
ВХ ведь как-то собрал.

twice
16.04.2013, 00:52
DetourCreate: идентификатор не найден - как его определить?

[Ссылки могут видеть только зарегистрированные и активированные пользователи]

ГоГоГоГоГоГоГо
16.04.2013, 03:19
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

"Спасибо" все очень "понятно".

Когда ты приедешь к автоэлектрику я очень хочу чтоб он тебя сюда послал [Ссылки могут видеть только зарегистрированные и активированные пользователи]

twice
16.04.2013, 03:35
"Спасибо" все очень "понятно".

Когда ты приедешь к автоэлектрику я очень хочу чтоб он тебя сюда послал [Ссылки могут видеть только зарегистрированные и активированные пользователи]

Если ты собираешься что-то делать, а не копи-пастить не понимая что и за чем нужно, то время начинать читать документацию или хотя бы машинными переводчиками переводить.

По указанной ссылке нужно скачать бесплатную версию и установить, что исправит ошибку в твоем предыдущем сообщении.

Dimedrol1536
16.04.2013, 09:35
DetourCreate: идентификатор не найден - как его определить?

Вот тебе всё самое необходимое.
В chacks.h

#ifndef _CHACKS_H
#define _CHACKS_H

#pragma warning( disable : 4996 )

void MEMwrite(void *adr, void *ptr, int size)
{
DWORD OldProtection;
VirtualProtect(adr,size,PAGE_EXECUTE_READWRITE, &OldProtection);
memcpy(adr,ptr,size);
VirtualProtect(adr,size,OldProtection, &OldProtection);
}

void *DetourCreate(BYTE *src, const BYTE *dst, const int len)
{
BYTE *jmp = (BYTE*)malloc(len+5);
DWORD dwback;

VirtualProtect(src, len, PAGE_READWRITE, &dwback);

memcpy(jmp, src, len); jmp += len;

jmp[0] = 0xE9;
*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;

src[0] = 0xE9;
*(DWORD*)(src+1) = (DWORD)(dst - src) - 5;

VirtualProtect(src, len, dwback, &dwback);

return (jmp-len);
}

BOOL bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask)
return false;
return (*szMask) == NULL;
}

DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
for(DWORD i=0; i < dwLen; i++)
if( bCompare((BYTE*)(dwAddress+i),bMask,szMask))
return (DWORD)(dwAddress+i);

return 0;
}
#endif

ГоГоГоГоГоГоГо
16.04.2013, 17:58
Если ты собираешься что-то делать, а не копи-пастить не понимая что и за чем нужно, то время начинать читать документацию или хотя бы машинными переводчиками переводить.

По указанной ссылке нужно скачать бесплатную версию и установить, что исправит ошибку в твоем предыдущем сообщении.

Ну я же не долбаёб. (мат, мат, мат)
Я конечно сразу все перевел, скачал, установил, все установилось и что толку?
Там-же как я понимаю надо какой-то файл прописывать в проект, а какой? там 154 файла.

Спасибо что хоть отвечаете.

Dimedrol1536 - спасибо, буду пробывать.
________________________________________

Все что написано в chacks.h у меня уже определено, кроме вот этого:

void *DetourCreate(BYTE *src, const BYTE *dst, const int len)

вставил и ошибка исчезла. Буду дальше копать - многое еще не ясно.

артём612
16.04.2013, 18:35
Вообщем Код с подсказкой /dgs

Начало ищем адрес и тд
нам понадобится это чудо =)

DWORD FindPointer(DWORD pointer,DWORD Offset)
{
DWORD Address_temp;
ReadProcessMemory(GetCurrentProcess(), (LPVOID*)(DWORD)pointer, &Address_temp, sizeof(Address_temp), NULL);
DWORD rec = Address_temp + Offset;
return (DWORD)(rec);
return 0;
}

DWORD ModuleGame = GetModuleHandle("Game.exe");
//Разбирая чуточку игру я делал поиск не по сигнатуре а по поиску динамической памяти =)
поэтому
DWORD Pointer = ModuleGame+0x некое значение;
DWORD temp = FindPointer(Pointer,Сдвиг);
temp = FindPointer(temp,Сдвиг);
temp = FindPointer(temp,Сдвиг);
temp = FindPointer(temp,Сдвиг);
//я например искал так визуальные патроны /dgs

//дальше
//для того чтобы писать в память
DWORD setbyte = 0x90;// то что пишем
WriteProcessMemory(GetCurrentProcess(),(LPVOID)tem p,&setbyte,sizeof(setbyte),NULL);//тут мы пишем уже =)

ГоГоГоГоГоГоГо
16.04.2013, 19:29
Да все без толку, все равно крашит на FindPattern.

Я вот что еще подумал - у меня есть такая проблема: ВХ работает если откомпилирована в Debug, а если в Release - то крашит при загрузке.
Прочитал что отличие в версиях это работа с памятью - особенности связанные с освобождением памяти и "утечек" памяти.
Может в этом проблема?

Я уже и в меню пункты добавил под мемхак:

[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Dimedrol1536
16.04.2013, 23:54
Изменение память в фв - это бан или краш. Всё зависит от твоего обхода.

артём612
17.04.2013, 16:49
ВХ работает если откомпилирована в Debug, а если в Release - то крашит при загрузке
вот это даже очень странно =)

по идее должно уже тогда крашить на дебаге а не на релизе так как дебаг режим это уже встроенная отладка в вашу программу то есть её легче дизасамблировать...

и всё же я не знаю что там бан краш =) но у меня всё робит в мем хаке и через се и в длл =)

ГоГоГоГоГоГоГо
17.04.2013, 19:58
вот это даже очень странно =)

по идее должно уже тогда крашить на дебаге а не на релизе так как дебаг режим это уже встроенная отладка в вашу программу то есть её легче дизасамблировать...

и всё же я не знаю что там бан краш =) но у меня всё робит в мем хаке и через се и в длл =)

Значит мне не повезло.
У меня проблема и с другими читами которые выкладывают, ни один рабочий чит не хочет работать, ни через реестр, ни инжектом - крашит при загрузке
(они рабочие на 100%, но сделаны конечно через "Релиз") и поэтому я даже протестировать не могу ни один чит.
И получаеться, что у меня работает только один мой чит через "Дебаг" и через реестр - через инжект тоже крашит.
Раньше не было такой проблемы, появилась где-то месяцев 5 назад.
Наверное придется Винду сносить и по новой ставить.

артём612
17.04.2013, 21:06
может хук кривой?


у тебя краш во время входа в бой?

ГоГоГоГоГоГоГо
18.04.2013, 21:18
У меня проблема и с другими читами

Дело не только в моем хуке.
Крашит только при загрузке игры, если загрузилось, то все гуд.

Наверное все, можно пока тему закрывать.
Надо винду сносить.