muzhig, да, интересные темы, я читал, но опять же, адрес вызова 0x005B7B70 отличается скорее всего от того, что в клиенте, который используется у меня, ибо просто рушится ничего не выделяя.
У меня все работает и все выделяется. не знаю что у тебя за клиент- у меня уже последних обновления три адрес таргета не менялся. А паттерн вообще у всех одинаковый.
Я так подозреваю что ты взял этот код и подставляешь не тот BA.
Скорее всего ты сюда подставляешь адрес BA+1C. Но PW_BASE_ADDRESS+20 это не указатель на структуру игрока!
muzhig, 1.7.8 версия, сервер .
Вопрос появился, подскажите, как в олли поставить бряки на все инструкции вида Х например. BPX команда вроде только по лейблу ставит...
Значит надо подставлять [BA], а не который [BA]+1C (Игровой сеанс)?
Если ты прочит всю тему то точно знал бы что нам это ничем не поможет, так как мы "это" открываем каждый день) не только для d_getservertime. Можешь пойти выложить на zhyk.ru и на лолчитс...там таким скринам будут рады, даже спасибок тебе накидают...ты главное тему назови "ДЮП"...а там уж разбиратся не будут.
«Я вот решил собственного бота написать, только программировать не умею, поэтому у меня к вам много вопросов: а что такое BA; как искать то да это; пробовал подставлять ваши функции, все рушится, даже менял значения, но ничего не помогает…» и в том же духе на протяжении мнооогих постов.
Товарищи, прежде чем задавать такие вопросы, и тем более прежде чем начинать создавать своего мега-бота и писать инъекции, пожалуйста, хоть основы того же программирования почитайте. Разберитесь с динамическим распределением памяти, минимум знаний в ассемблере получите, прочитайте на msdn’е все касаемо используемых функций и т.п.
Ну вот, теперь по конкретным вещам: «нашел BA - 00926fd4, но не помогает»? Где нашли? И что из того, что каким-то образом найдено это число? Что вообще значит, его искать; наверное, при помощи СЕ?
«адрес вызова таргета по патернам найти не удалось», следовательно, вы подставляли в код инъекции только 00926fd4 (при условии, что это нужное значение), и ожидали, что все будет работать?
P.S. Здесь, как и на любом другом форуме не сидят ясновидицы, способные по одному сообщению «не работает», указать на ошибку.
added:
поставьте брейкпоинты в дебаггере на все инструкции [add ecx, EC]. Таких инструкций не так уж и много; сразу должны получить результат. Если пользуетесь ollyDbg, то достаточно вызвать поиск "all commands". Затем, в окне "commands found", нажатием F2 выставить bp на найденных адресах; автоматически данный дебаггер bp не расставляет
dwar, я конечно понимаю, что вы уже тут завсегдатый и успели зазнаться немного, но прошу вас проявлять уважение. Мы все когда-то с чего-то начинали, да я не буду скрывать, у меня нет опыта работы с низкоуровневыми языками такими как asm и опыта отладки при помощи х86 дизасемблера. По спицифике моей работы, нет надобности применять это все. И мне не надо писать своего мега-бота, достаточно только поправить MHS, чтобы он мог выделять цель полностью. Играю в свободное от работы время в основном вечером несколько часов, но тратить своё свободное время на задротство и убийство мобов не хочется, поэтому и есть надобность поправить бота уже существующего.
BA - нашел при помощи CE, проверил - это правильный BA, ибо BA+1C дал мне адрес, тот, который подходит допустим к MHS.
Да, попытка не пытка, попробовал заменить только BA в инъекции, как результат - неудача.
Пришел к выводу, что в моем клиенте используются другие регистры, но по скольку нет опыта работы в отладчике, я не смог найти адрес вызова метода выделения и соответственно посмотреть как он выглядит.
Подскажите пожалуйста, как можно поставить бряки на все инструкции вида ADD ECX, 0EC. Я использую OllyDbg 1.10. Пробовал в консоли написать BPX ADD ECX, 0EC, но выделялись, только CALL других модулей.
Товарищи, прежде чем задавать такие вопросы, и тем более прежде чем начинать создавать своего мега-бота и писать инъекции, пожалуйста, хоть основы того же программирования почитайте. Разберитесь с динамическим распределением памяти, минимум знаний в ассемблере получите, прочитайте на msdn’е все касаемо используемых функций и т.п.
+1
to TBXin: ветка как называется? . поищи на этом сайте ветку по твоему клиенту. Ну и что, что на буржуйском... если знаешь что надо-найдешь.
не знаешь- и сдесь не помогут. а если знаний только чтобы MHS подправить- искать бесполезно, даже если найдешь, или подскажут как- все-равно не получится. сам был такой ( да и в принципе таким остался ) . касаемо инжектов и MHS даже в этой ветке сказано не раз.. ГЕМОР.. нужно быть не хилым программером чтобы все это разрулить.) без обид..
TBXin, Раз у тебя BA не соответствует моему, значит и адрес вызова таргета у тебя другой.
Методика поиска адресов такова: нужно зацепиться за чтонибудь. За какую то команду. Определить где ее вызов, поставить брейпойнт и осмотреться: откуда был вызов, с какими параметрами, какие методы вызывает итд.
По идее правильнее всего искать адрес трассировкой. Но я для себя выбрал изращенский метод, который работает не всегда, зато прост в использовании)))
В CE нахожу ячейку памяти, и смотрю какие функции пишут в нее/читают из нее.
В твоем случае это ячейка с мишенью.
Там будет что то вроде списка с опкодами, которые произвели запись в ячейку.
Список будет пополняться по мере выполнения команд которые производят запись.
В общем, ставишь этот отлов и ждешь пока список перестанет заполняться.
все эти адреса не нужны. выделяешь мышкой последний "ненужный" адрес, чтобы не потерять его. Потом заходишь в игру и выполняешь действие: то есть выделяешь моба. В список добавится еще несколько опкодов- после того который ты выделил.
Один из них (вероятно первый) выполняется внутри процедуры таргета, которую необходимо инжектировать. В общем у тебя в руках пяток адресов, из которых остается отфильтровать нужный и все(это можно по паттерну сделать, которыц уже тебе дали).
На извратство метода можно закрыть глаза, если обратить внимание на прелесть: все эти операции можно произвести за считанные минуты. Таким образом поиск адреса нужной функции сводится к нескольким минутам против часов нудного поиска при помощи трассировки)) Кстати, где то в этой ветке этот метод был описан)) я его переделал немного))
muzhig, спасибо, благодаря идеи отловить, что пишет в указанный адрес, я таки выловил нужный код, осталось только разобратся и перевести его в инжект.
Quote:
На момент записи в ячейку регистры EAX и EDX хранят ID Моба. Запись идет тут mov [ecx+00000a18],edx, значит картинка следующая получается:
ecx - адрес игровой сессии
jne 0044d320 // взял на всякий случай, думаю эта строчка не нужна нам
mov eax,[edx+0c] // ???
mov edx,[eax] // ???
mov [ecx+00000a1c],00000000 // ba + target offset + 4 ??? запись ID моба
mov eax,edx // переносим в eax ID моба
mov [ecx+00000a18],edx // ba+target_offset, пишем в память ID моба
mov ecx,[00926fd4] // true base address
push eax // пропихиваем ID моба
push 008d0da8 // ???
push ffffff00 // ???
push ecx // пропихиваем true base
call 0042c8f0 // вызываем метод таргета
Если я где то ошибся, поправьте меня пожалуйста. И пришел к выводу, что если это нужный мне код для инжекта, то он на патерн не очень похож. Помогите пожалуйста сформировать из этого нужный для инжекта код. Заранее благодарен.
TBXin, сейчас ты нашел процедуру где происходит запись- НЕ ФАКТ что это таргет. Поставь брейкпойнт на нее и убедись, что остановка происходит ТОЛЬКО при выделении моба или нпс. Если так- то это НЕ ЗНАЧИТ что именно эта процедура- та которую нужно вызывать. Скорее всего она просто внутри цепочки вызовов. Дело в том, что одна процедура вызывает другую, та- третью итд. То есть, ты нашел то место в цепочке, где произошла запись. Теперь берешь в руки хороший и удобный дизасм (я юзаю IDA Pro), находишь в нем адрес этой операции и начинаешь копать вверх по цепочке: узнай, какая процедура вызвала эту процедуру. Потом, какая ту, итд. Всякий раз смотри на вызов- одна из найденных процедур вероятно (НО НЕ ФАКТ!) окажется до боли похожей на паттерн. Лично я долго орал в форум "помогите найти адрес" блаблабла- никто не горел желанием)) потом почитал немного и решил сам найти его- первый раз долго, муторно, пока технологию освоил. А потом как орешки щелкать))) Кстати, базу в IDA можно дополнять и дополнять- чем полнее, тем легче искать новые адреса, потому что многое довольно тесно взаимосвязано. Кстати именно таргет был первым адресом который я нашел, по моему)