-
Постов
105 -
Зарегистрирован
-
Посещение
-
Победитель дней
8
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные doc9009
-
-
блин я уже мозг себе сломал... уже свой инжектор написал с привилегиями дебагера все равно нулевой результат... вот сурс dll http://rghost.ru/47338694 вот сурс инжектора http://rghost.ru/47338840 все писал в 2012 студии. инжектор писал в попыхах так, что не судите строго за косяки типа восстановления обычных прав приложения (debug disable)
-
по ходу не проходит инжект... пробовал втыкать мессэдж бокс, но при инжекте не вылезло мое сообщение...
BOOL WINAPI Dllmain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
//CreateThread(NULL, NULL, FarCry_thread, NULL, NULL, NULL);
MessageBox(NULL, "test", "ds", MB_OK);
return true;
}
return false;
}что мне делать, есть советы?
far cry у меня издательства от буки 1.04 версия крякнутая... ну думаю на такой старой игре навряли будет какая-либо защита от ижекта
-
все равно ноль эмоций... хоть CE и написал, что dll внедрена. странно вообще
-
делаю инжект dll через инжектор winject, а ноль эмоций... по идее должна выскочить консоль с надписью hello, инжектор не ругается говорит мол все нормально.
вот исходник, делал по уроку кодера:
#include <Windows.h>
#include <fcntl.h>
#include <stdio.h>
#include <io.h>
DWORD WINAPI FarCry_thread(LPVOID);
BOOL WINAPI Dllmain(HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
{
CreateThread(NULL, NULL, FarCry_thread, NULL, NULL, NULL);
return true;
}
return false;
}
void CreateConsole()
{
int hConHandle = 0;
HANDLE lStdHandle = 0;
FILE *fp = 0;
AllocConsole();
lStdHandle = GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle(PtrToUlong(lStdHandle), _O_TEXT);
fp = _fdopen(hConHandle, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
}
DWORD WINAPI FarCry_thread(LPVOID)
{
CreateConsole();
printf("HELLO!");
Sleep(10000);
FreeConsole();
FreeLibraryAndExitThread(GetModuleHandle("farcry_inject.dll"), 0);
} -
мне использование AOBscan-a тоже больше по душе, но уж очень долго бывает он ищет адрес по сигнатуре. Ладно буду думать и курить форумы о том как можно быстрее сканировать память.
-
ну во - первых отсев адресов ты не правильно делаешь , во-вторых в СЕ 6.2 есть такая штука - называется "Найти указатель на этот адрес"(в русской версии) - это автоматический поиск указателей , используй её , а в-третьих чем тебе статически адрес не нравится , найди статику , зачем тебе динамический адрес и еще и с кучей офсетов , что ты хочешь сделать?
таким образом в процессе отсеивания остаются 3 оффсета, которые успешно не работают на другом pc...
ну во - первых отсев адресов ты не правильно делаешь , во-вторых в СЕ 6.2 есть такая штука - называется "Найти указатель на этот адрес"(в русской версии) - это автоматический поиск указателей , используй её , а в-третьих чем тебе статически адрес не нравится , найди статику , зачем тебе динамический адрес и еще и с кучей офсетов , что ты хочешь сделать?
статический адрес у меня есть(нашел его). от него желательно бы найти цепочку оффсетов к деньгам, зачем она мне нужна? чтобы можно было быстро записать данные из программы на с++. Поиск сигнатур не хочу делать так как это отнимает время секунд 30 до того как найдется нужный адрес.
искать путь к статичесскому адресу решил от ячейки с деньгами, потому как по определению вроде у каждого адреса есть последовательность смещений, которая приводит к статическому адресу. пробовал искать наоборот от статического к динамическому с деньгами, но там уйма мусора на бряке появляется, как собственно я и предполагал.
-
спасибо, я как раз уроки кодера смотрю, но до этого урока пока не дошел, поэтому поднял на мой взгляд теперь глупую тему
-
посмотри тут кодер реверсил игру и проведи аналогии я таким образом без проблем нашел ид игрока и союзников в игре mass effect
-
Пытаюсь найти цепочку оффсетов для адреса, в котором содержатся кредиты, вот алгоритм моего поиска:
1) нашел адрес со значением кредитов и поставил бряк на запись Если наш адрес = 27C7BD60, то получается следующий адрес нам надо искать со значением 27C7BD00 = (27C7BD60 -60)
2) нашлось несколько адресов я взял тот, что ближе находится к тому, что я искал и поставил бряк на доступ получил (269D58EC - 3EC)=269D5500
3) ищу адрес со значением 269D5500 находится целая куча адресов, я опять же выбираю те, что ближе всего находятся... Беру первый, что ближе ставлю бряк получаю это далее если вбиваю адрес, то ничего не находит, думаю ну ок беру следующий, что ближе и ставлю бряк вижу смещение 28 получаю (24A4DC28 - 28)=24A4DC00
4)вбиваю в поиск 24A4DC00 нахожу адреса и ставлю бряки и тут впадаю в ступор, что дальше?
-
проблема кроется я думаю потому что в этой функции с нужного процесса ничего не считывается
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;
}не долго думав мне пришло в голову, что по идее можно использовать readprocessmemory, но тут же я поймал ступор, как пользуясь этой функцией можно прочитать всю последовательность байт по нужному адресу, а не только значение, которое там лежит?
-
возникает ошибка нарушение прав доступа на моменте поиска по сигнатуре, уже весь мозг себе поломал, вот мой код:
void Button1Click(HWND hWnd)
{
HWND hWndGame = NULL;
DWORD pid = 0;
HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
MODULEENTRY32 me32;
DWORD BA = NULL;
hWndGame = FindWindow(NULL, TEXT("Mass Effect"));
GetWindowThreadProcessId(hWndGame,&pid); // запоминаем номер в переменную pid
hModuleSnap = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, pid );
me32.dwSize = sizeof( MODULEENTRY32 );
Module32First(hModuleSnap, &me32);
BA = (DWORD)me32.modBaseAddr;
//80 93 73 00 06 00 00 00 00 00 E0 40 00 00 C8 42
DWORD address1 = FindPattern(BA, 0xFFFFFFFF, (PBYTE)"\x80\x93\x73\x00\x06\x00\x00\x00\x00\x00\xE0\x40\x00\x00\xC8\x42", "????xxxxxxxxxxxx");
}
bool bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
if(*szMask=='x' && *pData!=*bMask)
return 0;
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;
}AOBscan-ом пытаюсь отыскать адрес денег по составленной сигнатуре, есть подозрение, что я не правильно составил сигнатуру, сейчас опишу как я её составлял:
1) в CE нашел адрес с деньгами
2) нажал просмотреть этот регион памяти
3) там был код вида (80 93 73 00 06 00 00 00 00 00 E0 40 00 00 C8 42), сделал эксперимент с деньгами меняя их значение и этим я выяснил, что первый байт отвечает за кол-во денег(80 93 73 00), остальные 3 байта вроде статичны
4) составил сигнатуру и маску: (80 93 73 00 06 00 00 00 00 00 E0 40 00 00 C8 42); (????xxxxxxxxxxxx)
все понял код для инжекта dll же... может кто подсказать как то же самое осуществить без инжекта?
и я буду очень благодарен тому кто объяснит мне работу сканера сигнатур(его подробный алгоритм)
-
спс, сейчас буду курить)
-
так exe файл игры и называет MassEffect.exe
-
-
мне нужно получить адрес модуля, но функция почему-то не видит данный модуль в чем проблема?
вот код который я использую:
void Button1Click(HWND hWnd)
{
DWORD Radar = (DWORD)GetModuleHandleA("MassEffect.exe");
DWORD error = GetLastError();
}после выполнения GetModuleHandle возвращается ошибка 126... Есть подозрение, что нельзя таким образом узнать адрес MassEffect.exe.
были мысли получить его открытием процесса функцией openprocess, которая возвращает HANDLE процесса, но как из хэнда получить адрес процесса?
-
Можно использовать Lua плагин. Положить файлы в папку автозапуска CE. 1) Запустить CE 2) Найти адрес 3) Поставить бряк, перейти в игру, выбрать инструкцию 4) Перейти в дизассемблер по инструкции 5) Вызывать контекстное меню на инструкции *Creare AA AOBScan 6) Найти в главной таблице созданный скрипт, проверить или исправить
просмотрел работу плагина, меня впечатлило даже очень) на счет aobscan как я понял ему всегда надо просто передавать последовательность байт нескольких соседних инструкций?
-
Кури форум..... на форуме есть подробная тема про аобскан....
я уже весь форум облазил за весь день, так и не нашел тутор по aobscan только проблемы связанные с ним видел....
P.S.: Но есть и положительные стороны моих неудачных поисков, а именно я наткнулся на уроки кодера, очень интересно рассказывает все)
P.p.s: Можно подсказку в каком разделе форума лежит тутор по aobscan?
-
привет всем, у меня вопрос вот вы привели пример скрипта с aobscan в целом все понятно, но возникает вопрос откуда и каким образом вы брали набор байт внутри функции aobscan?
aobscan(aob_god_1,"D8 AB 04 01 00 00 D9 9B 04 01 00 00 8B 95 F0 F8 FF FF B9")в тему с видео по использованию aobscan в mafia 2 не посылайте там ссылка мертвая на видео.
Mortal Kombat Komplete Edition v1.0 steam rip
in Вопросы по созданию читов в одиночных играх
Опубликовано
Режим бога:
смещение 10 указывает на id игрока. ID игрока в формате DWORD. Так же ID первого игрока = 3E8; ID второго игрока = 3E9.
Таймер раунда вообще статический, днем отредактирую тему и добавлю onehitkill и ноп таймера.
Скрипт выложил тут потому как в нужном разделе мне нельзя создавать темы.
Вот ссылка на готовую таблицу со скриптом http://rghost.ru/47341576