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

Coder

Ветераны
  • Постов

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

  • Посещение

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

    13

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

  1. Coder

    D3D на Delphi

    Если всё же никто не поможет, то откроешь гугл и введёшь там: "directx delphi".
  2. 1. Указывать нужно тип функции, поэтому добавлять ключевое слово typedef не нужно. 2. Не за что его боготворить, он облегчает жизнь новичкам, которые не знают как перехватывать функции без детурса. 3. Русской документации нет, не было и не будет. P.S. Если хочешь программировать, то вообще забудь о русском языке. Если конечно ты не один из этих... "1C программистов"
  3. Это не переполнение переменной. Это отображение адреса в signed виде. Адреса хранятся в ячейках типа unsigned, потому что процессор не умеет работать с отрицательными числами. А второе твоё предложение я понять не смог.
  4. Coder

    GRID 2

    Нужно перезалить файл, при попытке скачать пишет, то что файл не найден.
  5. Адреса в x86 архитектуре хранятся в ячейках памяти типа - unsigned int. Следовательно тебе нужно использовать метод - BitConverter.ToUInt32
  6. Не хочу тебя разочаровать, но ты не можешь иметь доступ к адресу 0xFFF6525C. Начиная с адреса 0x7xxxxxxx начинается адресное пространство библиотек windows. Начиная с адреса 0x8xxxxxxx начинается адресное пространство, которое резервирует ядро Windows, и доступа к нему ты не имеешь. И CE никак не может отобразить содержимое этого адреса 0xFFF6525C.
  7. CheckBox в OS Windows это разновидность кнопки. Кнопку мы так же привыкли называть контролом, но в свою очередь контрол в OS Windows является обычным окном. Реализовать твою задумку можно следующим образом на С++: #include <windows.h> #include <iostream> BOOL CALLBACK EnumChildProc( HWND hWnd, // handle дочернего окна (контрола) LPARAM lParam // здесь пользовательский параметр, в нашем случае это указатель на вектор хэндлов ) { std::vector<HWND>* wndCheckBoxes = reinterpret_cast< std::vector<HWND>* > (lParam); // приводим LPARAM к нужному нам типу WINDOWINFO info = { 0 }; // инициализруем структуру нулями info.cbSize = sizeof(WINDOWINFO); // инициализируем поле струтруры cbSize, так как оно подлежит обязательному заполнению GetWindowInfo(hWnd, &info); // получаем информацию об окне if (info.dwStyle & BS_CHECKBOX) // если стиль окна содержит BS_CHECKBOX { wndCheckBoxes->push_back(hWnd); // добавляем handle контрола (чекбокса) в наш вектор } return TRUE; // возвращаем TRUE, чтобы продложилось перечисление дочерних окон (и контролов) } void SetCheckBox( HWND hWNd, // handle чекбокса, состояние которого мы хотим изменить bool check // флаг отвечающий, за то, чтобы чекунуть или анчекнуть чекбокс ) { if (check) { PostMessage(hWNd, BM_SETCHECK, BST_CHECKED, 0); // поставить галочку } else { PostMessage(hWNd, BM_SETCHECK, BST_UNCHECKED, 0); // снять галочку } } int main() { HWND hWnd = FindWindow(0, TEXT("заголовок окна")); if (!hWnd) { printf("Can't find window!\n"); Sleep(2000); return 0; } std::vector<HWND> windowCheckBoxes; // объявляем вектор (динамический массив), который будет хранить handle'ы чекбоксов EnumChildWindows(hWnd, &EnumChildProc, reinterpret_cast<LPARAM> (&windowCheckBoxes)); // начинаем поиск check box'ов size_t foundCheckBoxes = windowCheckBoxes.size(); if (foundCheckBoxes) // если количество найденных чекбоксов больше нуля { SetCheckBox(windowCheckBoxes[0], true); // поставить галочку первому найденному чекбоксу (индексация в массиве начинается с нуля) } return 0; } Использованный материал: http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms633499.aspx (FindWindow - поиск окна по классу и/или по заголовку) http://msdn.microsof...p/ms633494.aspx (EnumChildWindows - перечисление всех дочерних окон окна) http://msdn.microsof...p/ms633516.aspx (GetWindowInfo - получение информации об окне) http://msdn.microsof...p/bb775951.aspx (Список стилей кнопок) http://msdn.microsof...p/bb775989.aspx (BM_SETCHECK - сообщение для установки состояния checkbox'а) http://msdn.microsof...p/ms644944.aspx (PostMessage - асинхронная функция отправки сообщения окна) P.S. Код не отлаживал, писал в Notepad'е, но думаю он прекрасно демонстрирует нужный тебе алгоритм.
  8. А почему бы не объявить IntPtr buf = IntPtr.Zero; ? Тогда данные сразу прочитаются в Int32 формат.
  9. Как хукать с детурсом я уже забыл, но думаю тут всё просто. DETOUR_TRAMPOLINE(тут полное определение типа перехватываемой функции), тут адрес перехватываемой функции); Тут определяем тело функции перехватчика: int WINAPI Hooked_MessageBoxA(....) { return оригининальная функция(...); }
  10. Что тут не понятного? typedef тип_который_возвращает_фун-я (__stdcall* funcPtr)(int count); Присваиваешь указателю на функцию значение и дальше всё как с перехватом WinAPI функции.
  11. 1) Тебе нужно выяснить какие аргументы принимает функция 2) calling conversion функции 3) Объявить прототип функции 4) Далее всё как с обычным WinAPI или что ты там перехватывал
  12. Перехватить возможно всё, главное знать как правильно сделать это.
  13. Уж поверь, вычислить ты просишь о помощи или нет мы легко сможем)
  14. Смотри у тебя есть допустим 2 языковых файла формата: инглиш: AppMainCaption = Hello world AppMain_Button1 = Hey рашка: AppMainCaption = Привет мир AppMain_Button1 = Эй В зависиммости от языка, который выбрал юзер ты считываешь файл в свой массив строк. И из массива строк уже устанавливаешь заголовки контролов) Если пишешь на CE LUA, то тебе придется отказать от использования файлов, а хранить данные языков в таких же массивах строк.
  15. Самый простой способ: Заводишь массив со строками, и заполняешь его строками исходя из того, какой язык был выбран. Потом обновляешь заголовки всех контролов из массива строк, вот и всё пожалуй)
  16. Coder

    TrainME by Xipho

    Ты в ударе прям, лови плюс)
  17. Coder

    TrainMe by NullAlex [Game]

    За час исследований дальше не продвинулся, может у других получится. // формирование строки для вывода очковunsigned int __usercall sub_407B6A<eax>(unsigned int result<eax>, unsigned int a2<edx>, int a3<esi>){unsigned int v3; // ett@2unsigned __int8 v4; // dl@2int v5; // edx@5int i; // esi@6int v7; // [sp-8h] [bp-8h]@1unsigned int v8; // [sp-4h] [bp-4h]@1v8 = a2;v7 = a3;do{v3 = result;result /= 0xAu;--a3;v4 = v3 % 0xA + 48;if ( v4 >= 0x3Au )v4 += 7;*(_BYTE *)a3 = v4;}while ( result );v5 = v8 - (v7 - a3);if ( v8 > v7 - a3 ){LOBYTE(result) = 48;for ( i = a3 - v5; ; *(_BYTE *)(v5 + i) = 48 ){--v5;if ( !v5 )break;}*(_BYTE *)i = 48;}return result;}
  18. Coder

    TrainMe by NullAlex [Game]

    Ну что ж, ракетки мне было лень искать... А так более менее пойдёт, разве что стоит использовать более объектный подход для работы с очками (должа быть одна функция, которая прибавляет какому-то игроку очки). Также не стоит забывать, что логика работы трейнми должа быть приближённой к реальной игре, но при этом нужно препятствовать взлому. И еще нужно не забывать про двойную буфферезацию (весь контекст в окне мерцает). P.S. Ещё дельфи непонятно для чего вообще прицепил, тут же обычная работа с GDI, а твоя прога тянет кучу ненужных зависимостей за собой. На C++ такой пинг понг будет килобайт 20-30 весить без UPX'а. P.P.S. От меня получаешь плюс
  19. Прочитай этот топик, также там есть примеры реализации - http://forum.cheatengine.org/viewtopic.php?p=5499472
  20. Трейнеры пишут с использованием сигнатур в основном, чтобы даже если игра обновилась, то участок кода был всё равно найден.
  21. Я немного не понял твоего вопроса. Код генерируется статичным (в большинстве случаев), а значит и функции относительно модуля располагаются статично.
  22. DllMain должна вернуть значение 1. Если возвращается значение 0, то dll выгружается из программы. И ты смотришь MFC, а не голый C++/
×
×
  • Создать...

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

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