lizzmack Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 Здравия желаю, форумчане. В деле геймхакинга зеленый, но пытался ковыряться в современных играх, а не в старых (сложнее - значит опыта в этом деле будет больше) Конкретно в Killing Floor 2(steam-версия) столкнулся с проблемой написания фильтра свой\чужой Исходя из уроков на канале gamehacklab[ru], для фильтра нужна строка со значениями, которые будут для меня одно, для всех остальных другое. т.е. выделяться фиолетовым. Скрытый текст да не тут-то было, почти все "статичные" значения, по ходу игры меняются. Соответственно, каждый раз, когда брал любое из фиолетовых, сравнивал в скрипте например cmp dword ptr [r8+сc], 140 jne code то игра вылетала уже сразу на этом этапе, даже не добавляя махинаций со значениями. p.s. заодно интересно, как выйти на структуру оружия, если единственный адреc с патронами - экранный, или зашифрованый(не смог понять, но в код выше\ниже смотрел, нигде нет call'ов и xor, бряк на запись выводит указатель на тот же адрес, что у меня в таблице)Перенес тему в соответствующий раздел (от MasterGH) Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 (изменено) Ох ну и игру ты выбрал, она на UE написана. 11 минуту назад, lizzmack сказал: cmp dword ptr [r8+сc], 140 и тут так: cmp dword ptr [r8+сc], #140 Можешь попробовать использовать сканер указателей это поможет проанализировать всю структуру начиная от главной, заканчивая вложенными и той которая использует здоровье. Кстати, возможно взял не ту инструкцию в Dishonored(UE3) была одна инструкция, которая работала только со здоровьем ГГ. Изменено 25 марта, 2017 пользователем partoftheworlD 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
lizzmack Опубликовано 25 марта, 2017 Автор Поделиться Опубликовано 25 марта, 2017 (изменено) 6 минут назад, partoftheworlD сказал: Ох ну и игру ты выбрал, она на UE написана. Извините, не в курсах, с UE что-то не так? Скрытый текст cmp dword ptr [r8+сc], #140 крашнуло сейчас гляну что с другими инструкциями, хотя там все в списке работают более чем 8 адресов Изменено 25 марта, 2017 пользователем lizzmack Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 3 минуты назад, lizzmack сказал: Извините, не в курсах, с UE что-то не так? Сложный движок для разбора, т.е там одна функция может быть вложенная вида: call fnc { ... call fnc_tier1 { ... call fnc_tier2 и т.д ... } ... } Ссылка на комментарий Поделиться на другие сайты Поделиться
lizzmack Опубликовано 25 марта, 2017 Автор Поделиться Опубликовано 25 марта, 2017 Скрин инструкций Скрытый текст пробовал нопить 3 и 4 инструкцию, отнимать 0 от текущего значения и писать максимальное в текущее. но из-за кривого фильтра все пока пустой труд был. конкретно одной инструкции на здоровье гг я так и не увидел тут, поэтому сижу, сейчас список указателей делаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 32 минуты назад, lizzmack сказал: cmp dword ptr [r8+сc], 140 Попробуй так - cmp dword ptr [r8+сc],0000008C Ссылка на комментарий Поделиться на другие сайты Поделиться
lizzmack Опубликовано 25 марта, 2017 Автор Поделиться Опубликовано 25 марта, 2017 5 минут назад, Dison сказал: Попробуй так - cmp dword ptr [r8+сc],0000008C Крашнуло(по калькулятору ввел свое значение с пересчетом на hex), + после перезапуска значение в смещении сс, которое было 0000008C сменилось на другое (000000F5) ,даже если не перезапускать игру, то значение в фиолетовых областях все равно меняется каждые несколько минут. Или я Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 Только что, lizzmack сказал: Крашнуло(по калькулятору ввел свое значение с пересчетом на hex), + после перезапуска значение в смещении сс, которое было 0000008C сменилось на другое (000000F5) ,даже если не перезапускать игру, то значение в фиолетовых областях все равно меняется каждые несколько минут. Или я Значит не правильно найден фильтр Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 Ссылка на комментарий Поделиться на другие сайты Поделиться
lizzmack Опубликовано 25 марта, 2017 Автор Поделиться Опубликовано 25 марта, 2017 2 минуты назад, Dison сказал: забыл, указать, та инструкция, что с 1 адресом работала. Она вообще непонятно как вылезла. по сути, когда бьют, и играю - вылезают только первые 4. UP: сумел снова выявить данную инструкцию, но скрипт написанный для нее - даже не включается( ошибка где-то?) Скрытый текст newmem: movd xmm1,[rdx+00000388] code: movd xmm1,[rdx+00000384] jmp return Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 (изменено) Надо писать так newmem: mov dword ptr [rdx+00000388],(float)100 - Например устанавливаем 100code: movd xmm1,[rdx+00000384] jmp return Изменено 25 марта, 2017 пользователем Dison Ссылка на комментарий Поделиться на другие сайты Поделиться
lizzmack Опубликовано 25 марта, 2017 Автор Поделиться Опубликовано 25 марта, 2017 5 минут назад, Dison сказал: Надо писать так newmem: mov dword ptr [rdx+00000388],(float)100 - Например устанавливаем 100code: movd xmm1,[rdx+00000384] jmp return Попробовал разные типы переменных float double int # скрипт все еще не реагирует на активацию. =\ (здоровье в 4 байта) Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 Только что, lizzmack сказал: Попробовал разные типы переменных float double int # скрипт все еще не реагирует на активацию. =\ (здоровье в 4 байта) Скинь полностью скрипт сюда Ссылка на комментарий Поделиться на другие сайты Поделиться
lizzmack Опубликовано 25 марта, 2017 Автор Поделиться Опубликовано 25 марта, 2017 Скрытый текст { Game : KFGame.exe Version: Date : 2017-03-25 Author : ?????? This script does blah blah blah } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique alloc(newmem,$1000,"KFGame.exe"+ACEE82) label(code) label(return) newmem: mov dword ptr [rdx+00000384],(double)100 //на double остановился на момент копирования. по смещению 384 текущее здоровье, 388 - макс. code: movd xmm1,[rdx+00000384] jmp return INJECT: jmp newmem nop nop nop return: registersymbol(INJECT) [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT: db CC 0F 6E 8A 84 03 00 00 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "KFGame.exe"+ACEE82 "KFGame.exe"+ACEE52: 45 0F B6 E0 - movzx r12d,r8l "KFGame.exe"+ACEE56: 48 8B F2 - mov rsi,rdx "KFGame.exe"+ACEE59: 48 8B E9 - mov rbp,rcx "KFGame.exe"+ACEE5C: 48 85 D2 - test rdx,rdx "KFGame.exe"+ACEE5F: 0F 84 C7 02 00 00 - je KFGame.exe+ACF12C "KFGame.exe"+ACEE65: F6 82 E8 00 00 00 02 - test byte ptr [rdx+000000E8],02 "KFGame.exe"+ACEE6C: 0F 85 BA 02 00 00 - jne KFGame.exe+ACF12C "KFGame.exe"+ACEE72: 48 8B 81 4C 02 00 00 - mov rax,[rcx+0000024C] "KFGame.exe"+ACEE79: 48 85 C0 - test rax,rax "KFGame.exe"+ACEE7C: 0F 84 AA 02 00 00 - je KFGame.exe+ACF12C // ---------- INJECTING HERE ---------- "KFGame.exe"+ACEE82: 66 0F 6E 8A 84 03 00 00 - movd xmm1,[rdx+00000384] // ---------- DONE INJECTING ---------- "KFGame.exe"+ACEE8A: 0F 57 C0 - xorps xmm0,xmm0 "KFGame.exe"+ACEE8D: 0F 5B C9 - cvtdq2ps xmm1,xmm1 "KFGame.exe"+ACEE90: 0F 2F C8 - comiss xmm1,xmm0 "KFGame.exe"+ACEE93: 0F 82 93 02 00 00 - jb KFGame.exe+ACF12C "KFGame.exe"+ACEE99: 48 3B D0 - cmp rdx,rax "KFGame.exe"+ACEE9C: 0F 84 8A 02 00 00 - je KFGame.exe+ACF12C "KFGame.exe"+ACEEA2: 48 89 5C 24 50 - mov [rsp+50],rbx "KFGame.exe"+ACEEA7: 33 DB - xor ebx,ebx "KFGame.exe"+ACEEA9: 48 89 7C 24 58 - mov [rsp+58],rdi "KFGame.exe"+ACEEAE: 33 FF - xor edi,edi } Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 Скрытый текст [ENABLE] aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique alloc(newmem,$1000,"KFGame.exe"+ACEE82) registersymbol(INJECT) label(code) label(return) newmem: mov dword ptr [rdx+00000384],(float)100 //Попробуй так code: movd xmm1,[rdx+00000384] jmp return INJECT: jmp newmem nop nop nop return: [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT: db CC 0F 6E 8A 84 03 00 00 unregistersymbol(INJECT) dealloc(newmem) Или [ENABLE] aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique alloc(newmem,$1000,"KFGame.exe"+ACEE82) registersymbol(INJECT) label(code) label(return) newmem: push [rdx+00000388] pop [rdx+00000384] code: movd xmm1,[rdx+00000384] jmp return INJECT: jmp newmem nop nop nop return: [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT: db CC 0F 6E 8A 84 03 00 00 unregistersymbol(INJECT) dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 (изменено) 12 минуты назад, lizzmack сказал: Показать содержимое { Game : KFGame.exe Version: Date : 2017-03-25 Author : ?????? This script does blah blah blah } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique alloc(newmem,$1000,"KFGame.exe"+ACEE82) label(code) label(return) newmem: mov dword ptr [rdx+00000384],(double)100 //на double остановился на момент копирования. по смещению 384 текущее здоровье, 388 - макс. code: movd xmm1,[rdx+00000384] jmp return INJECT: jmp newmem nop nop nop return: registersymbol(INJECT) [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT: db CC 0F 6E 8A 84 03 00 00 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "KFGame.exe"+ACEE82 "KFGame.exe"+ACEE52: 45 0F B6 E0 - movzx r12d,r8l "KFGame.exe"+ACEE56: 48 8B F2 - mov rsi,rdx "KFGame.exe"+ACEE59: 48 8B E9 - mov rbp,rcx "KFGame.exe"+ACEE5C: 48 85 D2 - test rdx,rdx "KFGame.exe"+ACEE5F: 0F 84 C7 02 00 00 - je KFGame.exe+ACF12C "KFGame.exe"+ACEE65: F6 82 E8 00 00 00 02 - test byte ptr [rdx+000000E8],02 "KFGame.exe"+ACEE6C: 0F 85 BA 02 00 00 - jne KFGame.exe+ACF12C "KFGame.exe"+ACEE72: 48 8B 81 4C 02 00 00 - mov rax,[rcx+0000024C] "KFGame.exe"+ACEE79: 48 85 C0 - test rax,rax "KFGame.exe"+ACEE7C: 0F 84 AA 02 00 00 - je KFGame.exe+ACF12C // ---------- INJECTING HERE ---------- "KFGame.exe"+ACEE82: 66 0F 6E 8A 84 03 00 00 - movd xmm1,[rdx+00000384] // ---------- DONE INJECTING ---------- "KFGame.exe"+ACEE8A: 0F 57 C0 - xorps xmm0,xmm0 "KFGame.exe"+ACEE8D: 0F 5B C9 - cvtdq2ps xmm1,xmm1 "KFGame.exe"+ACEE90: 0F 2F C8 - comiss xmm1,xmm0 "KFGame.exe"+ACEE93: 0F 82 93 02 00 00 - jb KFGame.exe+ACF12C "KFGame.exe"+ACEE99: 48 3B D0 - cmp rdx,rax "KFGame.exe"+ACEE9C: 0F 84 8A 02 00 00 - je KFGame.exe+ACF12C "KFGame.exe"+ACEEA2: 48 89 5C 24 50 - mov [rsp+50],rbx "KFGame.exe"+ACEEA7: 33 DB - xor ebx,ebx "KFGame.exe"+ACEEA9: 48 89 7C 24 58 - mov [rsp+58],rdi "KFGame.exe"+ACEEAE: 33 FF - xor edi,edi } Скрипт примерное такой: Скрытый текст aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique alloc(newmem,$1000,"KFGame.exe"+ACEE82) label(code) label(return) newmem: fld dword ptr [rdx+388] // Берем значение из [rdx+388] fstp dword ptr [rdx+384] // Помещаем значение из [rdx+388] в [rdx+384] code: movd xmm1,[rdx+00000384] jmp return INJECT: jmp newmem nop nop nop return: registersymbol(INJECT) Для работы с double нужно делать так вроде: Скрытый текст aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique alloc(newmem,$1000,"KFGame.exe"+ACEE82) label(Hp_Pl) label(code) label(return) label(ValueOnDouble) // Рандом название newmem: ValueOnDouble: dq(double)0 // Заместо 0 любое твое число Hp_Pl: fld dword ptr [ValueOnDouble] // Берем значение из [ValueOnDouble] fstp dword ptr [rdx+384] // И помещаем сюда code: movd xmm1,[rdx+00000384] jmp return INJECT: jmp Hp_Pl nop nop nop return: registersymbol(INJECT) Изменено 25 марта, 2017 пользователем what228 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
lizzmack Опубликовано 25 марта, 2017 Автор Поделиться Опубликовано 25 марта, 2017 (изменено) 21 минуты назад, what228 сказал: Скрипт примерное такой: Скрыть содержимое aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique alloc(newmem,$1000,"KFGame.exe"+ACEE82) label(code) label(return) newmem: fld dword ptr [rdx+388] // Берем значение из [rdx+388] fstp dword ptr [rdx+384] // Помещаем значение из [rdx+388] в [rdx+384] code: movd xmm1,[rdx+00000384] jmp return INJECT: jmp newmem nop nop nop return: registersymbol(INJECT) Для работы с double нужно делать так вроде: Скрыть содержимое aobscanmodule(INJECT,KFGame.exe,CC 0F 6E 8A 84 03 00 00) // should be unique alloc(newmem,$1000,"KFGame.exe"+ACEE82) label(Hp_Pl) label(code) label(return) label(ValueOnDouble) // Рандом название newmem: ValueOnDouble: dq(double)0 // Заместо 0 любое твое число Hp_Pl: fld dword ptr [ValueOnDouble] // Берем значение из [ValueOnDouble] fstp dword ptr [rdx+384] // И помещаем сюда code: movd xmm1,[rdx+00000384] jmp return INJECT: jmp Hp_Pl nop nop nop return: registersymbol(INJECT) Возможно уже под вечер делаю что-то не так, но крестик на скрипте как не ставился - так и не ставится. Сейчас попробую заново найти эту инструкцию и проверить расположение UPD: инструкция, на которую мне говорили писать - за 10 минут не появилась в отладчике. Подозреваю, она упорота. Остается писать фильтр для второй или четвертой, даже если значения в структурке меняются каждые пару минут. Изменено 25 марта, 2017 пользователем lizzmack Ссылка на комментарий Поделиться на другие сайты Поделиться
lizzmack Опубликовано 25 марта, 2017 Автор Поделиться Опубликовано 25 марта, 2017 UPD2: сумел найти инструкцию эту же инструкцию,вписал фильтр, вписал значение - РАБОТАЕТ. но в силу того, что инструкция вызывается раз в ХЗ сколько времени - ненадежный скрипт получился, хз даже почему он вообще работает. Подозреваю, что мне нужна одна из первых 4 какая-нибудь, которая срабатывает много раз в секунду. но фильтр у меня там не получается написать( все значения меняются бешено быстро). Попробую полазить еще утром уже, поскольку уже хоть какой-то прогресс увидел. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 9 минут назад, lizzmack сказал: но в силу того, что инструкция вызывается раз в ХЗ сколько времени - ненадежный скрипт получился, хз даже почему он вообще работает. Эта инструкция скорее всего срабатывает только при прыжке или после него. Вот залезть куда не будь, спрыгнуть и она сработает. Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 25 марта, 2017 Поделиться Опубликовано 25 марта, 2017 22 минуты назад, lizzmack сказал: UPD2: сумел найти инструкцию эту же инструкцию,вписал фильтр, вписал значение - РАБОТАЕТ. но в силу того, что инструкция вызывается раз в ХЗ сколько времени - ненадежный скрипт получился, хз даже почему он вообще работает. Подозреваю, что мне нужна одна из первых 4 какая-нибудь, которая срабатывает много раз в секунду. но фильтр у меня там не получается написать( все значения меняются бешено быстро). Попробую полазить еще утром уже, поскольку уже хоть какой-то прогресс увидел. Сейчас скачал KF2 ( repack nemos ) установлю и гляну что там с хп. Цитата В деле геймхакинга зеленый, но пытался ковыряться в современных играх, а не в старых (сложнее - значит опыта в этом деле будет больше) Стоит искать более легкие игры для постепенного обучения ибо начинать с сложных моментов не всегда хорошо. Ссылка на комментарий Поделиться на другие сайты Поделиться
ReWanet Опубликовано 26 марта, 2017 Поделиться Опубликовано 26 марта, 2017 4 часа назад, lizzmack сказал: UPD2: сумел найти инструкцию эту же инструкцию,вписал фильтр, вписал значение - РАБОТАЕТ. но в силу того, что инструкция вызывается раз в ХЗ сколько времени - ненадежный скрипт получился, хз даже почему он вообще работает. Подозреваю, что мне нужна одна из первых 4 какая-нибудь, которая срабатывает много раз в секунду. но фильтр у меня там не получается написать( все значения меняются бешено быстро). Попробую полазить еще утром уже, поскольку уже хоть какой-то прогресс увидел. Вот работает при получении урона: Скрытый текст [ENABLE] aobscanmodule(PlayerHealth,KFGame.exe,CC 07 89 06 48 83 C4 20) alloc(newmem,$1000,"KFGame.exe"+55CD0) label(code) label(return) newmem: cmp [rdi+310],8110C000 jne code cmp [rdi+434],00008387 jne code mov [rdi],64 jmp code code: mov eax,[rdi] mov [rsi],eax add rsp,20 jmp return PlayerHealth: jmp newmem nop nop nop return: registersymbol(PlayerHealth) [DISABLE] PlayerHealth: db CC 07 89 06 48 83 C4 20 unregistersymbol(PlayerHealth) dealloc(newmem) Еще на пробу с таким работал но игра крашится не знаю почему: Скрытый текст [ENABLE] aobscanmodule(pl_HP,KFGame.exe,41 8B 00 41 89 02 C3) alloc(newmem,$1000,"KFGame.exe"+E8EBE) label(code) label(return) newmem: cmp [r8+310],8110C000 jne code cmp [r8+434],00008387 jne code mov [r8],64 jmp code code: mov eax,[r8] mov [r10],eax jmp return pl_HP: jmp newmem nop return: registersymbol(pl_HP) [DISABLE] sl_HP: db 41 8B 00 41 89 02 unregistersymbol(pl_HP) dealloc(newmem) Думаю просто нужно еще фильтр накинуть и мб норм будет. Т.к. в самые первые моменты я с скриптом #2 ( mov eax,[r8] ) побегал 2 волны и не вылетало. Потом после первого вылета стало вылетать очень часто. Но не буду этим заниматься т.к. игра мне не понравилась извини. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
lizzmack Опубликовано 26 марта, 2017 Автор Поделиться Опубликовано 26 марта, 2017 8 часов назад, what228 сказал: Вот работает при получении урона: Показать содержимое [ENABLE] aobscanmodule(PlayerHealth,KFGame.exe,CC 07 89 06 48 83 C4 20) alloc(newmem,$1000,"KFGame.exe"+55CD0) label(code) label(return) newmem: cmp [rdi+310],8110C000 jne code cmp [rdi+434],00008387 jne code mov [rdi],64 jmp code code: mov eax,[rdi] mov [rsi],eax add rsp,20 jmp return PlayerHealth: jmp newmem nop nop nop return: registersymbol(PlayerHealth) [DISABLE] PlayerHealth: db CC 07 89 06 48 83 C4 20 unregistersymbol(PlayerHealth) dealloc(newmem) Еще на пробу с таким работал но игра крашится не знаю почему: Показать содержимое [ENABLE] aobscanmodule(pl_HP,KFGame.exe,41 8B 00 41 89 02 C3) alloc(newmem,$1000,"KFGame.exe"+E8EBE) label(code) label(return) newmem: cmp [r8+310],8110C000 jne code cmp [r8+434],00008387 jne code mov [r8],64 jmp code code: mov eax,[r8] mov [r10],eax jmp return pl_HP: jmp newmem nop return: registersymbol(pl_HP) [DISABLE] sl_HP: db 41 8B 00 41 89 02 unregistersymbol(pl_HP) dealloc(newmem) Думаю просто нужно еще фильтр накинуть и мб норм будет. Т.к. в самые первые моменты я с скриптом #2 ( mov eax,[r8] ) побегал 2 волны и не вылетало. Потом после первого вылета стало вылетать очень часто. Но не буду этим заниматься т.к. игра мне не понравилась извини. Благодарю. многоразовая проверка для фильтра действительно избавила от вылетов,осталось найти значения, которые вообще не меняются, чем сейчас и попробую заняться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения