Перейти к содержанию

RockHammer

Пользователи+
  • Постов

    705
  • Зарегистрирован

  • Посещение

  • Победитель дней

    7

Весь контент RockHammer

  1. Нуу... По сути, эта шляпа сейчас и не работает. Через раз работает. Память не изменяет, хоть и DllMain возвращает ноль. С потоками я и не работаю, я создаю главный поток при инжекте либа в процесс, и туда все запихиваю, что нужно. А нужен мне один поток - изменение памяти. Который уже раписан. Что нужно сделать, чтобы дллка работала?
  2. Почему же? На фрилансе некоторые заказчики измеряют его строчками))
  3. Казалось бы - 10 символов кода... А могут решить продуктивность остальных 1000-1500.
  4. Собираю конструктор из кусков кода. В принципе, сам код я понимаю (его смысл, структуру и цель прибытия на эту планету) - но не студию. Написал код. И почему-то главный поток не хочет запускатся! (главный поток DLL) Код: #include <Windows.h>#include <fcntl.h>#include <stdio.h>#include <io.h>#include <conio.h>#include <Psapi.h>#pragma comment (lib, "psapi.lib")DWORD WINAPI GameHacking_thread(LPVOID);void CreateConsole();DWORD APIENTRY DllMain(HMODULE hModule, DWORD ul_reason, LPVOID lpReserved){ if (ul_reason = DLL_PROCESS_ATTACH) { CreateThread(NULL, NULL, GameHacking_thread, NULL, NULL, NULL); CreateConsole(); }}MODULEINFO GetModuleData(char* module_name){ MODULEINFO moduleInf = { 0 }; HMODULE hModule = GetModuleHandle(module_name); if (hModule == NULL) return moduleInf; GetModuleInformation(GetCurrentProcess(), hModule, &moduleInf, sizeof(MODULEINFO)); return moduleInf;}bool DataCompare(const BYTE* pData, const BYTE* patern, const char* mask){ for (; *mask; ++mask, ++pData, ++patern) if (*mask == 'x' && *pData != *patern) return false; return (*mask) == NULL;}DWORD FindPattern(DWORD start_address, DWORD length, BYTE* pattern, char *mask){ for (DWORD i = 0; i < length; i++) if (DataCompare((BYTE*)(start_address + i), pattern, mask)) return (DWORD)(start_address + i); return NULL;}void CreateConsole(){ int hConHandle = 0; HANDLE lStdHandle = 0; FILE *fp = 0; AllocConsole(); SetConsoleTitle("Loader"); lStdHandle = GetStdHandle(STD_OUTPUT_HANDLE); hConHandle = _open_osfhandle(PtrToUlong(lStdHandle), _O_TEXT); fp = _fdopen(hConHandle, "w"); *stdout = *fp; setvbuf(stdout, NULL, _IONBF, 0);}int* ReadPointer(DWORD base, int offsets[], int level){ int* pointer = (int*)base; for (int i = 0; i < level; i++) { pointer = (int*)(*pointer + offsets[i]); //printf you poiner } return pointer;}DWORD WINAPI GameHacking_thread(LPVOID){ CreateConsole(); printf("sdfhduiy89ydfg"); DWORD oldProtect = 0; memcpy((void*)0x002A1520, (PBYTE)"\x32\x00\x00\x00", 4); /*int addr = 0x0F67C226; int size = 3; char ByteForEquip[] = "\x90\x90\x90"; VirtualProtect((void*)addr, (size_t)size, PAGE_EXECUTE_READWRITE, &oldProtect); memcpy((void*)addr, (PBYTE)ByteForEquip, size); VirtualProtect((void*)addr, (size_t)size, oldProtect, &oldProtect);*/ return true;}
  5. Точно, точно... Тупанул, бывает)
  6. Нужно в теме написать "Осторожно! Вызывает привыкание!"
  7. Грызу гранит CreateToolhelp32Snapshot. В общем-то, не так сложно, как выглядит на первый взгляд. Продвинулся дальше, чтение памяти процесса и запись в него. Пошел на сайт pinvoke.net (не рекламирую, просто там описания подобного рода функций беру) ну и взял некоторые описания. При компиляции выдает много ошибок #include <iostream>#include <conio.h>#include <Windows.h>#include <TlHelp32.h>#include <stdio.h>using namespace std;int main(int, char *[]){ [DllImport("kernel32.dll", SetLastError = true)] static extern bool WriteProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int nSize, out IntPtr lpNumberOfBytesWritten); [DllImport("kernel32.dll", SetLastError = true)] static extern bool ReadProcessMemory( IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, out IntPtr lpNumberOfBytesRead); setlocale(LC_ALL, "Russian"); char ProcessName[] = "notepad.exe"; PROCESSENTRY32 entry; entry.dwSize = sizeof(PROCESSENTRY32); HANDLE SnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); if (Process32First(SnapShot, &entry) == TRUE) { while (Process32Next(SnapShot, &entry) == TRUE) { if (strcmp(entry.szExeFile, ProcessName) == 0) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); cout << "ProcessID = " << entry.th32ProcessID << endl; printf("ProcessID (hex) = 0x%X \n", entry.th32ProcessID); cout << "ProcessHandle = " << hProcess; int ByteOfRead = 0; DWORD Read = ReadProcessMemory(hProcess, 0x774DAD00, char buffer[5], 5, &ByteOfRead); cout << Read; CloseHandle(hProcess); } } } _getch();}
  8. Вот зачем ты сказал об этой игре? Я же спать собирался... Завтра на учебу... Что ты со мной делаешь?
  9. RockHammer

    Чат

    Да, было как-то веселей, чтоли... А что нужно сделать, чтобы войти туда? Какую учетку он требует?
  10. RockHammer

    Чат

    Я вышел на 5 секунд... И... Где чат? Или я один избранный, который его не видит? ЗЫ: для тех кто еще не видел - тут был чат. Ну не прямо тут, но наверху сайта.
  11. Нет, дело не в формулировке. Боюсь, что не сбудется)
  12. И да, напиши-таки dll, которая сама инжектится с хуком dx9, да ещё чтоб она не требовала эскалацию привилегий - думаю всем будет очень интересно взглянуть на это в деле. Это кому? Почему? Яж не для онлайн игр спрашиваю... Да и ты не для онлайн игр отвечаешь)) Печально ( Нет исходников. А ты подключаешь неизвестные какие-то GDI библиотеки.
  13. Создает видимость того, что это внешний external трейнер. У меня, на самом деле, немного посложнее идейка. Полностью описать не могу, т.к. нужно её еще реализовать. Как реализую - мигом презентую на GameHackLab
  14. Добрый день. Хочу создать DLL Injector. Очень оригинально, правда?)) На самом деле, не совсем. Есть одна особенность: DLL'ка должна быть в ресурсах проекта. Идеальное решение для социопатов. Не доверять пользователю ничего) Даже дллку держать в себе. Проблема в том, не знаю как реализовать. Сам код инжектора уже готов: #include <iostream>#include <Windows.h>#include <TlHelp32.h>using namespace std;bool InjectorDLL(DWORD ProcessID);char FileToInject[] = "mytemp.dll";char ProcessName[] = "notepad.exe";typedef HINSTANCE(*fpLoadLibrary)(char*);int main(){ setlocale(LC_ALL, "Russian"); SetConsoleTitle ("GameInjector"); DWORD processId = NULL; PROCESSENTRY32 pe32 = {sizeof(PROCESSENTRY32)}; HANDLE hProcSnap; while (!processId) { system("cls"); //cout << "Process Name == Game.exe" << endl; cout << "DLL Name == mytemp.dll" << endl; cout << "DLL Path == С:\\" << endl << endl; cout << "Searching " << ProcessName << " ..." << endl; hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (Process32First(hProcSnap, &pe32)) { do { if(!strcmp(pe32.szExeFile, ProcessName)) { processId = pe32.th32ProcessID; break; } } while(Process32Next(hProcSnap, &pe32)); } Sleep(1000); } while(!InjectorDLL(processId)) { system("cls"); cout << "Я не смог заинжектить твою библиотеку :(" << endl; Sleep(1000); } cout << "Ваша библиотека успешно внедрена!" << endl; cout << "Закрываю инжектор через 5 секунд" << endl; Sleep(1000); cout << "Закрываю инжектор через 4 секунд" << endl; Sleep(1000); CloseHandle(hProcSnap); cout << "Закрываю инжектор через 3 секунд" << endl; Sleep(1000); cout << "Закрываю инжектор через 2 секунд" << endl; Sleep(1000); cout << "Закрываю инжектор через 1 секунд" << endl; Sleep(1000); return 0;}bool InjectorDLL(DWORD ProcessID){ HANDLE hProc; LPVOID paramAddr; HINSTANCE hDll = LoadLibrary("kernel32"); fpLoadLibrary LoadLibraryAddr = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA"); hProc = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID); char dllPath[250] = "C:\\"; strcat(dllPath, FileToInject); paramAddr = VirtualAllocEx(hProc, 0, strlen(dllPath)+1, MEM_COMMIT, PAGE_READWRITE); bool memoryWritten = WriteProcessMemory(hProc, paramAddr, dllPath, strlen(dllPath)+1, NULL); CreateRemoteThread(hProc, 0 , 0 , (LPTHREAD_START_ROUTINE)LoadLibraryAddr, paramAddr, 0, 0); CloseHandle(hProc); return memoryWritten;}
  15. Учту, спасибо! Сделаю крестики нолики. Отправлю заявку на добавление в стим)))
  16. Печально. Легко. Не важно, какой тип использует игра, и знаешь ли ты его или нет. Не находится значение? Чекай через "неизвестное" && "изменилось-неизменилось". Возможно, процесс поиска будет дольше - но никто же не говорил, что будет легко. Это самый верный 100% вариант, не ошибешься. Вообще, в Assassins Creed стоит фирменная "юбиковская" защита. Я ее пробил в юнити. А вот друг, когда ломал AS4 - мультик, он говорил, что там немного по другому. В каждой версии Assassins Creed разная защита. Чтобы, таки, запутать честных геймхакеров, но ее можно обойти. Ведь существуют трейнеры на AS в паблике? Значит это возможно.
  17. Я ни на что не намекаю, но помоему твою идею сплагиатили... ))) Спасибо большое)
  18. Интересно... А у MasterGH есть уроки? Естественно! Помню, как около месяца назад, читал статью про взлом вебсайтов (sql инъекции). Там объяснялся принцип взлома вообще любого приложения/сайта/софта/пентагона. Не помню, где читал... Ссылку надыбать не могу, но вот мой пересказ: "Взлом - заключается в знании начинки устройства, его изготовлении. Т.е. взлом замка отмычкой - есть хаккерский взлом. А взлом замка кувалдой - нет." Но все же... Есть ведь на свете люди, которые делятся своими знаниями о взломе игр с публикой... З.ы. к тому же, не представляю как могут делатся игры)
  19. Добрый день. Начал писать движок чита. В общем-то, все идет к завершению *тьфу-тьфу-тьфу*, и скоро дллка будет готова. Начинаю подумывать: "а зачем писал?", ведь игры реверсить толком не умею. Конечно, умею искать неизвестные значения, чекать адреса, искать указатели, делать aob scan (на луа и на с++), писать в адреса, убивать инструкции, делать инъекции... Но этого мало. В других трейнерах (на ту же игру) я почти всегда вижу гораздо больше функций, чем у меня. И мне не всегда понятно как другие тру-хацкеры эти адреса ищут (или не адреса...) Таких трейнеров множество, а значит, есть и источники, которые научили тру-хацкеров. Кто знает, где эти источники? Как научится реверсить игры? Или... ломать структуры игрока или что-то еще? Буду благодарен ссылкам на статейки, видео-туториалам или любым другим советам
  20. Эм... Никого не хочу обидеть, но вам не кажется, что вести разговор одновременно на 5 разных тем - немного странно? Imho, of course.
  21. Конечно. Потому что не знаю как делать иначе. + memcpy легче в реализации.
  22. Ok, а если размер, который я передам - больше четырех? И, пример использования: // пример с восстановлением оригинальной защиты памятиint main(){ void* address = 0x00403000; unsigned int oldProtect = 0; if (SetMemoryProtect(address, 12, PAGE_EXECUTE_READWRITE, &oldProtect)) //не совсем понятно условие... Если... Что? Мб if(SetMemoryProtect == true) или false? { // тут что-то делаем с памятью /* ну да, memcpy(и погнали) */ // восстановление оригинальной защиты памяти SetMemoryProtect(address, 12, oldProtect, 0); /* второй аргумент - размер? и четвертый... Т.е. никуда не записываем прежнюю защиту? */ } return 0;}
  23. Спасибо) Я старался) Костыли - это то, на чем держится мой софт))) // address - указатель на блок памяти; blockSize - размер блока памяти; newProtect - новая защита памяти; указатель на старую защиту памяти (опциональный параметр) bool SetMemoryProtect(void* address, size_t blockSize, unsigned int newProtect, unsigned int* oldProtect = 0){ DWORD filler; //Зачем инициализировалась эта переменная? if (blockSize < 4) //откуда мы взяли четверку? blockSize = 4; //странная операция if (!oldProtect) // Если oldProtect не равно... чему? oldProtect = &filler; //то присваиваем значение oldProtect - filler'у. Зачем? return VirtualProtect(address, blockSize, newProtect, oldProtect) != 0; //тут, как я понимаю, описан положительный исход.}Не совсем понятно, что делает эта функция. Поставил комменты для конкретизации.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.