MasterGH Опубликовано 2 мая, 2015 Поделиться Опубликовано 2 мая, 2015 Итак еще способы попробую 1. Использовать указатели и цепочки указателей 2. Использовать вызов функций (например когда берем деньги, то появляется уведомление) Способ прикольный, тем что код не меняется, а значит защита может спокойно себя чувствовать. Но функции вызывать может быть сложным. 3. Постоянно держать игру под отладкой. Например, когда прерываемся на адресе инструкции, то на Луа по данным регистров что-то делать... Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 Указатель на деньги не удалось достроить через трассировку Показать контент --print(readInteger('7FFFB114540+28'))--print(readInteger('[80E95FC0]+28'))--print(readInteger('[[929F0F20+08]]+28'))--print(readInteger('[[929F0F08+18+08]]+28'))--print(readInteger('[[929F0F00+08+18+08]]+28'))--print(readInteger('[[[7FFFBEDCD88]+08+18+08]]+28'))--print(readInteger('[[[7FFFBEDCD80+8]+08+18+08]]+28'))--print(readInteger('[[[[74B347C0+A8]+8]+08+18+08]]+28'))--print(readInteger('[[[[[74B33370+b8]+A8]+8]+08+18+08]]+28'))--print(readInteger('[[[[[[[75183850+78]+24*8]+b8]+A8]+8]+08+18+08]]+28'))--print(readInteger('[[[[[[[[7D037860+a8]+78]+24*8]+b8]+A8]+8]+08+18+08]]+28'))print(readInteger('[[[[[[[[[7FFFB111C20+18]+a8]+78]+24*8]+b8]+A8]+8]+08+18+08]]+28'))7FFFB111C2014119777B - CC - int 3 14119777C - CC - int 3 14119777D - CC - int 3 14119777E - CC - int 3 14119777F - CC - int 3 141197780 - 48 89 5C 24 08 - mov [rsp+08],rbx // откуда идет сюда прыжок не удалось узнать141197785 - 48 89 6C 24 10 - mov [rsp+10],rbp 14119778A - 48 89 74 24 18 - mov [rsp+18],rsi14119778F - 57 - push rdi141197790 - 48 83 EC 30 - sub rsp,30141197794 - 48 8B 69 18 - mov rbp,[rcx+18] //[rcx+18] = 7FFFB111C20141197798 - 48 8B DA - mov rbx,rdx14119779B - 48 8B 8D A8000000 - mov rcx,[rbp+000000A8]1411977A2 - E8 99C8B5FF - call 140CF40401411977A7 - 48 8D 4B 30 - lea rcx,[rbx+30]1411977AB - 48 8B F0 - mov rsi,rax1411977AE - E8 FD9BB300 - call 141CD13B01411977B3 - 48 8B F8 - mov rdi,rax1411977B6 - 48 85 C0 - test rax,rax1411977B9 - 74 71 - je 14119782C1411977BB - 48 8B C8 - mov rcx,rax1411977BE - E8 7DC8B5FF - call 140CF40401411977C3 - 48 8B D0 - mov rdx,rax1411977C6 - 48 85 C0 - test rax,rax1411977C9 - 74 56 - je 1411978211411977CB - 8B 4B 10 - mov ecx,[rbx+10]... Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 (изменено) Что-то MasterGH погорячился конечно тему чистить. Чужой скрипт был приведен с единственной целью - посмотреть как защита обходится. Ещё раз напишу идею: 1) ставим бряк при помощи lua-фунции LuaCall(debug_setBreakpoint("адрес_ориг_инструкции")) 2) Меняем в обработчике прерываний debugger_onBreakpoint() содержимое регистра RIP адресом нашей инъекции 3) Проверяем. При отключении чита не забываем снять точку останова LuaCall(RemoveBreakPointNow("адрес_ориг_инструкции")) Самому чтоли скачать, проверить и поделиться СВОИМИ скриптами... честно говоря лениво, но проверить способ интересно. MasterGH: Чужие скрипты взятые из трейнеров публиковать нельзя. Другое дело, если автор свой же скрипт опубликовал в Интернете, тогда скрипт можно приводить ссылаясь на источник. Изменено 3 мая, 2015 пользователем MasterGH Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 3 мая, 2015 Автор Поделиться Опубликовано 3 мая, 2015 В 03.05.2015 в 11:09, aliast сказал: Самому чтоли скачать, проверить и поделиться СВОИМИ скриптами... честно говоря лениво, но проверить способ интересно. Давай подключайся к нам. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 (изменено) Ещё до выкладывания скриптов aliast, была идея прописывать все повторяющиеся при перезагрузки игры регистры, но идея не сработала, т.к. основной (как я понял регистр RIP) СЕ не компилирует.Пытался доработать этот скрипт: Показать контент В 03.05.2015 в 11:09, aliast сказал: Ещё раз напишу идеюaliast, я не понимаю, как это должно работать.Может более подробно изложишь идею, как для лузера. [ENABLE]alloc(newMem1, 64)alloc(newMem2, 64)alloc(newMem3, 64)label(returnHere1)label(returnHere2)label(returnHere3)newMem1:mov RAX,000000007F4E35E1mov RDX,000000014771634A//push rcx // СЕ не компилирует не в таком варианте//mov rcx,ACU.exe//add rcx,55D7421//mov RIP,rcx//pop rcx//mov RIP,00000001455D7421 // не в такомmov R12,00000001455D54A0mov R15,0000000000000000xor al,[rdx]stc jmp ACU.exe+55D7AC3jmp returnHere1newMem2:mov RAX,0000000000000066mov RDX,00000001455CFAA4//mov RIP,00000001455D6591 // СЕ не компилируетmov R12,00000001455F0605mov R15,00000000000000B0xor al,[rdx]test bl,-65jmp returnHere2newMem3:mov RAX,0000000010278000mov RDX,00000001455D5599//mov RIP,0000000140007F4A // СЕ не компилируетmov R12,00000001455CE8B0mov R15,00000000000000B0xor al,[rdx]cmctest al,3Fjmp returnHere3ACU.exe+55D741F:jmp newMem1db 90 90 90returnHere1:ACU.exe+55D658F:jmp newMem2returnHere2:ACU.WriteData+22C8:jmp newMem3returnHere3:[DISABLE]ACU.exe+55D741F:xor al,[rdx]stc jmp ACU.exe+55D7AC3ACU.exe+55D658F:xor al,[rdx]test bl,-65ACU.WriteData+22C8:xor al,[rdx]cmctest al,3Fdealloc(newMem1)dealloc(newMem2)dealloc(newMem3) Изменено 3 мая, 2015 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 Garik66, менять значения регистров eip и rip нельзя менять АА скриптами. Это можно сделать только в режиме отладки. В 03.05.2015 в 15:34, Garik66 сказал: aliast, я не понимаю, как это должно работать. Может более подробно изложишь идею, как для лузера. Представь себе, что ты на инструкции отладочного кода денег, здоровья или еще чего нажал на F5. Инструкция прервалась, процесс игры остановлен. Ты вручную меняешь регистры через отладку, адреса через отладку... И отпускаешь игру. А поменяв RIP вручную, можешь перескочить на твой код. А вот Lua позволяет это автоматизировать. Например, поменять RIP регистр на прерывании на инструкции в автоматическом режиме. Т.е. без изменения оригинального кода так можно прыгнуть на новый код по RIP. Здесь надо экспериментировать с Lua по работе в отладке. Но, тут привязка к VEH дебаггеру. Тут привязка к Cheat Engine движку и трейнерам созданных на CE. Любая игра под отладкой будет работать медленнее. В общем это обход защиты от изменения кода, но не отключение защиты. Но как вариант на худой конец может подойти. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 (изменено) В 03.05.2015 в 16:32, MasterGH сказал: Представь себеСпасибо MasterGH.Но разве такой метод не повлияет на игру, я имею ввиду она же по-идее будет тормозить. aliast, на PG.ru трейнеры для этой игры от двух авторов, интересно у второго автора тоже используется метод отладки при обходе защиты? Изменено 3 мая, 2015 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 Под отладкой игра может работать ощутимо медленнее чем без неё. Тормоза в первую очередь зависят от того, как часто будет прерываться инструкция под отладкой и как как быстро выполнится Lua код. Ничего не могу сказать про трейнеры с PG. Только код чужих трейнеров не публикуйте и скрипт без ссылки на источник. Мне придется его удалить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 мая, 2015 Поделиться Опубликовано 3 мая, 2015 В 03.05.2015 в 11:09, aliast сказал: но проверить способ интересно.Проверил (подправил Lua-скрипт, который ты выкладывал - удалил лишние адреса, оставил только healthbase) и в скрипте InfHealth добавил ту строчку, которую СЕ не хочет компилировать {LuaCall(RemoveBreakPointNow("healthbase"))}, не обращая внимание на СЕ, сохранил скрипты и активировал.Обход защиты работает (насколько тормозит игра из-за этого метода сказать не могу, так как у меня и так всё тормозит), игра не вылетает. Убил там несколько челов, но проверить работает ли сам скрипт не могу - не знаю где посмотреть жизни. Но метод рабочий.Так что Dison, можешь пользовать этот метод, нужно только научиться, как изменить стандартный вид скрипта, чтобы использовать в этом методе. А в Lua-скрипт, просто добавлять новые адреса. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 В 03.05.2015 в 22:15, Garik66 сказал: Так что Dison, можешь пользовать этот метод Гарик какой метод где скрипт Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 (изменено) В 04.05.2015 в 00:48, Dison сказал: Гарик какой метод где скрипт Я думал, что ты следил за своей темой - и соответственно успел скопировать скрипты, которые выкладывал aliast. MasterGH почистил тему, т.к. скрипты взяты из трейнера без согласия автора (с PG.ru). Суть метода, что мы как бы не меняем кода игры своими скриптами, точнее смотри это сообщение MasterGH и это сообщение aliast. Скрипты, которые у меня есть: скрипт InfHealth и сопутствующий ему скрипт LUA. Могу кинуть тебе в личку, если нужны. Изменено 4 мая, 2015 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 4 мая, 2015 Автор Поделиться Опубликовано 4 мая, 2015 В 04.05.2015 в 01:27, Garik66 сказал: Могу кинуть тебе в личку, если нужны. Гарик кинь в личку и по подробнее объясни Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 мая, 2015 Поделиться Опубликовано 4 мая, 2015 В 04.05.2015 в 10:50, Dison сказал: Гарик кинь в личку и по подробнее объясниКинул. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 7 мая, 2015 Автор Поделиться Опубликовано 7 мая, 2015 Впринципе я добился успеха по обходу защиты в игре. То что у меня получилось 1 - Скриптовые наброски Aliast и Garik662 - Игра не вылетает при активации скрипта3 - Получилось у меня добавить денег в кол-ве 9999999 и бесконечных предметов в кол-ве 994 - Если активировать и деактивировать несколько раз, то может быть вылет, вот с этим я еще пробую разобраться Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 7 мая, 2015 Поделиться Опубликовано 7 мая, 2015 Выкладывай скрипты, будет время, затестим. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 7 мая, 2015 Автор Поделиться Опубликовано 7 мая, 2015 (изменено) 1 - Итак приступим первое что нам нужно это добавить этот скрипт LUA Показать контент 2 - Далее запускаем отладчик скриптом который ниже3 - Пишем скрипт, я один приведу ниже Показать контент function debugger_onBreakpoint()if (RIP == getAddress("items")) then RIP=getAddress("itemsnewmem") debug_continueFromBreakpoint(co_run) return 1elseif (RIP == getAddress("healthbase")) then RIP=getAddress("healthnewmem") debug_continueFromBreakpoint(co_run) return 1elseif (RIP == getAddress("skillpoints")) then RIP=getAddress("skillpointsnewmem") debug_continueFromBreakpoint(co_run) return 1elseif (RIP == getAddress("creedpoints")) then RIP=getAddress("creedpointsnewmem") debug_continueFromBreakpoint(co_run) return 1else debug_continueFromBreakpoint(co_run) return 0 endendfunction SetBreakPointNow(AddressofAOB)debug_setBreakpoint(AddressofAOB)endfunction RemoveBreakPointNow(AddressofAOB)endfunction ActiveTheScripts()pause()table=getAddressList()i=1while i<5 domemory_record1=addresslist_getMemoryRecord(table,i)memoryrecord_freeze(memory_record1)i = i+3endlocal isActive=memoryrecord_isActive(memory_record1) --get the state after the hotkey got triggeredunpause()endfunction StartDebugging()debugProcess(2)endfunction DeActiveTheScripts()pause()table=getAddressList()i=1while i<5 domemory_record1=addresslist_getMemoryRecord(table,i)memoryrecord_unfreeze(memory_record1)i = i+1endlocal isActive=memoryrecord_isActive(memory_record1) --get the state after the hotkey got triggered[ENABLE]LuaCall(StartDebugging()) -- Запускает отладчик//LuaCall(ActiveTheScripts()) -- Если активно то активирует скрипты автоматически[DISABLE]LuaCall(DeActiveTheScripts()) -- Выключает скрипты[ENABLE]aobscanmodule(items,ACU.exe,39 78 28 0F 93 C0 48 8B 5C 24 30 48 83 C4 20 5F C3 48 8B 5C 24 30 48 83 C4 20 5F C3)registersymbol(items)alloc(itemsnewmem,2048,items)registersymbol(itemsnewmem)label(originalcode)label(above63)label(returnhere)registersymbol(itemE) -- Регистрируем метку отвечающую за кол-во предметовregistersymbol(moneyE) -- Регистрируем метку отвечающую за кол-во денегlabel(moneyE) -- Создаем метку отвечающую за кол-во денегlabel(itemE) -- Создаем метку отвечающую за кол-во предметовitemsnewmem: cmp [rax+28],63jg above63cmp [itemE],0je originalcodemov [rax+28],63jmp originalcodeabove63:cmp [moneyE],0je originalcodemov [rax+28],#9999999originalcode2:cmp [rax+28],edisetae aljmp returnhereitemE:dd 0moneyE:dd 0items+6://"ACU.exe"+EBD057://jmp newmem//nopreturnhere:LuaCall(SetBreakPointNow("items"))[DISABLE]items:////cmp [rax+28],edi//setae alLuaCall(RemoveBreakPointNow("items"))//Alt: db 39 78 28 0F 93 C0unregistersymbol(items)unregistersymbol(itemE)unregistersymbol(moneyE)unregistersymbol(itemsnewmem)dealloc(itemsnewmem) Изменено 8 мая, 2015 пользователем Dison 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 25 сентября, 2016 Поделиться Опубликовано 25 сентября, 2016 MasterGH В Твоем варианте 4 недочета. 1. CE не может сравнить адрес из [RDX] таким способом: cmp rdx,1455d741f Но может: push rsi push rdi lea rsi,[rdx] mov rdi,00000001455d741f cmp rsi,rdi pop rdi pop rsi je Ouradress 2. Так как регистр RDX восьми байтовый, то нужно брать большее количество байт для подмены Например инструкции xor al,[rdx] stc jmp ACU.exe+55D7AC3 состоят из следующие байт - 32 02 F9 E9 9C 06 00 00 Нужно брать на 4 более "до" и "после" них. - 50 AA FF FF - 32 02 F9 E9 9C 06 00 00 - E9 26 59 FF 3. CE не может корректно установить 64 битный адрес (вариант из Твоей таблицы) cmp rdx,1455d741f je x1 В итоге в месте прыжка он будет выглядеть так (без единицы вначале) cmp rdx,455d741f je x1 Можно выйти из положения: push rsi push rdi lea rsi,[rdx] mov rdi,00000001455d741f cmp rsi,rdi pop rdi pop rsi je Ouradress 4. В этой игре не 4, и не 5, и даже не 10 проверяющих инструкций. Минимум 13. Некоторые срабатывают после нескольких минут. (В "The crew" - минимум 21) Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 26 сентября, 2016 Поделиться Опубликовано 26 сентября, 2016 (изменено) Защита ACU обезврежена. Инъекции инъекцируются, игра играется. ~~ 142 000 строк кода вручную, на активацию, - минута Брейкпоинт/дебаг, полный дамп модулей, - не используется. *Но как сказал Еклисиаст, - "Суета сует и томление духа". Изменено 26 сентября, 2016 пользователем AntonVit Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 5 октября, 2016 Поделиться Опубликовано 5 октября, 2016 В 07.05.2015 в 06:47, Dison сказал: Впринципе я добился успеха по обходу защиты в игре. Показать Dison, тебе должно понравиться - посмотри. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 5 октября, 2016 Автор Поделиться Опубликовано 5 октября, 2016 В 05.10.2016 в 17:23, Garik66 сказал: тебе должно понравиться Показать Интересный и познавательный урок. Спасибо! 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения