Korol2010 Опубликовано 27 октября, 2014 Поделиться Опубликовано 27 октября, 2014 (изменено) Привет всем, у меня возникла проблема при сборке Dll. Возникло вот таких 3 ошибки:Ошибка 1 error LNK2026: небезопасный модуль для образа SAFESEHОшибка 2 error LNK2026: небезопасный модуль для образа SAFESEHОшибка 3 error LNK1281: Не удается создать образ SAFESEHПодскажите пожалуйста как исправить их? Я ещё только начинаю вникать в тему С++, так что плиз не ругайтесь если что))) Изменено 27 октября, 2014 пользователем Korol2010 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 27 октября, 2014 Поделиться Опубликовано 27 октября, 2014 Вопрос: как компиляция библиотек относится к разделу "Вопросы по созданию читов в сингловых PC играх"? Или к "Статьям для новичков"? Тему переместил в подходящий раздел. Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 27 октября, 2014 Автор Поделиться Опубликовано 27 октября, 2014 (изменено) Извиняюсь, конечно что может чуть не там написал, просто не знал где лучше. Но всё же вопрос этот очень интересует, а то уже 2 раз не хрена не выходит сделать свою читерскую Dll, первый раз когда я делал Dll, она вообще не работала, хоть и собралась, а теперь, вот те новость, вообще не хочет собираться((( Изменено 27 октября, 2014 пользователем Korol2010 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 27 октября, 2014 Поделиться Опубликовано 27 октября, 2014 В 27.10.2014 в 23:04, Korol2010 сказал: Извиняюсь, конечно что может чуть не там написал, просто не знал где лучше.Явно не в статьях, и не в вопросах создания читов, согласись? По поводу библиотеки - ты бы хоть код привел, на который компилятор ругается, или гуглить. Первый результат гугла: тык, и статья на MSDN Цитата Установка данного параметра компоновщика в среде разработки Visual Studio 1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Задание свойств проекта C++. 2. Выберите папку Компоновщик. 3. Выберите страницу свойств Командная строка. 4. Введите значение в поле Дополнительные параметры.Вводим значение /SAFESEH:NO Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 28 октября, 2014 Автор Поделиться Опубликовано 28 октября, 2014 (изменено) Да возможно не в этих разделах надо было тему делать, но я просто подумал что раз Dll эта читерская с ассемблерным кодом, то вполне подойдёт раздел "Вопросов по созданию читов"))))Да на счёт гугла, я сразу же прогуглил, так же наткнулся на тему которую ты первую указал (в нгей я нефига не понял), но 2 тему я не находил к сожалению(( Спасибо к стате что нашёл мою проблему))) Щас попробую сделать как ты написал.Ура!)) Собрался наконец мой файлик))Да к стате, 1 вопросик чуть не по теме, как для этого скрипта сделать правильный pattern и вообще как правильно найти все эти байты? А то я дак не оч пока понимаю от куда это всё берётся.Да... вот скрипт на всякий: Показать контент Скрипт я делал по подобию скипта Coder'а.#include <Windows.h>#include <fcntl.h>#include <stdio.h>#include <io.h>#include <Psapi.h>#include <detours.h>#pragma comment (lib, "psapi.lib")DWORD WINAPI SpinTires_thread(LPVOID);DWORD retn_addr = 0;DWORD ohk = false;DWORD APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: CreateThread(NULL, NULL, SpinTires_thread, NULL, NULL, NULL); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return true;}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*pattern, const char*mask){ for (; *mask; ++mask, ++pData, ++pattern) if (*mask == 'x' && *pData != *pattern) return false; return (*mask) == NULL;}DWORD FindPattern(DWORD start_address, DWORD lenght, BYTE*pattern, char*mask){ for (DWORD i = 0; i < lenght; i++) if (DataCompare((BYTE*)(start_address + i), pattern, mask)) return (DWORD)(start_address + i); return NULL;}void InfinityHealth(){ _asm { mov dword ptr[ecx + 0xF0], 0x0 jmp retn_addr }}DWORD WINAPI SpinTires_thread(LPVOID){ MODULEINFO moduleInf = GetModuleData("SpinTires.exe"); DWORD old_prot = 0; DWORD ohk_address = FindPattern((DWORD)moduleInf.lpBaseOfDll, moduleInf.SizeOfImage, (PBYTE)"\x8B\x91\xF0\x00\x00\x00\xDB", "xxxxxxxxxxx"); ohk_address += 0x3; retn_addr = ohk_address + 0x6; BYTE nops[3] = { 0x90, 0x90, 0x90 }; BYTE original[6] = { 0x8B, 0x91, 0xF0, 0x00, 0x00, 0x00 }; for (;; Sleep(75)) { if (GetAsyncKeyState(VK_NUMPAD2) & 0x8000) { if (!ohk) { DetourFunction((PBYTE)ohk_address, (PBYTE)InfinityHealth); VirtualProtect(InfinityHealth, 3, PAGE_EXECUTE_READWRITE, &old_prot); memcpy(InfinityHealth, nops, 3); VirtualProtect(InfinityHealth, 3, old_prot, &old_prot); ohk = true; } else { VirtualProtect((void*)ohk_address, sizeof(original), PAGE_EXECUTE_READWRITE, &old_prot); memcpy((void*)ohk_address, original, sizeof(original)); VirtualProtect((void*)ohk_address, sizeof(original), old_prot, &old_prot); ohk = false; } } }} Изменено 28 октября, 2014 пользователем Xipho Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 9 марта, 2015 Поделиться Опубликовано 9 марта, 2015 В 28.10.2014 в 13:46, Korol2010 сказал: Да возможно не в этих разделах надо было тему делать, но я просто подумал что раз Dll эта читерская с ассемблерным кодом, то вполне подойдёт раздел "Вопросов по созданию читов"))))Да на счёт гугла, я сразу же прогуглил, так же наткнулся на тему которую ты первую указал (в нгей я нефига не понял), но 2 тему я не находил к сожалению(( Спасибо к стате что нашёл мою проблему))) Щас попробую сделать как ты написал.Ура!)) Собрался наконец мой файлик))Да к стате, 1 вопросик чуть не по теме, как для этого скрипта сделать правильный pattern и вообще как правильно найти все эти байты? А то я дак не оч пока понимаю от куда это всё берётся.Да... вот скрипт на всякий: Показать контент Скрипт я делал по подобию скипта Coder'а. Скинь полную версию кода#include <Windows.h>#include <fcntl.h>#include <stdio.h>#include <io.h>#include <Psapi.h>#include <detours.h>#pragma comment (lib, "psapi.lib")DWORD WINAPI SpinTires_thread(LPVOID);DWORD retn_addr = 0;DWORD ohk = false;DWORD APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: CreateThread(NULL, NULL, SpinTires_thread, NULL, NULL, NULL); case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return true;}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*pattern, const char*mask){ for (; *mask; ++mask, ++pData, ++pattern) if (*mask == 'x' && *pData != *pattern) return false; return (*mask) == NULL;}DWORD FindPattern(DWORD start_address, DWORD lenght, BYTE*pattern, char*mask){ for (DWORD i = 0; i < lenght; i++) if (DataCompare((BYTE*)(start_address + i), pattern, mask)) return (DWORD)(start_address + i); return NULL;}void InfinityHealth(){ _asm { mov dword ptr[ecx + 0xF0], 0x0 jmp retn_addr }}DWORD WINAPI SpinTires_thread(LPVOID){ MODULEINFO moduleInf = GetModuleData("SpinTires.exe"); DWORD old_prot = 0; DWORD ohk_address = FindPattern((DWORD)moduleInf.lpBaseOfDll, moduleInf.SizeOfImage, (PBYTE)"\x8B\x91\xF0\x00\x00\x00\xDB", "xxxxxxxxxxx"); ohk_address += 0x3; retn_addr = ohk_address + 0x6; BYTE nops[3] = { 0x90, 0x90, 0x90 }; BYTE original[6] = { 0x8B, 0x91, 0xF0, 0x00, 0x00, 0x00 }; for (;; Sleep(75)) { if (GetAsyncKeyState(VK_NUMPAD2) & 0x8000) { if (!ohk) { DetourFunction((PBYTE)ohk_address, (PBYTE)InfinityHealth); VirtualProtect(InfinityHealth, 3, PAGE_EXECUTE_READWRITE, &old_prot); memcpy(InfinityHealth, nops, 3); VirtualProtect(InfinityHealth, 3, old_prot, &old_prot); ohk = true; } else { VirtualProtect((void*)ohk_address, sizeof(original), PAGE_EXECUTE_READWRITE, &old_prot); memcpy((void*)ohk_address, original, sizeof(original)); VirtualProtect((void*)ohk_address, sizeof(original), old_prot, &old_prot); ohk = false; } } }} Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 14 марта, 2015 Автор Поделиться Опубликовано 14 марта, 2015 В 09.03.2015 в 13:57, RockHamer сказал: Скинь полную версию кодаПод спойлером и есть полный код. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 14 марта, 2015 Поделиться Опубликовано 14 марта, 2015 Привет! Сигнатура ищется через Cheat Engine или, например, через OllyDbg (есть для него плагин), при этом важно понять, как они работают. Насколько ты знаешь, скомпилированный ассемблерный код состоит из опкодов команд, адресов и смещений. Допустим, есть такой код: MOV EAX,EBXJMP 0x10 Перед тем, как просто копировать опкоды и использовать их в качестве сигнатуры, стоит немного осмотреть код и разобраться в нем. Первая команда поменяется только в каком-нибудь исключительном случае (скажем, очень большом патче для игры), а вот вторая может поменяться и при небольшом. Представим, что опкоды для второй команды выглядят примерно так: E900000010 E9 - опкод JMP, следующие четыре байта - адрес для прыжка. Эти четыре байта могут поменяться просто запросто - достаточно хотя бы один байт выше или ниже по коду добавить, потому что прыжок относительный (т.е. на некоторое количество байт вверх или вниз от текущего адреса). Такие вот вещи, которые могут легко и часто меняться (адреса и смещения в первую очередь) лучше загонять в wildcard, то есть сигнатура будет выглядеть так: E9???? Но в примере еще была команда MOV, опкоды которой можно взять целиком, я их сейчас придумаю из головы и получится как-то так: ABFFD9E3E9???? Вот и готово. Прежде всего такие сканеры должны искать определенную последовательность команд. В нашем случае это "MOV JMP", потом учитывать операнды, а только потом - адреса переходов и смещения в операндах. PS: Если ты не до конца понимаешь, как работает чей-то код, скрипт или любая методика взлома - лучше сидеть и задавать вопросы, пока тебе внятно не объяснят. Плох тот автор, который выкладывает готовое решение и не поясняет, как оно работает, или же не поясняет достаточно хорошо. Сначала разберись - потом используй сам и объясняй тем, кто еще не разобрался. 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 16 марта, 2015 Автор Поделиться Опубликовано 16 марта, 2015 Спасибо большое, вот только я не знаю как делать сигнатуру в СЕ, в оли вроде вышло, но она почему то всё равно не работала(( Игра на сколько я помню выдавала ошибку. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 17 марта, 2015 Поделиться Опубликовано 17 марта, 2015 В 16.03.2015 в 22:14, Korol2010 сказал: Спасибо большое, вот только я не знаю как делать сигнатуру в СЕ, в оли вроде вышло, но она почему то всё равно не работала(( Игра на сколько я помню выдавала ошибку.Сигнатуры делаются в олли. Там проще, потому что всё на автомате. В СЕ нужно ручками всё добывать, маску в том числе.Какую ошибку выдавала игра? Более развернуто изложи проблему. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 марта, 2015 Поделиться Опубликовано 17 марта, 2015 (изменено) В 16.03.2015 в 22:14, Korol2010 сказал: как делать сигнатуру в СЕЯ делаю так: Показать контент Установку нужных инструментов смотри здесь. PS: можно обойтись и без плагина, только с помощью сканера сигнатуры:3. Вручную копируем байты, оставляем байты только опкодов, остальные заменяем ХХ и проверяем уникальность. Изменено 17 марта, 2015 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 22 марта, 2015 Автор Поделиться Опубликовано 22 марта, 2015 В 17.03.2015 в 09:23, RockHamer сказал: Сигнатуры делаются в олли. Там проще, потому что всё на автомате. В СЕ нужно ручками всё добывать, маску в том числе.Какую ошибку выдавала игра? Более развернуто изложи проблему.Честно говоря какую конкретно я уже не помню, давно делал. Но пока не меря помню что после включения скрипта с камерой игры происходило что-то странное, она вставала на месте и показывала дерево)) Ну проще говоря наводилась на ландшафт и замирала, сделать ничего нельзя было. А чаще после моих пыток DLL вылазила какая-то ошибка, если не ошибаюсь что-то вроде Fatall Error. Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 22 марта, 2015 Автор Поделиться Опубликовано 22 марта, 2015 В 17.03.2015 в 09:44, garik66 сказал: Я делаю так: Показать контент Установку нужных инструментов смотри здесь. PS: можно обойтись и без плагина, только с помощью сканера сигнатуры:3. Вручную копируем байты, оставляем байты только опкодов, остальные заменяем ХХ и проверяем уникальность. Спс большое, попробую. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения