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

Xhayla

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

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

  • Посещение

Репутация

1 Навыки не прокачены

Информация о Xhayla

Посетители профиля

1 851 просмотр профиля
  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(след инструкция), верно?
×
×
  • Создать...

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

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