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

SiriusED

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

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

  • Посещение

  • Победитель дней

    1

SiriusED стал победителем дня 21 августа 2014

SiriusED имел наиболее популярный контент!

Репутация

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

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

  • День рождения 06.04.1988

Информация

  • Пол
    Мужчина
  • Интересы
    ММО, Программирование, Кино
  1. Короче хукнуть получилось, но проблема теперь такая, функция принимает толи char* толи BYTE*, и во общем если принимаю char* то получаются кракозябры, мне нужно походу перевести эти байты в HEX. Но я уже реально сижу два часа и рабочего кода так и не нашел... То вылеты, то тупо не работает запарился уже просто... Помогите перевести байты в HEX-строку.
  2. Ну во общем дали мне на одном форуме точный адрес и ollyDBG-паттерн к ней, ну и еще дали тело функции вместе с типами и аргументами, короче дали все что нужно.. Но все таки это просто дали, но как это сделать самому я так и не понял, а именно: Смотри, под словом сигнатура я имел введу типы и количество аргументов, которые принимает эта функция, вот скажем пример: Нашел я через тот же Ultimap адрес нужной мне функции, но зная один лишь адрес, я хукнуть эту функцию не смогу никак... Ибо мне нужно знать точное количество и типы всех принимающих\возвращающих параметров. Вот собственно меня интересует в первую очередь как мне эти параметры узнать и на сколько это сложно? Ну и еще такая вот штука, вот тот адрес который мне дали, короче на нем не "call адрес функции", а вот такие инструкции: mov eax,[esp+0C] // Вот эта инструкция висит на том адресе что мне дали на форумеcmp eax,10jnl 00961007mov eax,[esp+04]mov [eax+04],00000005xor al,alretТак вот что мне хукать то? прямо этот адрес или что? А то как то впадлу переспрашивать уже на том форуме после благодарствий
  3. Не ну кажется адрес я уже нашел, да и даже если не нашел то найду, ибо СЕ мне нашел 407 возможных вариантов вызова функций при моем действии... Но вот как мне теперь найти сигнатуру то? А без сигнатуры я не смогу же поставить хук, правильно? Во общем в чем лучше всего искать сигнатуру, и как это делается в СЕ Ultimap? P.S. Ну а так то функция являет собой шифратор, и возможно дешифратор текста. Так что в любом случае она 100% должна принимать и возвращать текст, но вот даже уже с таким вариантом может быть два варианта: Возврат текста через^ char* Function(char* inText);//илиvoid Function(char* out\ref inText);Ну я так понимаю что сигнатуру вычислить это просто ацки сложная задача да?
  4. Я тут поспрашивал профессионалов, и говорят что ollyDBG и IDAPro в этом деле нормально могут помочь... Кто нить о них знает как там можно реализовать такое?
  5. Хм. Ну у меня CE 6,4 какраз, i7-4770K, и Windows7, сработает? Пока бегу читать об этой штуке..
  6. Всем привет. Ситуация такая: Есть функция которая меняет значение, я поставил хук на эту функцию и получаю готовое значение, но как мне узнать через какую функцию это значение создается? Так же мне известно что функция которая создает это значение срабатывает при определенном действии в игре. Вот как мне узнать что это за функция во обще? единственное что приходит на ум - как то мониторить все вызываемые функции этой игрой непосредственно в момент определенного действия(нажатия кнопки TAB). Вот через что такое можно осуществить? Знаю как такое сделать можно на перехват WinAPI-функций, а вот как перехватывать все функции игровые? Очень нужна помощь в этом вопросе.
  7. Не ну я думал типа что при каждом вызове функции будет выделятся память... void fonc1(){ char sb[512];}По этому и спросил, а то я так понимаю с++ больше гибок но и более ответственен для программиста язык.. Ну в принципе все понял, почитаю о локальных переменных..
  8. Ну да, эта функция хоть отдаленно похожа на человеческую конкатенацию... Но создание буферов этих везде и всюду меня уже реально начинает поднапрягать... Спасибос за инфу в любом случае, все лучше чем то, как делал я... з.ы. // Конкатенация времени(собственно для этого и нужна была )char sb[512];wsprintf(sb, "%d-%d-%d", time->tm_hour, time->tm_min, time->tm_sec);Ну и вот еще маленький вопросец, как все таки правильно будет: char sb[512];tm* time = GetCurrentDateTime(); // Получаем указатель на структуру времени// Вот так?wsprintf(sb, "%d-%d-%d", time->tm_hour, time->tm_min, time->tm_sec);// Или можно так?wsprintf(sb, "%d-%d-%d", GetCurrentDateTime()->tm_hour, GetCurrentDateTime()->tm_min, GetCurrentDateTime()->tm_sec);Правильно ли я понимаю что в 1м случаем создается указатель на указатель, а во втором используется сразу указатель который вернет функция? Или это одно и тоже во обще? Ну и еще нужно ли писать delete[] sb;Или тут как в c#, после выхода из функции все локальные переменные удаляются автоматом?
  9. Короче посмотрел в самой функции что там творится пошагово, и вот такая штука: Аргумент "filePath" я делаю так: //Переменные глобальные:string DllPath = "c:\\programm\\release";char* logFileName = "\\log.txt";// Вызов функцииWriteToFile(strcat((char*) DllPath.data(), logFileName), "Test1");Ну и оказывается что конкатенация в c++ совсем не такая как в c# штоли... Ибо первый раз "filePath = c:\\programm\\release\\log.txt". А вот второй раз "filePath = c:\\programm\\release\\log.txt\\log.txt". Вот такая вот фигня... Походу не ту функцию я выбрал для конкатенации... Во общем сделал что б полный путь создавался один раз при инжекте, и дальше уже просто использовался. А функцию записи в файл написал вот так: bool WriteToFile(char* filePath, char* content){ ofstream outfile; outfile.open(filePath, ios_base::app); if (!outfile.is_open()) { outfile.close(); return false; } else outfile << content; outfile.close(); return true;}Работает нормально, но вот как просто соединять char* строки, что бы оригиналы не изменялись я вот только вот так нугуглил: char* one = "one";char* two = "two";char* three = "three";char* four = "four";string result = string(one) + string(two) + string(three) + string(four);
  10. Короче инжектю dll'ку и нужно что б там она записывала в .txt файл данные. Я вот пишу вот так вот, но не работает,сразу креш... bool WriteToFile(char* filePath, char* content){ ofstream outf; try { outf.open(filePath, std::ofstream::out | std::ofstream::app); } catch (...){} if (outf.fail()) { MessageBox(0, "False", "", 0); outf.close(); return false; } else outf.write(content, sizeof(content)); outf.close(); return true;}И через FILE *outf; тоже пробовал.. Тупо креш.. И дело даже не в "char* content и wchar_t* content", ибо я для теста тупо пишу "wwwwwwww", и все равно креш... Использую я эту функцию в хуке другой в игре, и она там довольно часто юзается, но пишет благополучно только первые данные, второй раз уже "outf == NULL" и креш...
  11. Ну вот у тебя первое чтение: ReadProcessMemory(hWnd, (void*) Base, (LPVOID) CPed, sizeof(Base), NULL);Что в CPed после этой строки? Да и во обще закинь сюда код и покажи в нем в каком именно месте ошибка, запили обычные MessageBox'ы, и смотри что читает после каждой ReadProcessMemory. Точно узнай в каком именно месте проблема, а то мне лично ничего не понятно во обще, по скринам в которых куски кода.. Ну а так то кстати я хз,но должно быть вроде так: ReadProcessMemory(hWnd, (LPCVOID) Base, (LPVOID) CPed, sizeof(Base), NULL);То есть ты должен сразу адрес читать а не указатель на этот адрес. Если не так сори сам неделю назад ток начал въезжать в c++ )
  12. Действительно, у MessageBoxW оказывается чуть другие типы у параметров чем у MessageBoxA... Вот так работает нормально... Спасибо. INT(WINAPI * RealMessageBoxW)(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) = MessageBoxW;
  13. Понял. Ну и еще я вот тут счас учусь чуток хукать WinAPI, действительно все очень просто, если разобратся с Detours... Но вот такой вот вопросец ее у меня есть: Вот я хукал SendMessageW, как сверху, и оригинальный адрес сохранял так: LRESULT(WINAPI * RealSendMessageW)(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) = SendMessageW;А вот как так же сохранить адрес MessageBoxW на пример? INT(WINAPI * RealMessageBoxW)(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) = MessageBoxW; // Ошибка после "=".P/S. Че реально Detours Pro стоит $10,000? ОО
  14. Но почему оно скомпилило то, могло и ошибку кинуть.. или это что-то тоже рабочее но не в ту сторону?)
  15. Хм, ну в принципе читать по смещениям это не так уж и сложно должно быть.. Недавно делал похожее... Могу глянуть если проблема именно в получении hWnd окна или процесса... Или проблема уже решена? Ну а так то я заметил что ты не верно написал смещения, в СЕ у тебя стоит первое же смещение "0x14" а ты читаешь "0xE", это же вроде разные значения, или я ошибаюсь? И еще не знаю как в C++, но я когда писал на C# чтение адресов то у меня была проблема что я хранил прочтенные адреса в int вместо uint, так что в эту сторону можешь тоже глянуть, мне помогло..
×
×
  • Создать...

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

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