Alex2411 Опубликовано 9 января, 2019 Поделиться Опубликовано 9 января, 2019 мне часто нужно объединять несколько скриптов . отдельно скрипты работают , а когда соединю вместе , то игра зависает иногда крашится . где мне почитать как правильно сделать один скрипт? смотрел много ваших видео уроков , но не нашел . думаю наверно я путаю метки или прыжки Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 10 января, 2019 Поделиться Опубликовано 10 января, 2019 7 часов назад, Alex2411 сказал: смотрел много ваших видео уроков Вроде у @Garik66 есть урок на эту тему. Если нет - скажи, я сниму. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 10 января, 2019 Поделиться Опубликовано 10 января, 2019 20 часов назад, Alex2411 сказал: думаю наверно я путаю метки или прыжки Да хотя бы так... Спойлер [ENABLE] aobscanmodule(baseplayer_1,opera.exe,00 8B C3 48 8B 5C 24 40) aobscanmodule(baseplayer_2,opera.exe,41 8D 50 02 33 C9) alloc(newmem,$1000) label(exit_1) label(function_1) label(baseplayer_1back) label(exit_2) label(function_2) label(baseplayer_2back) newmem: function_1: exit_1: mov rbx,[rsp+40] jmp baseplayer_1back function_2: exit_2: lea edx,[r8+02] xor ecx,ecx jmp baseplayer_2back baseplayer_1: jmp function_1 baseplayer_1back: baseplayer_2: jmp function_2 db 90 baseplayer_2back: registersymbol(baseplayer_1) registersymbol(baseplayer_2) [DISABLE] baseplayer_1: db 48 8B 5C 24 40 baseplayer_2: db 41 8D 50 02 33 C9 unregistersymbol(baseplayer_1) unregistersymbol(baseplayer_2) dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 10 января, 2019 Автор Поделиться Опубликовано 10 января, 2019 12 часов назад, Xipho сказал: Вроде у @Garik66 есть урок на эту тему. Если нет - скажи, я сниму. не нашел . моежт плохо поискал не знаю. если можешь сделай пожалуйста видео урок как правильно соединить несколько скриптов . если получиться на сложном примере что бы все особенности показать . скйчас я делаю годмод на одну космическую леталку там получилось 5 скриптов . один скрипт для поиска фильтра и другие для разных повреждений с фильтром из первого скрипта. пробовал их соединить и чего то не так делаю . игра то зависает то годмод на половину не работает то фильтры на чужих не правильно работают . запутался . хочу разобраться что бы понять как надо. еще хотел попросить . продолжи пожалуйста уроки про команды ассемблера . очень полезно . там вроде дальше про команды xmm . давно жду продолжения . 9 часов назад, LIRW сказал: Да хотя бы так... спасибо . не большие скрипты я тоже примерно так делаю , но не все понятно . объясни пожалуйта почему ты прыгаешь baseplayer_1 на function_1 , а не newmem ? почему нет label на function_1 ? baseplayer_1back надо обязательно ставить после прыжка baseplayer_1 , а не в самом низу ? можно сделать один return в низу для всех или делать так нельзя нужно отдельный return каждому скрипту ? почему registersymbol у тебя стоят в конце , а не после label ? в каком месте правильно поставить метки от разных скриптов типа aaa: dd 0 bbb: dd 0 ? важно в каком порядке записать разные скрипты ? у тебя с начала baseplayer_1 потом baseplayer_2 , а если все наоброт будет работать ? заодно хотел спросить . инструкция типа [eax+14] и [eax+00000014] они всегда одинаковые ? видел в играх так и так , а чем отличается не понятно . Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 10 января, 2019 Поделиться Опубликовано 10 января, 2019 15 минут назад, Alex2411 сказал: почему ты прыгаешь baseplayer_1 на function_1 , а не newmem ? Потому что кусок выделенной памяти один, а не два... Прыгаю на начало каждой функции. 24 минуты назад, Alex2411 сказал: важно в каком порядке записать разные скрипты ? Нет.. Это просто различие такое _1 _2 все функции одинаковые, писать быстрее меняя всего лишь цифру. Можешь хоть с 0 начинать выше писать baseplayer_5 а ниже baseplayer_1 этого всего лишь отличия. 15 минут назад, Alex2411 сказал: почему нет label на function_1 ? Потому что забыл в спешке 16 минут назад, Alex2411 сказал: в каком месте правильно поставить метки от разных скриптов типа смотря что туда загружаешь по размеру... Хотя мне кажется СЕ само размер выставит и в dd засунет даже qw Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 10 января, 2019 Автор Поделиться Опубликовано 10 января, 2019 37 минут назад, LIRW сказал: Потому что кусок выделенной памяти один, а не два... Прыгаю на начало каждой функции. а когда скрипт один почему тогда можно прыгать jmp newmem , а не делать отдельную метку function после newmem что бы прыгать на function? мне не очень понятно . 38 минут назад, LIRW сказал: смотря что туда загружаешь по размеру.. не , я про другое . попробую объяснить. допустим есть скрипт поиск фильтра игрока. нашел число игрока записал в метку filter . есть другой скрипт умножение скорости игрока . умножает на метку speed , а свой чужой фильтрует через метку filter из первого срипта. я хочу эти скрипты соединить . мне нужно записать где то в новом скрипте filter: dd 0 //с начала ноль в фильтр speed: dd 1 //с начала умножать скорость на 1 в каком месте скрипта эти метки из разных скриптов нужно записать что бы скрипт правильно работал? когда скрипт один я записываю перед прыжком на newmem , а если скриптов несколько ? Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 10 января, 2019 Поделиться Опубликовано 10 января, 2019 17 минут назад, Alex2411 сказал: а когда скрипт один почему тогда можно прыгать jmp newmem Наверное потому, что и function_1 vs function_2 писать не надо. Делить то не чего.. 31 минуту назад, Alex2411 сказал: опустим есть скрипт поиск фильтра игрока. нашел число игрока записал в метку filter Если я правильно понял, то как то так наверное делается.. Спойлер newmem: qwe_1: mov eax,[ecx+4] mov [filter],eax jmp ret_1 qwe_2: mov ebx,[ecx+4] cmp [filter],ebx jne exit imul ebx,[speed] exit: jmp ret_2 speed: dd 4 <---------- множ как угодно. конечно такое на вряд ли будет, так как данные скорее всего с (.) тут зависит от ситуации и везде по разному делается... Но опять же, можно и почитать в интернете о множении тех же xmm... Способов реализовать подобное много. Это всего лишь пример. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 10 января, 2019 Автор Поделиться Опубликовано 10 января, 2019 51 минуту назад, LIRW сказал: Если я правильно понял, то как то так наверное делается. спсибо что помогаешь. форум не дает плюсик поставить. умножать я вроде умею . тут мне не понятно другое . куда в твоем примере скрипта будет правильно вписать метку filter: dd 0 из первого скрипта ? сразу после jmp ret_1 или после jmp ret_2 рядом с меткой speed или где то в другом месте ? просто мне не понятно в каком месте скрипта записывать такие метки из разных скриптов, если несколько скриптов надо объединить в один.. то ли все метки рядом то ли каждую рядом с частью от ее скрипта Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 10 января, 2019 Поделиться Опубликовано 10 января, 2019 14 минут назад, Alex2411 сказал: просто мне не понятно в каком месте скрипта записывать такие метки из разных скриптов, Всё можно писать в самом конце последней функции. Или там же так же.. Спойлер qwe_1: mov eax,[ecx+4] mov [filter],eax jmp ret_1 filter: dd 0 qwe_2: mov ebx,[ecx+4] cmp [filter],ebx jne exit imul ebx,[speed] Спойлер originalcode: xxxxxxxx jmp return metka_1: // пиши сколько хочешь.. dd metka_2: dd function_1: jmp // нужная функция return: Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 10 января, 2019 Автор Поделиться Опубликовано 10 января, 2019 11 минут назад, LIRW сказал: Всё можно писать в самом конце последней функции. теперь понял . :) спасибо Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 января, 2019 Поделиться Опубликовано 10 января, 2019 3 часа назад, Alex2411 сказал: не нашел . моежт плохо поискал не знаю я в очень многих видео останавливался на объединении скриптов (конечно об этом говорилось в конце видео). Ну и думаю ты понимаешь, что объединялись скрипты при написании более сложных опций. Ну к примеру взял вот первое попавшееся видос: 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 10 января, 2019 Автор Поделиться Опубликовано 10 января, 2019 1 час назад, Garik66 сказал: я в очень многих видео останавливался на объединении скриптов (конечно об этом говорилось в конце видео). Ну и думаю ты понимаешь, что объединялись скрипты при написании более сложных опций. я даже не знал . игры дарк соулс у меня нет , а по названию видео не понятно что там есть про объединение скриптов . скачал буду смотреть . спасибо. посоветуй еще пожалуйста что посмотреть твоего видео по моему вопросу . чем больше тем лучше . сложных опций это очень хорошо . буду изучать . полезных знаний много не бывает ))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 10 января, 2019 Поделиться Опубликовано 10 января, 2019 5 минут назад, Alex2411 сказал: посоветуй еще пожалуйста что посмотреть твоего видео по моему вопросу шутишь что-ли.. У меня где-то 300 видео - ты думаешь я помню, где в каком о чем говорил. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 10 января, 2019 Поделиться Опубликовано 10 января, 2019 В 09.01.2019 в 22:22, Alex2411 сказал: отдельно скрипты работают , а когда соединю вместе , то игра зависает иногда крашится Просто покажи как ты объединяешь скрипты. Может быть там ошибка от простой до той, с которой надо сидеть и разбираться в отладке. CE иногда может с багами скрипты компилировать Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 11 января, 2019 Автор Поделиться Опубликовано 11 января, 2019 (изменено) собираю скрипт и столкнулся проблемой . помогите решить пожалуйста в игре участок кода call xxx1 fld qword ptr [eax+40] call xxx2 мне нужно инжекцию кода на инструкцию fld qword ptr [eax+40] . она занимает 3 байт . на адреса call xxx1 и call xxx2 игра иногда прыгает. поэтому когда call скрипт переносит в выделеную память игра не попадает на call и вылетает . что можно сделать ? Изменено 11 января, 2019 пользователем Xipho Правила публикации и использования тэгов отменили? Нет, не думаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 11 января, 2019 Поделиться Опубликовано 11 января, 2019 1 час назад, Alex2411 сказал: что можно сделать ? инжект на другом куске памяти где-нибудь до выполнения этой инструкции. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 11 января, 2019 Автор Поделиться Опубликовано 11 января, 2019 1 час назад, partoftheworlD сказал: инжект на другом куске памяти где-нибудь до выполнения этой инструкции. я пробовал . у меня не получаеться . код игры 00626966 - E8 29D8DDFF - call 00404194 0062696B - DD 40 40 - fld qword ptr [eax+40] 0062696E - E8 A1C6DDFF - call 00403014 мне нужно записать число double в [eax+40] до срабатывания инструкции fld qword ptr [eax+40] код игры по адресу call 00404194 00404194 - 85 C0 - test eax,eax 00404196 - 74 16 - je 004041AE 00404198 - 89 C1 - mov ecx,eax 0040419A - 8B 09 - mov ecx,[ecx] 0040419C - 39 D1 - cmp ecx,edx 0040419E - 74 0E - je 004041AE 004041A0 - 8B 49 DC - mov ecx,[ecx-24] 004041A3 - 85 C9 - test ecx,ecx 004041A5 - 75 F3 - jne 0040419A 004041A7 - B0 0A - mov al,0A { 10 } 004041A9 - E9 9EEAFFFF - jmp 00402C4C 004041AE - C3 - ret нужные мне eax остаються после cmp ecx,edx если регистры равны . но инжектить не получаеться потому что на инструкцию mov ecx,[ecx] есть прыжки и игра вылетает . на mov ecx,[ecx-24] вроде то же есть . я не знаю что сделать . помогите пожалуйста Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 11 января, 2019 Поделиться Опубликовано 11 января, 2019 37 минут назад, Alex2411 сказал: у меня не получаеться Получи адрес который работает с этой инструкцией fld qword ptr [eax+40] А после ставь бряк на доступ по найденному адресу, должны появиться ещё инструкции работающие с этим адресом и пробуй делать инжект на них. Так же, можно найти откуда берется значение в адресе [eax+40] и использовать скрипт для записи в адрес, который будет писать значение в [eax+40]. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 11 января, 2019 Автор Поделиться Опубликовано 11 января, 2019 48 минут назад, partoftheworlD сказал: ставь бряк на доступ по найденному адресу, должны появиться ещё инструкции работающие с этим адресом и пробуй делать инжект на них. Так же, можно найти откуда берется значение в адресе [eax+40] и использовать скрипт для записи в адрес, который будет писать значение в [eax+40]. я так сразу пробовал сделать.. есть еще 2 инструкции , которые работают с адресами [eax+40] . одна из них на запись, но они работают еще с очень большим числом адресов . с врагами с союзниками с стеком потом еще какими то адресами когда загружаеться другая локация. фильтр не сделать . а в этой инструкции сами отсеиваються нужные регистры eax всего от 2 до 16 нужных . Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 5 часов назад, Alex2411 сказал: мне нужно записать число double в [eax+40] до срабатывания инструкции fld qword ptr [eax+40] 1. нужно посмотреть в самой функции call 00404194 и найти участок игрового кода, где можно сделать инъекцию, после записи указателя в регистр eax. 2. 5 часов назад, Alex2411 сказал: до срабатывания инструкции не обязательно "до", можно и после (нужно смотреть игровой код), т.е. в функции call 00403014 тоже можно найти участок кода. нужно будет убрать из стека st(0) записать новое значение в [eax+40] и по новой записать в стек fld qword ptr [eax+40] ЗЫ: если функции не большие сделай скрины их обоих и выложи сюда, чтобы можно было подсказать. Да и прячь их в спойлеры. Вот за этот твой пост уже можно выдавать пред, т.к. не соотвествует правилам форума. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 12 января, 2019 Автор Поделиться Опубликовано 12 января, 2019 6 часов назад, Garik66 сказал: нужно посмотреть в самой функции call 00404194 и найти участок игрового кода, где можно сделать инъекцию, после записи указателя в регистр eax. функцию call 00404194 я раньше привел целиком . забыл тег спойлер поставить извини .посмотри там все от адреса 00404194 до выхода ret . инжекцю я не знаю где сделать . не получаеться . до инструкции cmp ecx,edx много лишних срабатываний . после ecx = edx остаються только нужные мне eax , но видишь там сразу условный прыжок на выход из call. посмотри на инструкцию перед сравнением регистров mov ecx,[ecx] туда тоже прыжки . еще на инструкцию по ниже mov ecx,[ecx-24] откуда то есть прыжок . 6 часов назад, Garik66 сказал: не обязательно "до", можно и после (нужно смотреть игровой код), т.е. в функции call 00403014 тоже можно найти участок кода. я понимаю . то же не нашел как сделать . код в call 00403014 00403014 - 83 EC 08 - sub esp,08 { 8 } 00403017 - DF 3C 24 - fistp qword ptr [esp] 0040301A - 9B - wait 0040301B - 58 - pop eax 0040301C - 5A - pop edx 0040301D - C3 - ret проблема как я писал в начале что на call 00403014 игра откуда то прыгает . в eax появляется много лишних . инжекция на sub esp,08 крашит игру . 6 часов назад, Garik66 сказал: убрать из стека st(0) хотел спросить . мне бывает нужно обнулить st(0) без выталкивание , а бывает нужно вытолкнуть как не нужный . как лучше это делать ? я обычно умножал на метку = 0 или выталкивал в не нужный участо памяти , но так наверно не правильно . объясни пожалуйста Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 5 часов назад, Alex2411 сказал: функцию call 00404194 я раньше привел целиком ОК. Не обратил внимание. Так как в том call три прыжка то неизвестно откуда приходит к нам значение твоего eax. (тут уже лучше делать трассировку и смотреть.) Из второго call (нижнего) может получиться. Сделай стандартный СЕ-ный скрипт с Логами из инструкции 00403014 - 83 EC 08 - sub esp,08 { 8 } и выложи сюда скрипт (не забудь про теги спойлера и кода), попробую написать тебе скрипт. Да и напиши какое число (само собой double) тебе нужно записать в адрес. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 12 января, 2019 Автор Поделиться Опубликовано 12 января, 2019 1 час назад, Garik66 сказал: Из второго call (нижнего) может получиться. на второй call игра делает много прыжков из других мест поэтому на интрукции sub esp,08 появляеться очень много других срабатываний . на инструкции fld qword ptr [eax+40] срабатывает только нужные мне eax , а на sub esp,08 уже появляються другие eax . число double 100 . это скрипт как ты сказал на sub esp,08, но с ним игра сразу крашится . Спойлер [ENABLE] aobscanmodule(INJECT,Rangers.exe,83 EC 08 DF 3C 24 9B 58 5A C3) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: code: sub esp,08 fistp qword ptr [esp] jmp return INJECT: jmp newmem nop return: registersymbol(INJECT) [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT: db 83 EC 08 DF 3C 24 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Rangers.exe"+3014 "Rangers.exe"+2FF8: D9 7C 24 02 - fnstcw [esp+02] "Rangers.exe"+2FFC: 9B - wait "Rangers.exe"+2FFD: 66 81 4C 24 02 00 0F - or word ptr [esp+02],0F00 "Rangers.exe"+3004: D9 6C 24 02 - fldcw [esp+02] "Rangers.exe"+3008: D9 FC - frndint "Rangers.exe"+300A: 9B - wait "Rangers.exe"+300B: D9 2C 24 - fldcw [esp] "Rangers.exe"+300E: 83 C4 04 - add esp,04 "Rangers.exe"+3011: DE E9 - fsubp st(1),st(0) "Rangers.exe"+3013: C3 - ret // ---------- INJECTING HERE ---------- "Rangers.exe"+3014: 83 EC 08 - sub esp,08 "Rangers.exe"+3017: DF 3C 24 - fistp qword ptr [esp] // ---------- DONE INJECTING ---------- "Rangers.exe"+301A: 9B - wait "Rangers.exe"+301B: 58 - pop eax "Rangers.exe"+301C: 5A - pop edx "Rangers.exe"+301D: C3 - ret "Rangers.exe"+301E: 8B C0 - mov eax,eax "Rangers.exe"+3020: 83 EC 0C - sub esp,0C "Rangers.exe"+3023: D9 3C 24 - fnstcw [esp] "Rangers.exe"+3026: D9 7C 24 02 - fnstcw [esp+02] "Rangers.exe"+302A: 9B - wait "Rangers.exe"+302B: 66 81 4C 24 02 00 0F - or word ptr [esp+02],0F00 } Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 9 минут назад, Alex2411 сказал: число double 100 . Попробуй: Спойлер [ENABLE] aobscanmodule(INJECT,Rangers.exe,83 EC 08 DF 3C 24 9B 58 5A C3) alloc(newmem,$1000) label(code) label(return) label(value) registersymbol(INJECT) newmem: fstp qword ptr [eax+40] fld qword ptr [value] fst qword ptr [eax+40] code: sub esp,08 fistp qword ptr [esp] jmp return value: dq (double)100 INJECT: jmp newmem db 90 return: [DISABLE] INJECT: db 83 EC 08 DF 3C 24 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Rangers.exe"+3014 "Rangers.exe"+2FF8: D9 7C 24 02 - fnstcw [esp+02] "Rangers.exe"+2FFC: 9B - wait "Rangers.exe"+2FFD: 66 81 4C 24 02 00 0F - or word ptr [esp+02],0F00 "Rangers.exe"+3004: D9 6C 24 02 - fldcw [esp+02] "Rangers.exe"+3008: D9 FC - frndint "Rangers.exe"+300A: 9B - wait "Rangers.exe"+300B: D9 2C 24 - fldcw [esp] "Rangers.exe"+300E: 83 C4 04 - add esp,04 "Rangers.exe"+3011: DE E9 - fsubp st(1),st(0) "Rangers.exe"+3013: C3 - ret // ---------- INJECTING HERE ---------- "Rangers.exe"+3014: 83 EC 08 - sub esp,08 "Rangers.exe"+3017: DF 3C 24 - fistp qword ptr [esp] // ---------- DONE INJECTING ---------- "Rangers.exe"+301A: 9B - wait "Rangers.exe"+301B: 58 - pop eax "Rangers.exe"+301C: 5A - pop edx "Rangers.exe"+301D: C3 - ret "Rangers.exe"+301E: 8B C0 - mov eax,eax "Rangers.exe"+3020: 83 EC 0C - sub esp,0C "Rangers.exe"+3023: D9 3C 24 - fnstcw [esp] "Rangers.exe"+3026: D9 7C 24 02 - fnstcw [esp+02] "Rangers.exe"+302A: 9B - wait "Rangers.exe"+302B: 66 81 4C 24 02 00 0F - or word ptr [esp+02],0F00 } Отпишись о результатах. ЗЫ: хотя это : 13 минут назад, Alex2411 сказал: на второй call игра делает много прыжков из других мест может помешать - нужен будет фильтровать, как-то по адресу. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 12 января, 2019 Автор Поделиться Опубликовано 12 января, 2019 17 минут назад, Garik66 сказал: Попробуй включил . сразу краш игры. не получиться . там куча других срабатываний . нельзя писать в [eax+40] на втором call . 18 минут назад, Garik66 сказал: нужен будет фильтровать, как-то по адресу я пробовал. не получаеться сделать фильтр . обращений из разных мест игры больше 50 . Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения