Vlad2 Опубликовано 10 сентября, 2016 Поделиться Опубликовано 10 сентября, 2016 (изменено) Всем привет. Столкнулся с проблемой защиты кода в игре, из за чего при внедрении скриптов игра вылетает. Посмотрел видео Как я взламывал Crysis 3. Часть 2. где Xipho рассказывает, как он обошел проверку целостности кода. Решил повторить подобную ему процедуру. Поставил брекпоинт на инструкцию игры и выпала следующая инструкция, которая читает каждый байт кода игры. Скрытый текст Скрытый текст TheCrew.exe+9EC6A - cmp bl,bl TheCrew.exe+9EC6C - and al,dl TheCrew.exe+9EC6E - jmp TheCrew.exe+6A15FB TheCrew.exe+9EC73 - or eax,ecx TheCrew.exe+9EC75 - test al,6E TheCrew.exe+9EC77 - bt ebx,ecx >>> TheCrew.exe+9EC7A - xor al,[rdx] TheCrew.exe+9EC7C - cmc TheCrew.exe+9EC7D - add rdx,01 TheCrew.exe+9EC81 - jmp TheCrew.exe+6AF8B0 TheCrew.exe+9EC86 - jmp TheCrew.exe+3673B7 TheCrew.exe+9EC8B - jmp TheCrew.exe+E5B3B TheCrew.exe+9EC90 - cmc TheCrew.exe+9EC91 - xadd al,cl TheCrew.exe+9EC94 - ror al,1 TheCrew.exe+9EC96 - setno cl TheCrew.exe+9EC99 - mov al,[rbp+00] TheCrew.exe+9EC9C - adc cl,dh TheCrew.exe+9EC9E - mov cl,ah TheCrew.exe+9ECA0 - mov cl,[rbp+02] Дальше написал скрипт идентичный скрипту из видео, но немного растерялся т.к. у меня игра 64 битная, а я еще с такими еще не много опыта имею. Скрытый текст [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(IntegrityFakeCheck,256) alloc(MemoryCopy, 75112592) // Размер ехе aobscan(IntegrityAddr, 32 02 F5 48 83 C2 01 E9 2A 0C 61 00) registersymbol(IntegrityAddr) label(ReturnToOriginalCode) label(SkipCopy) label(NotInCopy) label(IntegrityCheckData) IntegrityFakeCheck: cmp [MemoryCopy],0 jne SkipCopy push rcx lea rsi,[TheCrew.exe+1000] lea rdi,[MemoryCopy] mov rcx,47A2090 //Размер ехе в hex`е repe movsb mov rcx,IntegrityAddr sub rcx,TheCrew.exe+1000 lea rdi,[MemoryCopy] mov [rdi+rcx],48f50232 mov bype ptr [rdi+rcx+4],83 pop rcx SkipCopy: cmp rcx,TheCrew.exe+1000 jb NotInCopy cmp rcx,TheCrew.exe+47A3090 ja NotInCopy sub rcx,TheCrew.exe+1000 add rcx,MemoryCopy mov [rdx],rcx NotInCopy: xor al,[rdx] cmc add rdx,01 jmp ReturnToOriginalCode+2 // +2 для того, чтобы попасть на следующую оригинальную инструкцию MemoryCopy: db 0 IntegrityAddr: jmp IntegrityFakeCheck ReturnToOriginalCode: [DISABLE] //code from here till the end of the code will be used to disable the cheat IntegrityAddr: xor al,[rdx] cmc add rdx,01 dealloc(IntegrityFakeCheck) dealloc(MemoryCopy) unregistersymbol(IntegrityAddr) Даже не сомневаюсь, что я что-то сделал не так, и после массы неудачных попыток так и не получилось сделать, чтоб скрипт работал. Скрипт просто не активируется. Подскажите, где я допустил ошибку Изменено 10 сентября, 2016 пользователем Vlad2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 10 сентября, 2016 Поделиться Опубликовано 10 сентября, 2016 1. Никогда не стоит забывать о балансировке байт при затирании оригинальной инструкции прыжком 2. Проверь количество байт для aobscan - возможно, они не уникальны и движок СЕ просто-напросто не может определиться, с каким именно адресом работать. В этом случае увеличь количество байт для сигнатуры. 3. К ReturnToOriginalCode ничего плюсовать не нужно, при создании скрипта метка и так установится там, куда нужно прыгнуть из инжекта. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 10 сентября, 2016 Автор Поделиться Опубликовано 10 сентября, 2016 Скрипт уже поправил и тщательно все проверил, по идеи должно работать, но он не активируется. Методом тыка понял, что он не активируется, из за этой инструкции: lea rsi,[TheCrew.exe+1000] потому что TheCrew.exe имеет адрес 7FF000000000, и эта инструкция его не принимает Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 10 сентября, 2016 Автор Поделиться Опубликовано 10 сентября, 2016 (изменено) И еще: Проверяющую код инструкцию xor al,[rdx] Проверяет еще несколько инструкций, в том числе и она сама. И все эти же инструкции читают каждую из них. В общем замкнутый круг, и что в такой ситуации делать? Изменено 10 сентября, 2016 пользователем Vlad2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 11 сентября, 2016 Поделиться Опубликовано 11 сентября, 2016 В крайзисе тоже она сама себя проверяла, работает же ) В твоем случае надо что-то с базовым адресом делать, я полагаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 12 сентября, 2016 Поделиться Опубликовано 12 сентября, 2016 хмм игра онлайн и есть большая вероятность доп. функционала античита - лучше копирнуть ехе который в памяти в новый блок +перенаправить сканер туда, так он никогда не найдет мод код. даже если там есть спец проверки на откл сканера - они всегда будут возвращать норм результат в телеметрию. +саму телеметрию желательно проверить, возожно там предусмотрена страховка в виде инфы оригинал блока и блока которым занимается сканер... Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 12 сентября, 2016 Поделиться Опубликовано 12 сентября, 2016 Я вскрыл пару трейнеров на игру The Crew, никакого обхода защиты не нашел. В обоих трейнерах есть иньекции. Видимо игру обновили и установили в неё защиту.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 12 сентября, 2016 Поделиться Опубликовано 12 сентября, 2016 10 час назад, gmz сказал: хмм игра онлайн и есть большая вероятность доп. функционала античита - лучше копирнуть ехе который в памяти в новый блок +перенаправить сканер туда, так он никогда не найдет мод код. даже если там есть спец проверки на откл сканера - они всегда будут возвращать норм результат в телеметрию У Xipho в уроке примерно всё это и делается. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 12 сентября, 2016 Поделиться Опубликовано 12 сентября, 2016 1 час назад, Garik66 сказал: У Xipho в уроке примерно всё это и делается. слишком хардкорд. размер пе хидера надо брать из него же и размер иниц модуля.. обычно модуль на сектора делят например по ~500кб, проще найти структуру где лежат адреса кусков, поставить хук на код который пашет когда детект, когда сканер найдет мод код (хук), он сгенерит другой хеш и сработает наш код, дальше всем адресам сменить базу на новый блок, прыгнуть на рескан и норм. кст на игре все еще тормозной вмпрот? Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 14 сентября, 2016 Автор Поделиться Опубликовано 14 сентября, 2016 В общем ничего не получилось сделать. Нашел 12 инструкций, которые сканируют код игры. Также для них написал скрипты, которые бы передавали оригинальные участки кода игры, но толку нет. Игра вылетает при любом внедрении скриптов Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 сентября, 2016 Поделиться Опубликовано 14 сентября, 2016 5 часов назад, Vlad2 сказал: В общем ничего не получилось сделать. Нашел 12 инструкций, которые сканируют код игры. Также для них написал скрипты, которые бы передавали оригинальные участки кода игры, но толку нет. Игра вылетает при любом внедрении скриптов По-видимому, что-то не правильно всё-таки сделали. А для какой игры делали? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 сентября, 2016 Поделиться Опубликовано 14 сентября, 2016 ЗЫ: первая ошибка в Вашем скрипте, которая кинулась в глаза, нет выравнивания, т.е.: 00190000 - 32 02 - xor al,[edx] 00190002 - F5 - cmc 00190003 - 83 C2 01 - add edx,01 { 1 } это 6 байт, а jmp IntegrityFakeCheck занимает 5 байт. где nop? Конечно будет вылет. Добавьте 1 nop сюда: IntegrityAddr: jmp IntegrityFakeCheck db 90 //nop ReturnToOriginalCode: Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 14 сентября, 2016 Автор Поделиться Опубликовано 14 сентября, 2016 1 час назад, Garik66 сказал: ЗЫ: первая ошибка в Вашем скрипте, которая кинулась в глаза, нет выравнивания, т.е.: Писал же, что код подправил. Хорошо, если я ошибся и не вижу ошибку, а то прям уже не знаю что делать. Если кому то интересно, то могу логин,пароль в ЛС кинуть, чтоб сами попробовали покопаться. [ENABLE] alloc(newmem, 2048, "TheCrew.exe"+6258F9) alloc(memory, 75112599) aobscan(search, 32 02 38 F8 F5 E9 E3 CE 07 00 48 83 ED 0C) registersymbol(search) registersymbol(memory) label(SkipCopy) label(returnhere) label(originalcode) newmem: cmp [memory],0 jne SkipCopy push rcx lea rsi,[TheCrew.exe+1000] lea rdi,[memory] mov rcx,47A2097 repe movsb mov rcx,search sub rcx,TheCrew.exe+1000 lea rdi,[memory] mov [rcx+rdi],f8380232 mov byte ptr [rcx+rdi+1],f5 pop rcx SkipCopy: cmp rdx,TheCrew.exe+1000 jb originalcode cmp rdx,TheCrew.exe+47A3090 ja originalcode sub rdx,TheCrew.exe+1000 add rdx,memory originalcode: xor al,[rdx] cmp al,bh cmc jmp returnhere memory: db 0 search: jmp newmem returnhere: [DISABLE] search: xor al,[rdx] cmp al,bh cmc dealloc(newmem) dealloc(memory) unregistersymbol(memory) unregistersymbol(search) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 сентября, 2016 Поделиться Опубликовано 14 сентября, 2016 (изменено) 2 часа назад, Garik66 сказал: А для какой игры делали? ЗЫ: увидел (извините читал не внимательно) - The Crew Изменено 14 сентября, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 сентября, 2016 Поделиться Опубликовано 14 сентября, 2016 Кстати, а почему у тебя здесь: mov [rcx+rdi],f8380232 mov byte ptr [rcx+rdi+1],f5 +1, хотя должно быть mov [rcx+rdi],f8380232 mov byte ptr [rcx+rdi+4],f5 т.е. пятый байт мы записываем спустя 4 байта. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 сентября, 2016 Поделиться Опубликовано 14 сентября, 2016 ЗЫ: нормальных репаков не нашёл, а парится установкой, плюс активацией и т.д., у меня сейчас времени нет. Но уверен, что если сделать всё правильно по способу Xipho, то всё будет работать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 14 сентября, 2016 Поделиться Опубликовано 14 сентября, 2016 ЗЫ: Сейчас качну игру из этой старой темы, в ней тоже было три проверки целостности кода, там нашли решение через постановку брейкпоинта. Правда она у меня будет очень сильно тормозить, так как видео карта не тянет, но попробую в воскресение (до этого у меня времени не будет) на ней сделать способ Xipho и если всё получиться запишу видео. Ссылка на комментарий Поделиться на другие сайты Поделиться
gmz Опубликовано 14 сентября, 2016 Поделиться Опубликовано 14 сентября, 2016 30 минуты назад, Garik66 сказал: ЗЫ: нормальных репаков не нашёл, а парится установкой, плюс активацией и т.д., в уплей ее ща нашару раздают, там все еще вмпрот, вероятно интересно будет Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 14 сентября, 2016 Поделиться Опубликовано 14 сентября, 2016 1 Какая версия игры у тебя, 1.1.4.0 ? 2 Какой используешь отладчик, у меня игра сразу падает. На Veh - ничего не находит. На window - падает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 14 сентября, 2016 Автор Поделиться Опубликовано 14 сентября, 2016 43 минуты назад, AntonVit сказал: 1 Какая версия игры у тебя, 1.1.4.0 ? 2 Какой используешь отладчик, у меня игра сразу падает. На Veh - ничего не находит. На window - падает. 1. Да; 2. СЕ, Режим ядра Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 14 сентября, 2016 Поделиться Опубликовано 14 сентября, 2016 Попробовал, игра падает. Покажи скрин настроек СЕ пожалуйста. У тебя какая windows стоит. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 16 сентября, 2016 Поделиться Опубликовано 16 сентября, 2016 (изменено) Есть инструкция (А) , работающая с координатами автомобиля. На целостность её проверяет инструкция (Б). Инструкцию (Б) на целостность проверяют инструкции (В, Г, Д, Е, Ё, Ж). Инструкцию (В) на целостность проверяют инструкции (Б, Г, и Д).... Всего в этом деле, относящимся к координатной инструкции, участвуют 13 инструкций, проверяющих целостность. Какие то чаще, какие то реже. Изменив одну - придется менять все. Вот один из самых простых способов обхода защиты, предложенным Geri (с сайта СЕ). Я её реализовал на 10 процентов, из 100. дальше - закончилось желание. Необходимые действия: 1. Даем 13 команд инструкцие (Б) Инструкция Б имеет вид xor al,[rdx] cmc bt edx,esi Первая команда - проверить адрес {RDX} в текущий момент и сравнить с адресом ПЕРВОЙ (её самой) инструкции, если адрес совпадает, то подменить значение RDX оригинальным значением ПЕРВОЙ инструкции Скрытый текст newmem: push rax lea rax,[rdx] // загружаем адрес в регистр rax cmp rax,7FF79BE3DE85 // сравниваем адрес в rax с адресом первой инструкции pop rax je Secondinstr // если адрес совпал, то идем на подмену значения (байт) xor al,[rdx] // не совпал, пропускаем подмену cmc bt edx,esi jmp exit Secondinstr: push rax mov rax,#3281911039 // записывание оригинального значения инструкции в регистр xor al,[rax] // подмена RDX на RAX pop rax cmc bt edx,esi jmp exit Вторая команда идентична первой, разница лишь в том, что сравнивание будет производится с адресом второй инструкции. В итоге получится что инструкция (Б) проверяя все 13 инструкций (в том числе и себя) несмотря ни на что, запишет оригинальные значения в RDX. Тоже необходимо проделать и с остальными инструкциями. В итоге получится что все 13 инструкций не будут определять подмены байт, ни самих себя, ни других. Не смотря на всю их сложную многосплетенность. Но на написания всего этого нужно время, и нужна внимательность, - одна ошибка в одной цифре, и вся система выйдет из строя. Где взять внимательность, где взять время, да еще для такой скучной игры как эта.. Самые основный читы как то, спидхак, телепорт, и прыжки, можно сделать и без внедрения в код. Следовательно. Проект закрыт. Пример спидхака, с регулировкой подачи "азота" Изменено 16 сентября, 2016 пользователем AntonVit Грам. ошибки Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 сентября, 2016 Поделиться Опубликовано 18 сентября, 2016 (изменено) В 14.09.2016в20:11, Garik66 сказал: ЗЫ: Сейчас качну игру из этой старой темы, в ней тоже было три проверки целостности кода, там нашли решение через постановку брейкпоинта. Правда она у меня будет очень сильно тормозить, так как видео карта не тянет, но попробую в воскресение (до этого у меня времени не будет) на ней сделать способ Xipho и если всё получиться запишу видео. Попробовал, но пока не получилось. Причём проблема не в написании самого кода, а в том, что в отличии игры у Xipho, наши игры 64-битные и инструкция repe movsb работает не корректно, так что сейчас создам тему в соответствующем разделе и кину сюда ссылку на неё: Тема тут. Изменено 18 сентября, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 25 сентября, 2016 Поделиться Опубликовано 25 сентября, 2016 В 14.09.2016в20:11, Garik66 сказал: и если всё получиться запишу видео. На этой неделе совсем со временем плохо было, так что практически ничего не сделал по этой теме, на следующей неделе будут длинные выходные (т.е. и суббота и воскресенье) - попробую всё-таки сделать обход защиты по методу Xipho для игры на которую дал ссылку. Сегодня чуть чуть покопался в ней - пока обнаружил там 9 проверок. Доделаю - запишу видео. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 27 сентября, 2016 Поделиться Опубликовано 27 сентября, 2016 Метод Xipho очень похож на метод SteveAndrew (http://forum.cheatengine.org/viewtopic.php?p=5462159) Xipho кто у кого подсмотрел? Я попробовал по такому методу обойти защиту в ACU, мне понравилось. Немного переделал и упростил, но суть осталась та же. Теперь вместо 142 000 строк, всего около 2 000. Активация - 2 секунды. Иньекцирование читов во всем модуле, без лишних движений, в сравнении с методом который советовал Geri. Кстати кто не знает еще, Geri, бывший модератор сайта Cheat Engine, год назад покинул нас. А когда то я с ним разговаривал по поводу Dirt 3. Но, что теперь, такова участь всех людей. И тот наиболее горюет по кому то, кто наименее помнит о "ней". Для них она неожиданность. Для тех же кто помнит о ней всегда, она служит поводом меньше злится, обижаться, по всяким глупостям и пустякам, дорожить каждым днем, каждым общением. И т.д и т. п. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения