-
Постов
174 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные temtriss
-
-
18 минут назад, JOBEJlИР сказал:
эти функции работают
Ну как я написал выше шарп я не знаю, так чисто логически по коду пробежался)
Так же пробежался по скрипту, а вы уверены, что у Вас варкрафт версии 1.26.0.6401?
-
5 часов назад, JOBEJlИР сказал:
не работает инжект к game.dll
Как Вас понять, не работает инжект к.... Иньекция происходит в процес... dll - динамическая библиотека...
Честно скажу, шарп я не знаю и очень не люблю... Читать умею, но могу понять не правильно...
В первую очередь обращу внимание что ваша void функция GetProcessID имеет ретурн(может в шарпе так принято, но тогда она возвращает, только в случае получения результата) или в шарпе этот тоже самое что break? В общем прервите цикл если мы нашли результат. нефиг ему гонять!)
Далее, опять же цикл...
5 часов назад, JOBEJlИР сказал:ProcessModule module in Warcraft.Modules
Вы так же не выходите из цикла, опять же я ХЗ как работает шарп, но после получения нужной нам dllки надо бы цикл закончить...
Добавив либо return true либо break... ну может знатоки скажут больше, но циклы я бы посоветовал поправить) Особенно второй))
-
10 часов назад, gamehikker сказал:
своего созданного девайса
В каком смысле своего?
-
12 часа назад, uhx сказал:
ахватывающие экран, тоже внедряются в игру?
Могу сказать даже так, фрапс еще и рисует в стороннем Dx окошке свои данные(FPS) и что-то я не слышал случаев банов из-за фрапса)
-
В 21.09.2017 в 17:05, IzerodayI сказал:
как я понял , надо найти прицел так
Хм... а по углу обзора не канает?
Что-то типо этого:
Тут nY, nX - needed
Останется добавить на остальные стороны(если nX и nY больше чем твои и т.д.), а так же добавить ось Z.
if (nY > myY && nX <= myX)
{
Ydiff = nY - myY;
Xdiff = myX - nX;
// Умножаем на 57.29578 для перевода из радиан в градусы.
AngleA = atan(Xdiff / Ydiff) * 57.29578;
tmp = 0 - AngleA;
}Я таким образом делал наведение(facetotarget) на цель для бота.
- 1
-
@partoftheworlD Замечательная статья
В 21.09.2017 в 19:28, TheErel сказал:но тут на примере непонятно
А что тут не понятного?
Открыл был engine.dll в IDA Pro... Найдена в дллке строка, просмотрено какие именно функции используют данную строку, как я понял в этом случае только одна функции использует эту строку. Ищем первый вызов(call) перед использованием данной строки(в данном случае перед помещением ее в стэк) Переходим по функции, далее смотрим где заполняется реест ECX(В данном случае в этой строчке lea ecx,[ebp-1C]), далее открываешь ЦЕ тлт любой дебагер, открываешь данную функцию и ставишь бряк на эту инструкцию, брякаешся и добавляешь в таблицу адрес из ebp-0x1C
-
@Dejavu Ну наверно по тому, что я не очень грамотный человек
-
14 минуты назад, partoftheworlD сказал:
желательно подписывать
@partoftheworlD хорошо, учту этот момент.
@Garik66 Спасибо, замечания учту, буду стараться)
-
Всем привет.
!!!Перед прочтением данной статьи рекомендую прочитать о Соглашении о вызовах(Calling Convention)!!!
Эта небольшая статья о вызове функций из приложения.
Если будет не понятно, то могу снять видео гайд по вызову функций.Подопытным кроликом будет заранее заготовленное приложение.
Вот его код:Скрытый текст#include <Windows.h> #include <iostream> using namespace std; bool function001() { cout << "We call function001" << endl; return false; } void function002() { cout << "Function002 called!" << endl; } void function003(char* txt) { cout << txt << endl; } int main() { while (!GetAsyncKeyState(VK_INSERT)) { if (GetAsyncKeyState(VK_F1) & 1) { if (!function001()) cout << "Function001 - return false :(" << endl; } if (GetAsyncKeyState(VK_F2) & 1) { function002(); function003("Function003 called! this is char* param of function003"); } } return 0; }
Примерно так выглядит наша программа:
Думаю и так понятно, что приложение по нажатию на F1 запускает функцию 1, а по нажатию на F2 функцию 2 и 3
С помощью x64dbg мы попробуем разобратся как вызывается функция:
Будем искать строчку из функции3. Для этого ищем ссылки на строки, как показано на скрине
Поиск ссылок на строки в x64dbg:
Находим там: "Function003 called! this is char* param of function003"
И смотрим:
Сдесь PUSH и CALL
Пологаю это то что нам надо, пушим аргумент в стек(наша строчка) и вызываем функцию.
Перед прочтением статьи я рекомендовал прочитать про соглашение о вызове.
Сейчас это бы пригодилось, но я зарание оговорюсь, что это C-Declaration - __cdecl:
Примерный внешний __cdecl
push ebp
mov ebp, esp
// Пушим аргументы вызова
push arg1
push arg2
// вызываем функция
call ourFunc
// чистим стек за нашей функцией
add esp, 8
Давайте посмотрим на скрин:
Интересующая нас функция:
Ну что же самое интересное, мы знаем какое используется соглашение о вызове, мы знаем параметры которые принимает функция.
Давайте теперь узнаем смещение функции относительно базового адреса, для этого открываем калькулятор, выбираем 16тиричную систему,
Адрес функции у меня 009С24С0.
Из адреса функции вычитаем Базовый адрес, в моем случае это 009B0000
009C24C0-009B0000=124C0 Запоминаем, смещение, оно нам понадобится!
Давайте напишем dll'ку которая по нажатию на F10 будет запускать функцию3.
Вот код:Скрытый текст#include <Windows.h> // Теперь нам нужно обьявить портотип функции которую будем вызывать! typedef void(_cdecl * CALLFUNC003)(char*); CALLFUNC003 fn3; // Поток.... DWORD __stdcall NewThread(LPARAM) { while (!GetAsyncKeyState(VK_INSERT)) { if (GetAsyncKeyState(VK_F10) & 1) { // Получаем базовый адрес DWORD base = (DWORD)GetModuleHandle(NULL); // Получаем адрес функции. fn3 = (CALLFUNC003)(base + 0x124C0); // Вызываем нашу функцию ;) fn3("Any text \n"); } } return 0; } BOOL __stdcall DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserverd) { switch (dwReason) { case DLL_PROCESS_ATTACH: MessageBoxA(NULL, "Injected...", "caption", MB_ICONINFORMATION); CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)NewThread, hModule, NULL, NULL); break; } return TRUE; }
Код достаточно прост, думаю пояснения тут не нужны. Собираем и иньжектим DLLку,
Для проверки можно заиньктить с помощью CE.
Результат:
Всем спасибо!P.s. Сильно не пинайте если что-то не так, первая статья! С радостью выслушаю конструктивную критику
- 3
-
2 минуты назад, partoftheworlD сказал:
Их не убрали
Создать подпись я себе не могу.
2 минуты назад, partoftheworlD сказал:Настройки -> Подпись
А можно по подробнее, у меня нету таких пунктов. Может Вы можете дать прямой линк?)
-
Доброго времени суток!
Можно ли добавить/вернуть подписи на форуме? Или они были убраны, с какой-то определенной целью.
-
38 минут назад, Rina565 сказал:
я себе отредактирую
38 минут назад, Rina565 сказал:только мне, или еще другим игрокам?
Чисто логически подумай. У тебя есть доступ к серверу? ты можешь подменить файл на сервере? Нет?! Тогда как оно будет работать у других?
Я фидлером не когда не пользовался но быстренько прочитал, это же прокси для HTTP/HTTPS позволяющий изменять трафик.
Я даже могу сказать так, есть вероятность того что все изменения будут визуальны, а по факту работать не будут.
-
В 20.08.2017 в 15:05, TheErel сказал:
Интересно а почему лучше dll Делать?
Для примера, как вам удобнее читать/писать в память?
Так:
WriteProcessMemory(param0, param1... etc);
или же на прямую, так:
*(DWORD*)((DWORD)Addr+Offset) = dwToWrite
-
Это реально. Но это придется не кисло копаться и искать функции расшифрофки, просто перехватит трафик проблем нету. Можно хукнуть send() и recv() правда если я правильно понмю, подменить пакет таким образом нельзя. Да и сами они будут уже шифрованые)
Сырцы залью, в личку и обьясню(работает только 32х бинтая версия, в настройках ингры надо принудительно dx9 включить, иначе он стартует 64х битную версию и падает) как собрать/запустить. Если по коду вопросы будут, можно так же в личку.
P.s. сразу скажу что мой код на C++ выглядит так, не пугайся!)
- 2
-
Если ТС все еще интересуется темой. Игра очень не дружелюбная для взлома)) Это очень объектно ориентированный С++.
Да и времени у меня не так много. Но все же если интересно, реализовал Мультиклиент/ЗумХак/Вход без проверки обновления и проверки целостности клиента/ кривой, не правильный вызов части функции перемещения(Происходит анимация движения и телепорт, телепорт не по указаным координатам, так что про это можно забыть пока я не доразбирусь), поиск всего этого был по сигнатурам, так что кроме мультиклиента все перекочевало в 3.0, мультиклиент я уже поправил.
P.s. Если интересно в личку могу скинуть свои безИСХОДНИКИ(да свой код я иначе назвать не могу), написано все на С++.
- 1
-
Скорее всего значения теперь проверяются на сервере. Если Вы говорите, что раньше работало, а сейчас нет, то скорее всего так и есть.
P.s. я даже не представляю как работать с играми на андроид через СЕ.
-
45 минут назад, uhx сказал:
Эххх, щас бы подсветку синтаксиса ASM добавить...
Да действительно, было бы удобно
1 час назад, uhx сказал:Если это большая проблема
Я думаю это совсем не проблема :)) На том же васме есть!)
-
12 часа назад, MasterGH сказал:
Плюсы. Перенос тем, помощь новичкам, чистка тем, изменения заголовков тем
Замечательное нововведение.
Особенно
12 часа назад, MasterGH сказал:изменения заголовков тем.
Поздравляю!
10 часов назад, MasterGH сказал:Поздравляю с переводом!
-
Спасибо!... пойду покурю MSDN по этому поводу, хотя из того, что я уже прочитал, проще продолжать использовать онлайн Асемблер/Дизасемблер.
1 час назад, Xipho сказал:Можно, но указатель ты на такой кусок кода не получишь.
Ну а учитывая этот факт, то это совсем печально, в данном случае этот патч я генерирую для инъекции dll в процесс, через контекст потока.
Ладно, в принципе все работает. Не буду усложнять, спасибо за ответ, думаю тему можно закрыть.
-
Доброго времени суток, есть такой вопрос:
Можно ли использовать Инлайн Асм для генерации байт кода?
Пример:
unsigned char MEGAPATCH[] = {0x68, backStr[0], backStr[1], backStr[2], backStr[3], 0x9C, 0x60, 0x68, iDllStr[0], iDllStr[1], iDllStr[2], iDllStr[3], 0xB8, apiStr[0], apiStr[1], apiStr[2], apiStr[3], 0xFF, 0xD0, 0x61, 0x9D, 0xC3 };
А вместо этого, использовать что-то типо этого для генерации:
Скрытый текст_asm
{
PUSH backStr
PUSHF
PUSHA
PUSH iDllStr
MOV EAX, apiStr
CALL EAX
POPA
POPF
RET
}
-
В первую очередь хочу извиниться за некромантию и подъем мертвой/закрытой темы. А именно многооконки для PoE.
Вчера я реализовал свой рабочий вариант, но я очень заинтересован предложенным вариантом в теме. А именно через мьютекс...
На сколько я знаю закрыть мьютекст из вне крайне геморройно (хотя хз, но конкретной и рабочей реализации я не видел), из чего возникает вопрос, если это имеет столько проблем, почему бы на лету не патчить 1 байт?)
Я реализовал свою многооконку так:
Запускаю суспендед процесс, делаю патч на 1 байт "\xEB"(JMP), пуляю основной поток и все готово. Кол-во окон не ограничено.
Так вот может снятие мьютекста чем-то лучше? И очень бы хотелось увидеть реализацию, если конечно не сложно.
P.s. да хукнуть CreateMutexW возможно... но тут вроде были ответы о снятии мьютекса, а не о препятствии созданию.
-
В 07.07.2017 в 10:15, keng сказал:
Ultimap
Ну у меня ультимап не работает к сожалению А какие-то еще варианты есть? :))
В 07.07.2017 в 08:51, Merlin сказал:ЛКМ (клик левой кнопкой мыши)
Ну вот, что-что а движение я знаю как найти и реализовать :))
Можно, а точнее даже нужно! Берем свои координаты, ставим бряк на запись, двигаемся) смотрим куда брякнулись. Смотрим откуда пишется... там уже обычно становится ясно. В последней игре в которой я реализовывал это было все просто, через стэк передавалось значение 5.0 или -5.0(скорость перемещения) и все)))
Ради интереса решил скачать PoE и сам покопаться) Сейчас попробую глянуть :))
Архитектура процессов
in Низкоуровневое программирование
Опубликовано
А гугл?) Не, не слышал? Первая ссылка на запрос опенГЛ32 х64
The 64-bit OpenGL import library is included in the Windows SDK and gets installed to
%ProgramFiles%\Microsoft SDKs\Windows\<version>\Lib\x64\OpenGL32.lib
. The corresponding DLL is namedopengl32.dll
and is located in%SystemRoot%\system32
.Обьясню, даже 64х битная библиотека имеет в имени 32)))