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

Xhayla

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

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

  • Посещение

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

  1. Написал для проверки вот такую программу: Которая при нажатии на Enter выводит в консоль значение из переменной "result". Пытаюсь сделать примерно тоже самое, что делалось в уроке - "04. Продвинутые инструменты IDA и Ghidra. Перехват сетевых пакетов изнутри игры". Только перехватываю функцию GetSerial, которая по указателю на переменную, вписывает в нее значение - 100. Дальше смотрю псевдокод: main -> https://ibb.co/DRfbWp2 Call на функцию getSerial: https://ibb.co/K74nVZg - вижу что функция sub_E713A2 вызывает getSerial Cама функция getSerial(sub_E71890) : https://ibb.co/ydtQ6Lf Ставю хук на фунцию - sub_E713A2, которая вызывает getSerial - https://ibb.co/r2VGpGF Пытаюсь сделать так, чтобы в итоге getSerial возвращала не 100, а к примеру 111. После инжекта DLL программу крашит...
  2. В общем, через Гидру посмотрел как программа получает серийный номер МП, там принцип такой, запускается в скрытом режиме CMD через CreateProcess, с параметрами запуска - "wmic baseboard get serialnumber", серийник записывается в скрытый временный файл, далее с этого файла серийник считывается через ReadFile, а временный файл удаляется. Поставил хук на ReadFile - https://ibb.co/s2YgRZD и все получилось ☺️ Вообщем огромное спасибо за подсказку.
  3. Имеется тестовая программа, которая через CMD считывает серийный номер материнской платы(wmic baseboard get serialnumber), можно ли как-то подсунуть программе другой серийный номер? Ведь просто так серийный номер материнской платы не поменять.
  4. Спасибо, если не сложно, скажите пожалуйста, я изменяю Protect памяти на нужный мне, но, я указываю 5 байт, а он изменят защиту на всей странице, можно ли сделать так, чтобы он изменял защиту только 5 байт, которые я указал. Если нет, то как программно узнать с какого адреса он изменил защиту? VirtualProtect(reinterpret_cast<void*>(from_addr), 5, PAGE_EXECUTE_READWRITE | PAGE_GUARD, &dwOld);
  5. Получаю нужные мне адреса. DWORD from_addr = (DWORD)GetModuleHandle(L"Game.dll") + 0x36143B; DWORD jmp_original = (DWORD)GetModuleHandle(L"Game.dll") + 0x361440; В массив jmp записываю адрес прыжка обратно jmp_original, в оригинальный код. BYTE jmp[5] = { 0xE9 }; memcpy(jmp + 1, (const void*)jmp_original, 4); Далее выделяю память в размере 10 байт. 5 байт для нужной мне инструкции + 5 дня прыжка обратно. DWORD alloc_addr = (DWORD)malloc(10); // выделяю память. memcpy((void*)alloc_addr, (void*)from_addr, 5); // в первые 5 байт выделенной памяти записываю инструкцию размером 5 байт из оригинала. memcpy((void*)(alloc_addr + 0x5), (void*)&jmp, 5); // в оставшиеся 5 байт, записываю адресс прыжка обратно. После инъекции DLL в процесс, нахожу выделенную память, в итоге нужная инструкция скопировалась нормально, а вот прыжок обратно указывает совсем на другой адрес. СКРИНШОТ ИЗ CE выделенной памяти
  6. Пробовал с помощью кода выше с копии прыгнуть обратно на оригинал, не получилось. (У меня:) )
  7. код который Вы скинули мне выше, это для того чтобы с копии прыгать в нужный мне адрес?
  8. Игра называется Warcraft 3 TFT, возможно в CE StealthEdit это реализовано по другому.
  9. А хотя если подумать, есть ли смысл копировать из оригинального адреса байты в выделенную память, потом оттуда прыгать на оригинальный код, если Вы( @partoftheworlD ), показали другой способ. Просто при срабатывании нужного хука, буду переводить туда оригинальный код. pExceptionInfo->ContextRecord->Eip = reinterpret_cast<DWORD>(&patch); Вот только странно, почему в CE когда изменяешь байты через StealthEdit, игры не зависает и не идет рывками, а через PugaGuard на С++ наоборот, зависает. Хотя и там и там тот же адрес хукается.
  10. Мне нужно из копии в конце прыгнуть на вот этот адрес 0x6F361395, то-есть чтобы в копии был оригинальные байты + прыжок обратно.
  11. @partoftheworlDя Вас уже замучал ?, скажите пожалуйста. Как вписать в copyAddress, чтобы от туда в конце прыгать на оригинальный код, а именно на jmp_back.
  12. Ну смотрите, я изменил INS_SIZE с 10 на 5. А в value вписал следующий код - Ну и конечно же поменял адреса начала прыжка и обратный прыжок, странно почему он так зависает.(Если что адрес прыжка состоит из 5 байт, поэтому в INS_SIZE вписал 5). То-есть, если выше адреса, который жду в исключении, будет очень много инструкций будет - зависать? Насколько я понимаю, там где вешается Protect: PAGE_GUARD он тоже будет отлавливаться, тогда как сделать так, чтобы VirtualProtect ставил PAGE_GUARD только на те кол-во байт, которые я указал, а не на всю страницу, можно ли с этим что-то сделать? Ведь в CE не виснет как тут, хотя он там тоже выставляет на всю страницу PAGE_GUARD.
  13. @partoftheworlD, еще раз огромное спасибо Вам, все получилось, переделал когда под игру, изменил адрес прыжка и адрес возврата, так же код изменил на нужный, вот только тут проблема, игра стала зависать, fps упал до 30 и начал идти рывка, в меню игры все хорошо, но как только игра начинается, сразу начинает идти рывками что-ли, не связано ли это с тем, что PageGuard Hooking сам по себе медленный? Поскольку в виндовс на отлов исключений нужно какое-то время.
  14. и сразу после того как копия выполнится, прыгнуть в jml_original? Если к примеру у меня копия не 1 инструкция, а к примеру 1000 строк, если прыгнуть в jmp_original он все равно в правильный адрес прыгнет? Как у Вас в видео, Вы сперва из 0x0042578C прыгаете на свою функцию, после возвращаетесь на 2 инструкцию после 0x0042578C, а если к примеру, прыгать из 0x0042578C и выполнять 5 инструкций, чтобы правильно приземлиться после хука, нужно jmp_original так вычислять - jpm_original = (DWORD)(pExceptionInfo->ContextRecord->Esp + 5; ? На счет защиты, как только мне перестанет быть нужен ХУК, нужно вернуть старую защиту и снять отлов исключений?
  15. К примеру у меня есть участок скопированного кода, размером 300 байт, я перевожу код на копию, и в конце чтобы вернутся нужно к оригинальному адресу прибавить 300(размер копии оригинала) + 1(след инструкция), верно?
  16. @partoftheworlD, огромное спасибо, а откуда Вы взяли значение INS_SIZE = 10, почему 10? А еще, если я вместо value() укажу адрес указывающий на копию памяти, после того код ее выполнит, в конце нужно будет возвращаться на оригинал?
  17. @partoftheworlD, Жду, очень нужно, 2 день в тупике, сперва пробовал на игре, ничего не получалось, потом подумал, неужели вообще не работает, решил ТУПА попробовать на приложение где 3 строчки когда, ЦИКЛ - СООБЩЕНИЕ - ЗАДЕРЖКА, даже тут не получилось... Вы хорошо знаете C++?
  18. Я хочу понять, как делается PageGuard Hooking на C++, а это программа просто для проверка, работает или нет.
  19. Всем привет. Имеется приложение для теста Dll`ки, вот ее код. Мне нужно изменить Sleep(5000) - 5 секунд на Speel(1000) к примеру. Я нашел инструкцию в которой хранится значение "sleep(5000)", вот так выглядит(ТЫК) За счет Dll`ки, я хочу перевести код на копию этого участка, где значение будет уже не 5000мс, а к примеру 1000мс.(для того чтобы понять, работает DLL или нет). Вот код самой DLL Теперь, я делаю инжект этой DLL в процесс, а программа просто зависает. ЗАПИСАЛ ВИДЕО НА YOUTUBE
  20. @partoftheworlD Когда выполняется VirtualProtect, в том месте где я его выполняю все становится пустое, ВОТ СКРИНШОТ
  21. Да, спасибо, я тогда еще не понимал этого, выше скинул код для @partoftheworlD, вдруг глянет, подцепляю DLL игру крашет, проверяю оригинальный адрес, ОТКУДА я копировал страницу, вообще пустой, поэтому и крашет.
  22. @partoftheworlD посмотрите пожалуйста код для DLL'ки вот, почему то не работает.
  23. Изначально мне нужен был аналог функции StealthEdit на CE, тогда на C++. Есть программа, в которой просто так не сделаешь jmp, поэтому нужно перенаправлять код в другой участок без изменение байтов. Изначально код который Вы мне написали был рассчитан на DLL? @partoftheworlD я переписал код на DLL, подцепляю DLL к нужной игре, но, оригинальный участок кода, исчезает, то-есть участок который я копировал, становится пустым.
  24. Получается нужно сейчас весь код в DLL переносить? С другой стороны, там и готовые функции из коробки есть.
  25. Из одного процесса поставить UnhandledExceptionFilte в другой вообще никак нельзя?
×
×
  • Создать...

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

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