Tiger Опубликовано 27 ноября, 2013 Поделиться Опубликовано 27 ноября, 2013 В общем взлом достаточно интересен, особенно , что пройти интро в одиночку пока никому не удавалось... а как понимаете позваать друга в игру с обрезанным кооперативом/мультиплеером ввиду присутствия таблетки никак не получится...Вот это вам поможет: (он работает исправно, для пистолета хотя не всегда)NoReload[ENABLE]alloc(newmem,200)label(returnhere)label(step)alloc(newmem2,200)label(returnhere2)label(step2)aobscan(NoReloadAOB,0f b6 85 6b ef ff ff 85 c0)registersymbol(NoReloadAOB)newmem:movzx eax,byte ptr [ebp-00001095]test eax,eaxje stepmov eax,[edi+0000023C]//dec eaxmov [edi+0000023C],eaxstep:mov eax,[edi+00000370]//dec eaxmov [edi+00000370],eaxjmp NoReloadAOB+25jmp returnherenewmem2:movzx eax,byte ptr [ebp-00001095]test eax,eaxje step2mov eax,[edi+0000023C]//dec eaxmov [edi+0000023C],eaxstep2:mov eax,[edi+00000370]//dec eaxmov [edi+00000370],eaxjmp NoReloadAOB+13b5jmp returnhere2NoReloadAOB:jmp newmemnopnopreturnhere:NoReloadAOB+1390:jmp newmem2nopnopreturnhere2:[DISABLE]dealloc(newmem)dealloc(newmem2)NoReloadAOB:movzx eax,byte ptr [ebp-00001095]NoReloadAOB+1390:movzx eax,byte ptr [ebp-00001095]//Alt: db 0F B6 85 6B EF FF FFunregistersymbol(NoReloadAOB)Как видно в сикрипте инжекты повешены с поиском смещения по программному коду +25/+25+1390Меня интересует такой вопрос, как регистрировать отличные глобальные переменные по идентичному аобскану, если требуемая инструкция дублируется в месте требуемого инжекта практически идентично.В общем алгоритм таков. Если инжектить 2жды продублированный код поочереди(из разных скриптов поледовательной активацией) то все работает, как засунуть, например, цикл перебора всех побайтовых совпадений в зарезервированной памяти приложения с присвоением порядкого номера.... ну как например совпадение инструкций при "поиске инструкции" в меморивью идентичных много, а аобскан при дублировании регистрации по аналогичной маске творит непойми что...HELP так как по данной игре такого много.... И как понимаете после обновления заново шарить смещения не из прияных... Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 27 ноября, 2013 Поделиться Опубликовано 27 ноября, 2013 Может я чайник, но я ничего не понял из того, что ты написал. Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 27 ноября, 2013 Поделиться Опубликовано 27 ноября, 2013 С тебя хорошый политик получится ) Ссылка на комментарий Поделиться на другие сайты Поделиться
Tiger Опубликовано 27 ноября, 2013 Автор Поделиться Опубликовано 27 ноября, 2013 Тему DEL пожалуйста. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 27 ноября, 2013 Поделиться Опубликовано 27 ноября, 2013 Если я не ошибаюсь, речь идет о последовательном поиске двух и более вхождений одинаковых цепочек байт. Но ведь ничто не мешает сделать этот обход дважды. По крайней мере, когда пишешь собственный движок, обычно при нахождении первой сигнатуры поиск останавливается, но в собственном движке никто не мешает искать совпадения сколько угодно раз, заносить их, скажем, в массив, и затем также последовательно патчить. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 ноября, 2013 Поделиться Опубликовано 28 ноября, 2013 (изменено) Тему DEL пожалуйста.А почему ты решил закрыть тему, если ответ на вопрос еще не получил? Вопрос немного запутанно описан, но я понял проблему.Сначала мой пример для данного случая (по идее должен работать).Фишка с использованием call и возвращение по ret. Прыги очевидно работают быстрее, но ты же не программу драйвера инжектишь aobscan(NoReloadAOB,0f b6 85 6b ef ff ff 85 c0)registersymbol(NoReloadAOB)alloc(newmem, 2048) // если я не путаю страница памяти на 32 виндах выравнивается до 2КБ, не меньшеlabel(newmem2)// память можно не выделять второй разnewmem:movzx eax,byte ptr [ebp-00001095]test eax,eaxje stepmov eax,[edi+0000023C]mov [edi+00000370],eaxret //возврат из callstep:mov eax,[edi+00000370]mov [edi+00000370],eaxret// возврат из callNoReloadAOB:call newmemnopnopNoReloadAOB+1390:call newmemnopnop[DISABLE]NoReloadAOB:movzx eax,byte ptr [ebp-00001095]NoReloadAOB+1390:movzx eax,byte ptr [ebp-00001095]//Alt: db 0F B6 85 6B EF FF FFunregistersymbol(NoReloadAOB)dealloc(newmem)[ENABLE]Если принципиально стоит задача, что сигнатура должна быть одна от неё по жестко заданным смещениям должны быть глобально зарегистрированы адреса, то наверно так[ENABLE]aobscan(NoReloadAOB,0f b6 85 6b ef ff ff 85 c0)registersymbol(NoReloadAOB)label(NoReloadAOB2)registersymbol(NoReloadAOB2)alloc(newmem, 2048) // если я не путаю страница памяти на 32 виндах выравнивается до 2КБ, не меньше//... вырезаноNoReloadAOB:jmp newmemnopnopreturnhere:NoReloadAOB+1390:NoReloadAOB2: // NoReloadAOB2 должна быть зарегистрирована именно в этом местеjmp newmem2nopnopreturnhere2:[DISABLE]//вырезаноЕсли задача в том чтобы не рассчитывать смещения от одной сигнатуры, то можно попробовать определить одинаковую сигнатуру. Через CE Lua Engine получить все результаты поиска сигнатуры и сделать автоматические описания инъекции и отмены инъекции АА-кода через Lua скрипт...Если одинаковая сигнатура не получается, то искать уникальные сигнатуры и для каждой писать aobscan в АА скрипте...Вопрос решен? Изменено 28 ноября, 2013 пользователем MasterGH Ссылка на комментарий Поделиться на другие сайты Поделиться
Tiger Опубликовано 28 ноября, 2013 Автор Поделиться Опубликовано 28 ноября, 2013 Благодарю за оказанную помощь. Попытаюсь реализовать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 29 ноября, 2013 Поделиться Опубликовано 29 ноября, 2013 Наш ресурс и существует для того, чтобы помогать )) Обращайся еще, только, на будущее, старайся формулировать задачу чуть яснее, ок? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения