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

edx

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

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

  • Посещение

Репутация

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

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

  • День рождения 24 августа

Информация

  • Пол
    Мужчина
  • Интересы
    Python, C++, L2

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

3 929 просмотров профиля
  1. Ну, собственно вопросы пронумерованы в самом низу, многобукв что ли? Или мне предисловие убрать?)
  2. Всем здравствуйте. Я уже как-то затрагивал эту тему, но вскользь (там было про пайпы, чтение\запись памяти, shared sections и прочее) и я так толком и не нашел ответа. Суть вот в чем, есть GUI в виде exe-шника, написанного в VS 2019 с использованием конструктора и есть dll, которая загружается в процесс. Необходимо организовать обмен данными между dll и exe. Я в этом не сильно шарю..) Но пока что я остановился на OpenFileMapping по которым передаются структуры с данными. Порядок действий: Создаю одинаковые структуры там и там, к примеру: struct sysMessages { BOOL dllStatus = 0; BOOL update = 0; char* msg; }; struct userInfo { int User[50]; int Count; }; typedef struct { sysMessages messages; userInfo info; }BufferStruct, * pBufferStruct; pBufferStruct buf; И далее файл мэппинг: В DLL DataMapping = OpenFileMappingW(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, L"Local\\gui.datamap"); ActionsMapping = OpenFileMappingW(FILE_MAP_READ | FILE_MAP_WRITE, FALSE, L"Local\\gui.actmap"); Actions = (pActions*)MapViewOfFile(ActionsMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); buf = (BufferStruct*)MapViewOfFile(DataMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); В GUI DataMapping = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(buf), L"Local\\gui.datamap"); ActionsMapping = CreateFileMappingW(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(buf), L"Local\\gui.actmap"); Actions = (pActions*)MapViewOfFile(ActionsMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); buf = (BufferStruct*)MapViewOfFile(DataMapping, FILE_MAP_READ | FILE_MAP_WRITE, 0, 0, 0); И дальше просто пишу\читаю из структуры buf и Actoins. Тут возникло несколько вопросов: 1. Сколько хэндлов(если можно так сказать) файл маппинга можно открывать и как это скажется на скорости работы? 2. Не произойдет ли конфликта, если gui и dll одновременно будут писать/читать в/из структуру(ы)? Да, мне писали про согласование чтения\записи, но что будет если просто забить на это? 3. Если dll будет только писать в структуру, а gui только читать из нее, нужно ли думать о согласовании? 4. Есть ли какой-то мануал\статья по сокетам? По сути мне - нужно изменять значение переменных там и там. Еще где-то мельком видел инфу про создание внешних интерфейсов в dll и exe, но без каких-либо примеров.
  3. Хм, спасибо очень даже интересно и код при чем пишется на Python'е, что много проще, возьму в копилку. upd: Видео, и статейка на хабре:
  4. Всем доброго времени суток. Решил поботоводить известным ботом в известной игре:). Бот умеет решать капчу, но на данном сервере возникла проблема) Байпасы не перехватываются, а при попытке отправить какой-то из них (при чем верный), спустя пару попыток клиент закрывается, либо дисконнектит с сервера. Чтобы сильно не заморачиваться и не влезать в клиент, решил накидать прототип "решалки" на OpenCV. Применять можно абсолютно везде (в любой игре). Вид капчи: Софт: - VisualStudio 2019 - OpenCV 3.4.10 Итак, сначала нам надо получить handle окна, с которого мы будем снимать скрин: Для этого у нас будет 2 функции: GetPID и EnumWindowsProc Далее описание в коде: Скрины и описание: Пока что быстродействие сего чуда хромает. Программа является лишь прототипом для облегчения жизни себе любимому). Код "грязноват", есть лишние моменты, можно было упростить, перевести в GRAY, уменьшить картинку, возможно даже привести к сравнению хэшей, и так далее. Жду критики\предложений. Возможно буду дорабатывать программу под разные виды капч и сделаю GUI к ней (это не точно). Может кому пригодится)
  5. Спасибо, уже разобрался. Похукал немного функции, посмотрел что за параметры идут через стек и т.п. Теперь вопрос, как скрыть загруженную в процесс dll от сканера памяти) И как сделать беспалевный вызов API клиента. Есть какой-то способ заставить античит думать что эта DLL принадлежит клиенту и клиент сам использует свой API?
  6. Я не понимаю, не могу вызвать функции даже изнутри процесса. Клиент почему-то просто вырубается и все. Объявляю вроде правильно, вызываю тоже. typedef int(__thiscall* f_NextCreature)(int this_UNetworkHandler, float Radius, int PrevID); f_NextCreature call_GetNextCreature = reinterpret_cast<f_NextCreature>(0x203D7F30); float Radius = 100.0; int pClassUser = call_GetNextCreature(pUNetworkHandler, Radius, PrevID)); И все, при таком вот вызове клиент закрывается. Работает только одна функция GetUser.. Вот код из IDA 7: .text:203D7F30 ; Exported entry 5758. ?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z .text:203D7F30 .text:203D7F30 ; =============== S U B R O U T I N E ======================================= .text:203D7F30 .text:203D7F30 .text:203D7F30 ; struct User *__thiscall UNetworkHandler::GetNextCreature(UNetworkHandler *__hidden this, float, int) .text:203D7F30 public ?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z .text:203D7F30 ?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z proc near .text:203D7F30 ; DATA XREF: .text:20522E68↓o .text:203D7F30 .text:203D7F30 var_8 = dword ptr -8 .text:203D7F30 arg_0 = dword ptr 4 .text:203D7F30 arg_4 = dword ptr 8 .text:203D7F30 .text:203D7F30 mov edx, [esp+arg_4] Чего я не так делаю?
  7. А что обычно используют в таких случаях? В расчет беру частое обращение на запись/чтение. Принципиально ли использовать что-то конкретное? Быстродействие пайпа и маппинга здесь роли не играет как я понимаю из-за маленького объема данных?
  8. О, а можно немного подробнее про согласование? Я допустим сейчас сделал структуру общую, разметил её одинаково в обоих файлах, замапил. Вроде всё работает неплохо. Нужно не допустить одновременной записи и чтения одной и той же переменной? Я где-то читал про Event'ы, но так и не понял как они работают (пока что). Это из той оперы? upd: Или Вы имеете в виду очередность записи/чтения чтобы буфер не перекрывался разными переменными?
  9. UPD: Хм, в принципе, как вариант создать пару-тройку MappedFile, записать в них нужные переменные (а лучше структуру) для работы и использовать.. Но это же костыль и нерациональное использование ресурсов?)
  10. В общем, мне нужно как-то закостылить организовать (к примеру) вызов функции MoveToLocation, отправляя при этом в DLL координаты куда нужно бежать и BOOL параметр для активации функции. При этом, DLL должна непрерывно передавать параметры в GUI. Я немного не понимаю как использовать для этого пайп канал. Чтобы отправить команду в DLL из GUI мне приходится отстыковывать один пайп и пристыковывать другой.. Можно общаться одним пайпом как-то не перекрывая записанные данные? Я не нашел толковых примеров в гугле.. Нигде блин. Фрагмент кода GUI: Фрагмент кода DLL: Читал еще про FileMapping, выглядит очень удобно, но пока не понимаю как побайтно организовать несколько переменных, чтобы они корректно считывались? Как правильно отобразить несколько переменных в память? Не до конца понимаю смысл параметров dwFileOffsetHigh и dwFileOffsetLow. MapViewOfFileEx(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, DWORD dwNumberOfBytesToMap, LPVOID lpBaseAddress);
  11. Всем здравствуйте. Пишу бота с интерфейсом, застопорился на вызове функций из внедренной в процесс DLL-ки. Некоторую информацию можно получить удаленно через ReadProcessMemory по адресам и оффсетам, да. Но чтобы получать класс User к примеру, который имеет динамический адрес надо внутри процесса вызвать API функцию. И вот вопрос: каким способом это сделать из интерфейса? Кусочек кода: void memRead(HANDLE hProc, DWORD address, LPVOID buffer) { DWORD oldProtect = 0; VirtualProtectEx(hProc, (LPVOID)address, sizeof(buffer), PAGE_READWRITE, &oldProtect); ReadProcessMemory(hProc, (LPVOID)address, buffer, sizeof(buffer), 0); VirtualProtectEx(hProc, (LPVOID)address, sizeof(buffer), oldProtect, &oldProtect); } typedef int(__thiscall* f_GetUser)(int this_UNetworkHandler, int id); f_GetUser call_GetUser = reinterpret_cast<f_GetUser>(0x203D9150); int GetMyUserClass() { HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID); DWORD UNetworkHandler_this; int my_id; memRead(hProc, 0x20522A6C, &UNetworkHandler_this); memRead(hProc, 0x2077ED7C, &my_id); return call_GetUser(UNetworkHandler_this, my_id); //call_GetUser Возвращает адрес класса User CloseHandle(hProc); } ID и адрес класса UNetworkHandler получаются корректно, но функция не вызывается. Не пинайте меня, я еще многого не знаю..:) Изнутри процесса все окей, функция работает. Можно конечно постоянно юзать ее из DLL, но тогда я не знаю как правильно организовать обмен информацией между DLL и exe-шником. Через пайп как-то геморно.. Как вызвать функцию удаленно?
  12. А ты как собрался доставать значения из памяти? Просто типа int param = *(int*)0x26FC27DA ? Или ты хочешь влезть в процесс игры?
  13. Нашел Ваш мануал по UE3, не сразу въехал, но, да, я сделал это) И еще вопрос:) Это нормально сделать вот так? :
  14. А в том-то и дело, что либ файла там нет, либо я тупой совсем) Надо скомпилить чтобы либ вышел.. Он кстати появляется, даже с ошибкой компилирования, его можно использовать так? з.ы. попробую, спасибо за ответы)
  15. Понятно, спасибо. Буду пытаться компилить detours. Не подскажешь кстати, что за sn он при компиляции требует? Что то с какими-то ключами связано, 2 ошибки выбивает. И вообще, можно без деторса обойтись же? И ещё вопрос: почему работает функция GObjects?
×
×
  • Создать...

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

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