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

Tiger

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

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

  • Посещение

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

    10

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

  1. Именно, требуется lua script, сводящий к минимуму дейстия пользователя как таблицы так и трейнера. ОТ скрипта требуется создать в нужном месте программный брейкпоинт и занести в поле EIP значение для каждого конкретного адреса.
  2. [ENABLE]alloc(newmem,2048)aobscan(ammo_aob, D9 46 10 D8 1D 50 C8 93 00)// добавь еще пару байт следующей инструкцииregistersymbol(ammo_aob)label(returnhere)label(originalcode)newmem:mov [[[[["BF2.exe"+00623DC0]+DC]+4]+3C]+10],(float)1000000originalcode:fld dword ptr [esi+10]fcomp dword ptr [BF2.exe+53C850]jmp returnhereammo_aob:jmp newmemnopnopnopnopreturnhere:[DISABLE]ammo_aob:fld dword ptr [esi+10]fcomp dword ptr [BF2.exe+53C850]dealloc(newmem)unregistersymbol(ammo_aob)//Alt: db D9 46 10 D8 1D 50 C8 93 00
  3. смещение в подобном случае понимается как +38 в ниже представленном примере add eax,[rbx+38] Но я кажется понял о чем ты спросил. Хотя, как правило, в структуре обязательно будет и ID и само название предмета просто нужно раскрывать и читать указатели выше-ниже по структуре... 1.Попробуй отсортировать адрес предмета через сравнение регистров, по содержимому стека и т.д. 2.Попробуй использовать анализ кода/структур, найди выше 2,3 и выше указатель затем инструкцию которая с ним работает,запиши на бумажку смещение от найденого указателя до требуемого адреса,затем делай инжект на инструкцию обновления указателя, сортируй там по регистру и читай/пиши по смещению. 3. Сравнением значения "экранного" и обаратываемого адреса. 4. Попробуй найти инструкцию чтения указателей инвентаря... 5. то как я еще не догадался Способов тысячи, подобное часто встречается в "затаблеченных" играх. Всетаки укажи на название твоей мишени. Будет время поможем.
  4. Собственно вопрос перефразирую как сокрытый инжект кода. (с или лучше без регсимвола) К примеру на выделенной странице записал необходимый код получил через аобскан адреса места инжекта, нехитрым ****newmem:injektplase:****получил значение eip на которое нужно подменить значение регистра по адресу места необходимого инжекта. Ниже пример скрипта. Как мне по адресу address1 изменить значение eip на injektplase [ENABLE]alloc(newMem1, 2048)aobscan(address1, 03 43 38 3B F8)registersymbol(address1)aobscan(address1a, 48 8D 0D 44 BA 17 04)registersymbol(address1a)label(injectplase1)registersymbol(injectplase1)newMem1:injectplase1:mov [rbx+38],#99999add eax,[rbx+38]cmp edi,eaxcmova edi,eaxmov [rbx+28],edimov [rbx+28],#99999mov rbx,[rsp+30]add rsp,20pop rdijmp address1a[DISABLE]dealloc(newMem1)unregistersymbol(address1)unregistersymbol(address1a)unregistersymbol(injectplase1)
  5. Как правило CE используют для поиска места инжекта и собственно кода на выделенной странице. Практически все, кроме побайтной записи без кодкавера, ловится легко... Никто не будет ломать сам трейнер! Замечено правильно и неоднократно защита/взлом это спорт умнейших) и нет ничего невозможного; вопроса только два, да и то взаимозависимых - интеллект и время, справедлив как для защиты так и для взлома Воспользуйся поиском активных(скрытых) окон по имени через диспетчер...помогут в этом сами программы хайды, можешь попробовать шерстить Temp на создаваемый CE файл при сканировании памяти. Могу предложить три варианта: 1. Инжектить в само тело модуля ломаемой игры дедовским методом - без выделения постраничной памяти, разными путями найти место куда всунуть конкретные байты кода хака путем переписывания исходного внести сам код и\или джампы на него, туда и обратно. 2. Группировать множественные инжекты разбавив их левыми пустышками в один скрипт и инжектить одновременно, флаги активаций функций привязать к меткам пустой памяти приложения и уже на эти метки наделать активирующих скриптов.... 3. Найти свои, по сути никому не нужные методы и реализовать их, или, аналогично, попросту не парится. PS
  6. [ENABLE] alloc(cheatByteCodeZ,2048) label(returnhereZ) aobscan(aob_scanZ,DD 40 18 DD 5F 18 8B) label(aob_scanZ) registersymbol(aob_scanZ) label(QWordValueZ) registersymbol(QWordValueZ) label(QWordValue) registersymbol(QWordValue) //######################################## cheatByteCodeZ: fld qword ptr [eax+18] fstp qword ptr [edi+18] push eax fld [QWordValueZ] // подгрузил, возможно вытолкнул что нужное стека... fcomp qword ptr [edi+08] fnstsw ax test ah,0x41 jne returnhereZ // fld [QWordValueZ] // уже загружал fcomp qword ptr [edi+10] fnstsw ax test ah,0x41 jne returnhereZ fld qword ptr [QWordValue] fstp qword ptr [edi+08] fld qword ptr [QWordValue] fstp qword ptr [edi+10] returnhereZ: fstp [QWordValueZ] // подгрузил, но оставил невыгруженным. pop eax ret //*****************возврат к месту вызова //****************объявить переменные можно в конце страницы cheatByteCodeZ QWordValueZ: dq (double)10000 QWordValue: dq (double)10 //######################################## //*****************инжект вызова процедуры cheatByteCodeZ aob_scanZ: call cheatByteCodeZ nop //######################################## [DISABLE] //****************возвращаем как было aob_scanZ: fld qword ptr [eax+18] fstp qword ptr [edi+18] //****************стираем все что создавали unregistersymbol(aob_scanZ) unregistersymbol(QWordValueZ) unregistersymbol(QWordValue) dealloc(cheatByteCodeZ) FPREM... посмотри, или переделай без стека fpu, он тут не принципиален....
  7. Выложите пример скрипта с готовыми инжектами... и состояние стека fpu после загрузки каждого из значений. Может быть загрузить последовательно все значения, и сортировать FCOMIP ST,ST(i) FCOMI ST,ST(i).... в зависимости от количества и расположения инжектов по коду... Хотя можно до fld [] поработать с eax+08/10
  8. А как по твоему скрипт должет отличить, что он пишет именно в адрес кристалов, а не армии? В каждом сегменте, после проверки активации определенной опции, должен быть фильтр на конкретный адрес. К примеру ниже выкладываю cкрипт для Assassin's Creed 3.Там фильтр общий (cmp esi,edi) и по индивидуальному значению esi/edi (cmp esi,XX)
  9. Это одно и тоже. Если вдруг решишь искать здоровье юнитов... то пожалею твой разум и подскажу, что это значение (float)1,00 когда юнит полностью здоров.к примеру. Здоровье юнита 2500 - 100% - 1.00 Здоровье юнита 2420 ≈ 97% - 0.9679253101 Думаю дальше разберешься. Кстати по поводу фильтра, ID игрока как раз тут и можно отыскать в сравнении с адресами противника.
  10. add [eax+04],ecx замени на mov [eax+04],00 или просто удали - тоже вариант Можешь попробовать найти инструкцию, которая не пишет, а читает и почаще. Тогда возможно значение сразу будет обнулятся, и кстати фильтр, фильтра нет. Все твои бонусы получает и враг) как мне кажется.. а может и нет) Бесконечные юниты
  11. Перезалей файл, удален за сроком давности.
  12. Добавь фильтр!!! он там нужен, Когда выделишь функцию fstp dword ptr [eax] ПКМ и найти адреса с которыми работает инструкция, Чуть побегаешь, кстати тут удобно жмакать кнопку паузы на клавиатуре. Посмтори к каким адресам обращается (справа внизу выстави float) Обрати внимание на регистры ebp и ebx (проверка на ноль это test ebx,ebx потом делашь условный прижок на выход) и тут удобнее делать инжект на строку ret 0004 увидишь ниже fstp dword ptr [eax+08], просто пишешь в адреса mov [eax],(float)50000.00 mov [eax+4],(float)50000.00 до ret 0004 Пробуй сам. Если совсем никак, смотри тут:
  13. В смысле полный? Попробуй так: 1) выдели нужную инструкцию в меморивью, нажми Ctrl+A 2) вставляем секции [ENABLE] [DISABLE], нажми Ctrl+A+T 3) производим инекцию по выделенному адресу, жмем Ctrl+I и ОК или Enter вуаля рабочий инжект готов можно шаманить... Для упрощения процедуры качаем aamaker_2.3 http://forum.gamehac...dpost__p__15069 и кладем файлик .lua в папку ..\Cheat Engine 6.3\autorun\aamaker.luaТеперь смотри в меморивью очень удобный плагин на менюшку
  14. Когда ты вышел на инструкцию, нужно проверить с какими адресами она работает. Для этого в меморивью нажимаем ПКМ на инструкции (см.картинку)
  15. Просто проинжекть строкой выше... или в виде "METAL GEAR RISING REVENGEANCE.exe"+8B6F86: mov edx,[ecx+04] db xx xx xx xx xx xx xx dealloc(newmem) или вытащи переменную [METAL GEAR RISING REVENGEANCE.g_LEngineDefaultPoolId] на символ через aobscan
  16. Тут единственная задача выверить необходимое и достаточное количество байт, При котором будет происходить верное определение местоположения метки инжекта. Присоединяюсь к поздравлениям! Мне кажется отвечающий всем вашим запросам готовый работающий и самый короткий из представленных, за исключением байтов aobscan, давно уже выложен, посте этак в 3м. За неимением возможности протестировать, хотелось бы вас попросить допонить проверочные байты, провести тест и сообщить о результатах Как и обещал логика и построчное описание
  17. зависит от того что мы нопим, в данном случае, если занопить, в стеке fpu, в часности ST(0), останется висеть значение, которого там быть не должно. Поэтому занопливание, замену инструкций следует делать очень осторожно, или хотябы прочитать предварительно про то, что эта инструкция делает. fst копирует значение ST(i) в указанный адрес памяти. Чтобы получить округлённое целое - fistfstp передача вещественного ЧИСЛА из FPU в ячейку памяти, и вызывает смещение ST(i) выталкивая операнд из стека Точность будет такая, какая укажешь (dword/qword/tword) причем REAL4, REAL8 и REAL10 в памяти, REAL10 в регистрах FPU В данном случае fstp, значит операнд выпадет из стека и редактировать ST(0) не требуется, а только значения переданные в ячейку памяти fstp dword ptr [edi+000001C8] mov [edi+000001C8],#0 В случае fst dword ptr [edi+000001C8] fstp dword ptr [edi+000001C8] mov [edi+000001C8],#0 fld dword ptr [edi+000001C8] или же пролистать вверх по коду и найти инструкцию которая последней оказывает влияние на st(0) и там шаманить. По сути дела вы правы, суть в записи и чтении значения. Однако в версии CE 6.3 существует доступ и запись, я как правло ставлю оба бряка, а там по ситуации.Я за изменение входных/выходных данных, а не ломание исходного кода. Иногда предусмотреть какие инструкции в какой момент времени окажут влияние на значение невозможно, приоритетно выделяю те которые наиболее часто обращаются к значению, когда ничего собственно не происходит)
  18. По поводу проверочных байтов: 1) внимательно на картинку под спойлером и исправь ***xx xx xx*** на числа, как показано в зеленых рамочках на картинке под спойлером ниже 2) скинуть мне в личку ссылку на игру и подождать в ответ готовой таблицы с пояснением алгоритма. Изображение:
  19. я вижу тут две разные инструкции в первом скрипте sub [edi+505],eax во втором mov [edi+505],0 но если предположить, что первый тот, который нужен, тогда так [ENABLE] aobscan(address_aob,29 87 05 05 00 00 XX XX XX XX XX XX XX XX XX XX) // отредактируешь еще пару байт alloc(newmem, 2048) label(exit1) label(exit2) registersymbol(address_aob) registersymbol(En_health) registersymbol(En_one_hit_kill) newmem: pushf cmp [edi+13],#200 jne exit1 cmp [En_health],00 je exit2 xor eax,eax // mov [edi+505],#200 // можно заодно заполнить шкалу здоровья героя, как понимаю 200 HP это и есть максимум jmp exit2 exit1: cmp [En_one_hit_kill],00 je exit2 mov eax,[edi+505] exit2: popf sub [edi+505],eax ret En_health: db 00 00 00 00 En_one_hit_kill: db 00 00 00 00 address_aob: call newmem db 90 // nop [DISABLE] address_aob: db 29 87 05 05 00 00 XX XX XX XX XX XX XX XX XX XX // отредактируешь еще пару байт unregistersymbol(address_aob) unregistersymbol(En_health) unregistersymbol(En_one_hit_kill) dealloc(newmem) ну и соответственно два скрипта активации [ENABLE] En_health: db 01 [DISABLE] En_health: db 00 и [ENABLE] En_one_hit_kill: db 01 [DISABLE] En_one_hit_kill: db 00 и тогда вложишь два скрипта, активации на скрипт инжекта, ПКМ на родительском и там внизу "настройка группы" - 1 опция. "скрывать вложения если неативна..." и хоткеи активации трейнера на родителя, опциональные на соответственно вторые два скрипта.
  20. Благодарю за оказанную помощь. Попытаюсь реализовать.
  21. В общем взлом достаточно интересен, особенно , что пройти интро в одиночку пока никому не удавалось... а как понимаете позваать друга в игру с обрезанным кооперативом/мультиплеером ввиду присутствия таблетки никак не получится... Вот это вам поможет: (он работает исправно, для пистолета хотя не всегда) NoReload
  22. Знания по синтаксису у меня отсутствуют, но это все гугля рассказал что.. while(!GetAsyncKeyState(VK_NUMPAD0)) //пока не нажата VK_NUMPAD0 флаг =0 { if(GetAsyncKeyState(VK_NUMPAD0)<0) //зажата клавиша VK_NUMPAD0 { здесь инвертишь значение флага (1<=>0) } if(GetAsyncKeyState(VK_NUMPAD0)==0)//отжата клавиша VK_NUMPAD0 { while( флаг равен == 1) { делать WriteProcessMemory() Sleep(1); } Sleep(1); } } int val=1, past_val=1; while(!GetAsyncKeyState(VK_F1)) { val=GetAsyncKeyState(VK_F2); past_val=val; while(val==past_val) { val=GetAsyncKeyState(VK_F2); Sleep(1); } Sleep(1); } return 0;
×
×
  • Создать...

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

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