RockHammer Опубликовано 27 января, 2015 Поделиться Опубликовано 27 января, 2015 Собираю конструктор из кусков кода. В принципе, сам код я понимаю (его смысл, структуру и цель прибытия на эту планету) - но не студию.Написал код. И почему-то главный поток не хочет запускатся! (главный поток DLL) Код:Первые симптомы появились, когда я написал появление консольки... Но она не запустилась.Решил хакнуть блокнот (мама ама криминал) и вызвал memcpy чтобы просто изменить значение через байты. (защиты на памяти - нет)Ничего не произошло. Инжектил кодеровским инжектором. Плюс - сторонним (малоли).Кодировка - мультик.Зы: незнаю, могло ли это повлять на студию (на нее все может повлиять... и погода, и твое настроение) - но я сменил тему оформления студии на темную.#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;} Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 27 января, 2015 Поделиться Опубликовано 27 января, 2015 DllMain должна вернуть 1, в противном случае - Dll выгружается.https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx (внимательно прочитай про Return Value). Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 27 января, 2015 Автор Поделиться Опубликовано 27 января, 2015 DllMain должна вернуть 1, в противном случае - Dll выгружается.https://msdn.microsoft.com/en-us/library/windows/desktop/ms682583.aspx (внимательно прочитай про Return Value).Казалось бы - 10 символов кода... А могут решить продуктивность остальных 1000-1500. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 27 января, 2015 Поделиться Опубликовано 27 января, 2015 Казалось бы - 10 символов кода... А могут решить продуктивность остальных 1000-1500.Код не измеряется в символах) Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 27 января, 2015 Автор Поделиться Опубликовано 27 января, 2015 Код не измеряется в символах)Почему же? На фрилансе некоторые заказчики измеряют его строчками)) Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 28 января, 2015 Поделиться Опубликовано 28 января, 2015 Мне интересно, как оно у тебя вообще скомпилировалось, если DllMain ничего не возвращает. Для чего, кстати, тебе потоки понадобились? CreateThread, насколько я помню, в последний свой аргумент при вызове возвращает идентификатор потока, а сама фунция - хэндл. Во-первых, с этими данными можно управлять потоком(-ами), а во-вторых - проверить, корректно ли он(и) запустились. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 28 января, 2015 Автор Поделиться Опубликовано 28 января, 2015 Мне интересно, как оно у тебя вообще скомпилировалось, если DllMain ничего не возвращает. Для чего, кстати, тебе потоки понадобились? CreateThread, насколько я помню, в последний свой аргумент при вызове возвращает идентификатор потока, а сама фунция - хэндл. Во-первых, с этими данными можно управлять потоком(-ами), а во-вторых - проверить, корректно ли он(и) запустились.Нуу... По сути, эта шляпа сейчас и не работает. Через раз работает. Память не изменяет, хоть и DllMain возвращает ноль.С потоками я и не работаю, я создаю главный поток при инжекте либа в процесс, и туда все запихиваю, что нужно.А нужен мне один поток - изменение памяти. Который уже раписан. Что нужно сделать, чтобы дллка работала? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 января, 2015 Поделиться Опубликовано 28 января, 2015 DllMain должна возвращать 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 28 января, 2015 Автор Поделиться Опубликовано 28 января, 2015 (изменено) DllMain должна возвращать 1Возвращает. Но дллка тем не менее работает через раз (адреса не всегда изменяет и консолька не открывается) Изменено 28 января, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения