Desmos Опубликовано 29 июля, 2018 Поделиться Опубликовано 29 июля, 2018 Есть у меня сигнатура, например F2 0F 10 05 XX XX XX XX 8B 4D D0 89 45 C4 89 45 A4 Она означает вот этот код: 440E1864 - F2 0F10 05 2890D706 - movsd xmm0,[06D79028] { [2000.00] } 440E186C - 8B 4D D0 - mov ecx,[ebp-30] 440E186F - 89 45 C4 - mov [ebp-3C],eax 440E1872 - 89 45 A4 - mov [ebp-5C],eax Но меня интересует конкретно адрес, который в сигнатуре записан как XX XX XX XX. Инструкция, работающая с этим адресом (в качестве адреса взят 06D79028, естественно вместо XX XX XX XX будет адрес): F2 0F10 05 2890D706 - movsd xmm0,[06D79028] Он при перезапуске игры меняется. Вопрос, можно ли в Аuto-Аssembler использовать этот адрес для того, чтобы изменить значение, хранящееся в нём? И ещё, как сделать спойлер у вас на форуме? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 июля, 2018 Поделиться Опубликовано 29 июля, 2018 23 минуты назад, Desmos сказал: Вопрос, можно ли в Аuto-Аssembler использовать этот адрес для того, чтобы изменить значение, хранящееся в нём? Можно - пишешь скрипт. 24 минуты назад, Desmos сказал: И ещё, как сделать спойлер у вас на форуме? Тык Ссылка на комментарий Поделиться на другие сайты Поделиться
Desmos Опубликовано 29 июля, 2018 Автор Поделиться Опубликовано 29 июля, 2018 (изменено) А как это делать, не подскажите, если не сложно. Я попробую сам порассуждать, а вы поправите меня пожалуйста, если что не так? Адрес мы можем достать через aobscan. То есть есть у нас вот это: [spoiler="Часть кода Auto-Assembler"] aobscan(INJECT,F2 0F 10 05 XX XX XX XX 8B 4D D0 89 45 C4 89 45 A4) [/spoiler] И я хочу обратиться к XX XX XX XX: [spoiler="Часть кода Auto-Assembler"] newmem: fld qword ptr [myDoubleValue] fstp qword ptr [INJECT+04] jmp code: [/spoiler] Так не получается, компилятор ругается. Как быть? И ещё, как после подмены кода в секции DISABLE вернуть код на место тогда? Там же надо сигнатуру с адресом возвращать, то есть не виде F2 0F 10 05 XX XX XX XX, а в виде скажем F2 0F 10 05 45 23 53 06. У меня же просто будет на прыжок заменяться + 3 нопа = 8 байт, то есть F2 0F 10 05 XX XX XX XX заменится на jmp newmem nop nop nop . А обратно же замену надо делать? Ну там в конце после DISABLE есть INJECT: db (сигнатура оригинального кода) Помогите пожалуйста! Не знаю, как быть. Изменено 29 июля, 2018 пользователем Desmos Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 июля, 2018 Поделиться Опубликовано 29 июля, 2018 @Desmos, поставить спойлер Спойлер Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 июля, 2018 Поделиться Опубликовано 30 июля, 2018 12 часов назад, Desmos сказал: А как это делать, Выложи стандартный СЕ-ный скрипт с ЛОГАМИ из своей инструкции. Ссылка на комментарий Поделиться на другие сайты Поделиться
Desmos Опубликовано 30 июля, 2018 Автор Поделиться Опубликовано 30 июля, 2018 Спойлер { Game : TankiPlayer.exe Version: Date : 2018-07-30 Author : ???? This script does blah blah blah } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscan(INJECT,F2 0F 10 05 18 98 E4 06) // should be unique alloc(newmem,$1000) label(code) label(return) newmem: code: movsd xmm0,[06E49818] 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 F2 0F 10 05 18 98 E4 06 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 438F5873 438F5852: E8 C9 0A 3C 1B - call Flash32_30_0_0_134.ocx+806320 438F5857: 8B 48 10 - mov ecx,[eax+10] 438F585A: 85 C9 - test ecx,ecx 438F585C: 0F 84 B5 02 00 00 - je 438F5B17 438F5862: 8B 41 08 - mov eax,[ecx+08] 438F5865: 8B 50 10 - mov edx,[eax+10] 438F5868: 8B 42 08 - mov eax,[edx+08] 438F586B: 89 45 D0 - mov [ebp-30],eax 438F586E: 8B 42 18 - mov eax,[edx+18] 438F5871: FF D0 - call eax // ---------- INJECTING HERE ---------- 438F5873: F2 0F 10 05 18 98 E4 06 - movsd xmm0,[06E49818] // ---------- DONE INJECTING ---------- 438F587B: 8B 4D D0 - mov ecx,[ebp-30] 438F587E: 89 45 C4 - mov [ebp-3C],eax 438F5881: 89 45 A4 - mov [ebp-5C],eax 438F5884: 66 0F D6 45 A8 - movq [ebp-58],xmm0 438F5889: 66 0F D6 45 B0 - movq [ebp-50],xmm0 438F588E: 66 0F D6 45 B8 - movq [ebp-48],xmm0 438F5893: 8B 41 04 - mov eax,[ecx+04] 438F5896: 8D 55 A4 - lea edx,[ebp-5C] 438F5899: 83 EC 04 - sub esp,04 438F589C: 52 - push edx Адрес 06E49818, который в movsd xmm0,[06E49818] меняется и при перезапуске игры может изменяться. Что делать? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 30 июля, 2018 Поделиться Опубликовано 30 июля, 2018 1 час назад, Desmos сказал: Что делать? Делать инъекцию ниже где идет xmm0 438F5884: 66 0F D6 45 A8 - movq [ebp-58],xmm0 так проще. Ну а чтобы до того адреса добраться, то на АА разные варианты подбирать либо быстрее на Lua через поиск сигнатуры и + смещение. Либо через поиск сигнатуры и дизассемблирование Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 июля, 2018 Поделиться Опубликовано 30 июля, 2018 2 часа назад, Desmos сказал: Что делать? Какое тебе значение нужно в искомом адресе? Извини - только приехал. 2 часа назад, Desmos сказал: Что делать? Скрипт не тестил (сам потетсь, нет времени): Спойлер { Game : TankiPlayer.exe Version: Date : 2018-07-30 Author : ???? Редакция: Garik66 This script does blah blah blah } [ENABLE] aobscan(INJECT,F2 0F 10 05 XX XX XX XX 8B 4D D0 89 45 C4 89 45 A4) // should be unique alloc(newmem,$1000) label(return) label(code) registersymbol(code) registersymbol(INJECT) newmem: mov [[code+4]],(float)2000 // В [code+4] по идее наш адрес. запиши в него // то что тебе нужно. code: readmem(INJECT,8) // Если меняется адрес, то делаем так 1 jmp return INJECT: jmp newmem db 90 90 90 return: [DISABLE] INJECT: readmem(code,8) // и так 2 unregistersymbol(code) // также 3 регистрируем/дерегистр. метку code unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 438F5873 438F5852: E8 C9 0A 3C 1B - call Flash32_30_0_0_134.ocx+806320 438F5857: 8B 48 10 - mov ecx,[eax+10] 438F585A: 85 C9 - test ecx,ecx 438F585C: 0F 84 B5 02 00 00 - je 438F5B17 438F5862: 8B 41 08 - mov eax,[ecx+08] 438F5865: 8B 50 10 - mov edx,[eax+10] 438F5868: 8B 42 08 - mov eax,[edx+08] 438F586B: 89 45 D0 - mov [ebp-30],eax 438F586E: 8B 42 18 - mov eax,[edx+18] 438F5871: FF D0 - call eax // ---------- INJECTING HERE ---------- 438F5873: F2 0F 10 05 18 98 E4 06 - movsd xmm0,[06E49818] // ---------- DONE INJECTING ---------- 438F587B: 8B 4D D0 - mov ecx,[ebp-30] 438F587E: 89 45 C4 - mov [ebp-3C],eax 438F5881: 89 45 A4 - mov [ebp-5C],eax 438F5884: 66 0F D6 45 A8 - movq [ebp-58],xmm0 438F5889: 66 0F D6 45 B0 - movq [ebp-50],xmm0 438F588E: 66 0F D6 45 B8 - movq [ebp-48],xmm0 438F5893: 8B 41 04 - mov eax,[ecx+04] 438F5896: 8D 55 A4 - lea edx,[ebp-5C] 438F5899: 83 EC 04 - sub esp,04 438F589C: 52 - push edx } Ссылка на комментарий Поделиться на другие сайты Поделиться
Desmos Опубликовано 31 июля, 2018 Автор Поделиться Опубликовано 31 июля, 2018 15 часов назад, Garik66 сказал: Какое тебе значение нужно в искомом адресе? Извини - только приехал. Скрипт не тестил (сам потетсь, нет времени): Показать контент { Game : TankiPlayer.exe Version: Date : 2018-07-30 Author : ???? Редакция: Garik66 This script does blah blah blah } [ENABLE] aobscan(INJECT,F2 0F 10 05 XX XX XX XX 8B 4D D0 89 45 C4 89 45 A4) // should be unique alloc(newmem,$1000) label(return) label(code) registersymbol(code) registersymbol(INJECT) newmem: mov [[code+4]],(float)2000 // В [code+4] по идее наш адрес. запиши в него // то что тебе нужно. code: readmem(INJECT,8) // Если меняется адрес, то делаем так 1 jmp return INJECT: jmp newmem db 90 90 90 return: [DISABLE] INJECT: readmem(code,8) // и так 2 unregistersymbol(code) // также 3 регистрируем/дерегистр. метку code unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: 438F5873 438F5852: E8 C9 0A 3C 1B - call Flash32_30_0_0_134.ocx+806320 438F5857: 8B 48 10 - mov ecx,[eax+10] 438F585A: 85 C9 - test ecx,ecx 438F585C: 0F 84 B5 02 00 00 - je 438F5B17 438F5862: 8B 41 08 - mov eax,[ecx+08] 438F5865: 8B 50 10 - mov edx,[eax+10] 438F5868: 8B 42 08 - mov eax,[edx+08] 438F586B: 89 45 D0 - mov [ebp-30],eax 438F586E: 8B 42 18 - mov eax,[edx+18] 438F5871: FF D0 - call eax // ---------- INJECTING HERE ---------- 438F5873: F2 0F 10 05 18 98 E4 06 - movsd xmm0,[06E49818] // ---------- DONE INJECTING ---------- 438F587B: 8B 4D D0 - mov ecx,[ebp-30] 438F587E: 89 45 C4 - mov [ebp-3C],eax 438F5881: 89 45 A4 - mov [ebp-5C],eax 438F5884: 66 0F D6 45 A8 - movq [ebp-58],xmm0 438F5889: 66 0F D6 45 B0 - movq [ebp-50],xmm0 438F588E: 66 0F D6 45 B8 - movq [ebp-48],xmm0 438F5893: 8B 41 04 - mov eax,[ecx+04] 438F5896: 8D 55 A4 - lea edx,[ebp-5C] 438F5899: 83 EC 04 - sub esp,04 438F589C: 52 - push edx } Не компилит, пишет ошибку в этом месте mov [[code+4]],(float)2000 Вот идея MasterGH мне понравилась, адрес выдернуть как строку из сигнатуры через средства lua. Ответь только на C++ такое можно сделать? Просто я с ним больше знаком. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 31 июля, 2018 Поделиться Опубликовано 31 июля, 2018 Через АА примерно так делать можно, где в originalbytes будет адрес Спойлер Спойлер { Game : Tutorial-i386.exe Version: Date : 2018-07-31 Author : Andrew This script does blah blah blah } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(INJECT,Tutorial-i386.exe,64 FF FF 89 F1 B8 88 4A 5A 00) // should be unique alloc(newmem,$1000) alloc(originalbytes, 7) registersymbol(originalbytes) label(code) label(return) originalbytes: readmem(INJECT+05+01,5) //store the original bytes newmem: //readmem(INJECT+05,5) code: reassemble(INJECT+05) jmp return INJECT+05: jmp newmem return: registersymbol(INJECT) [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT+05: db B8 88 4A 5A 00 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Tutorial-i386.exe"+2402B "Tutorial-i386.exe"+2400D: 8B 8B 78 04 00 00 - mov ecx,[ebx+00000478] "Tutorial-i386.exe"+24013: 8B 09 - mov ecx,[ecx] "Tutorial-i386.exe"+24015: FF 91 D8 00 00 00 - call dword ptr [ecx+000000D8] "Tutorial-i386.exe"+2401B: 5B - pop ebx "Tutorial-i386.exe"+2401C: C3 - ret "Tutorial-i386.exe"+2401D: 00 00 - add [eax],al "Tutorial-i386.exe"+2401F: 00 53 56 - add [ebx+56],dl "Tutorial-i386.exe"+24022: 89 C6 - mov esi,eax "Tutorial-i386.exe"+24024: E8 87 64 FF FF - call Tutorial-i386.exe+1A4B0 "Tutorial-i386.exe"+24029: 89 F1 - mov ecx,esi // ---------- INJECTING HERE ---------- "Tutorial-i386.exe"+2402B: B8 88 4A 5A 00 - mov eax,Tutorial-i386.exe+1A4A88 // ---------- DONE INJECTING ---------- "Tutorial-i386.exe"+24030: BA 01 00 00 00 - mov edx,00000001 "Tutorial-i386.exe"+24035: BB 88 4A 5A 00 - mov ebx,Tutorial-i386.exe+1A4A88 "Tutorial-i386.exe"+2403A: FF 93 C4 00 00 00 - call dword ptr [ebx+000000C4] "Tutorial-i386.exe"+24040: A3 E0 15 60 00 - mov [Tutorial-i386.exe+2015E0],eax "Tutorial-i386.exe"+24045: 8B 96 3C 02 00 00 - mov edx,[esi+0000023C] "Tutorial-i386.exe"+2404B: A1 E0 15 60 00 - mov eax,[Tutorial-i386.exe+2015E0] "Tutorial-i386.exe"+24050: E8 CB EE 06 00 - call Tutorial-i386.exe+92F20 "Tutorial-i386.exe"+24055: 8B 96 E8 00 00 00 - mov edx,[esi+000000E8] "Tutorial-i386.exe"+2405B: A1 E0 15 60 00 - mov eax,[Tutorial-i386.exe+2015E0] "Tutorial-i386.exe"+24060: E8 4B F1 06 00 - call Tutorial-i386.exe+931B0 } Через Lua: Спойлер local signature = '64 FF FF 89 F1 B8 88 4A 5A 00' local results = AOBScan(signature, "+X-C*W") if results ~= nil then local address = getNameFromAddress(results[0]..'+5') --local targetAddress = disassemble(address):match("%[(.+)%]") если адрес в скобках -- для извлечения адреса -- 0042402B - B8 884A5A00 - mov eax,005A4A88 { [00000488] } если адрес после зяпятой не в скобках local targetAddress = disassemble(address):match(",(.+)") --> 0x005A4A88 print(targetAddress) end Спойлер Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 31 июля, 2018 Поделиться Опубликовано 31 июля, 2018 9 часов назад, Desmos сказал: Не компилит, пишет ошибку в этом месте Жаль, что не написал, что за ошибка. Ладно на выходных до разберусь (есть подозрение, что получаемый адрес, перевернут (байты в обратном порядке), тогда нужно будет немного изменить скрипт. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 1 августа, 2018 Поделиться Опубликовано 1 августа, 2018 15 часов назад, Desmos сказал: Не компилит, пишет ошибку в этом месте Скобки то лишние убрать надо... Да и адрес загрузит всё равно не тот... А вот так если писать, что не канает ? Спойлер [ENABLE] aobscan(baseplayeraddress,8B 42 18 FF * F2 0F 10 05 * * * * 8B * * 98 45 * 89 45 * * * * * * * * * * * * * * * * 8B 41 04) alloc(hackmem,$1000) label(baseplayeraddressret) label(copycode) label(newaddress) hackmem: movsd xmm0,[newaddress] jmp baseplayeraddressret newaddress: dd (float)2000 copycode: readmem(baseplayeraddress+5,8) baseplayeraddress+05: jmp hackmem db 90 90 90 baseplayeraddressret: registersymbol(copycode) registersymbol(baseplayeraddress) [DISABLE] baseplayeraddress+05: readmem(copycode,8) unregistersymbol(copycode) unregistersymbol(baseplayeraddress) dealloc(hackmem) Если его что то перезаписывает (другой инструкцией) ставь тогда именно на неё. В общем на конечную нужно, что бы адрес следом не перезаписывал её. А значение сам регулируй какой надо.. Но опять же - это только вариант и не более. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 1 августа, 2018 Поделиться Опубликовано 1 августа, 2018 2 часа назад, LIRW сказал: Скобки то лишние убрать надо... Скобки не лишние. Скрипт доделаю (и потестю в воскресенье) . 2 часа назад, LIRW сказал: movsd xmm0,[newaddress] Скорее всего это на прокатит, т.к. ТС пишет: В 29.07.2018 в 19:59, Desmos сказал: Но меня интересует конкретно адрес, который в сигнатуре записан как XX XX XX XX. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 1 августа, 2018 Поделиться Опубликовано 1 августа, 2018 3 часа назад, Garik66 сказал: Скобки не лишние. Игорь,но ошибка то на них именно. Из за них и не добавляется он в таблицу.(Это наверное "Автор темы" и хочет сказать) А скобки убери и он добавится. Так что он либо не до реализованный, либо такие дела не делаются в СЕ. (Ну я имею введу предложенные тобою образом) Оно загружает адрес уже внутри самое функции, который идет после jmp - тоже самое если если загрузить. aobscan(baseplayeraddress,8B 42 18 FF * F2 0F 10 05 * * * * 8B * * 98 45 * 89 45 * * * * * * * * * * * * * * * * 8B 41 04) newmem: mov ecx,baseplayeraddress+9,4 mov ecx,[ecx] mov [xxxxxxx],ecx И опять загрузит адрес внутри функции уже - ну пустого участка. В воскресение попробуешь А я всегда сразу в xmm пишу в подобных делах и всё работает как надо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Desmos Опубликовано 1 августа, 2018 Автор Поделиться Опубликовано 1 августа, 2018 (изменено) 12 часов назад, Garik66 сказал: Жаль, что не написал, что за ошибка. Ладно на выходных до разберусь (есть подозрение, что получаемый адрес, перевернут (байты в обратном порядке), тогда нужно будет немного изменить скрипт. Да, действительно, адрес в сигнатуре перевёрнут вот, например, сигнатура с адресом: F2 0F 10 05 18 98 E4 06 8B 4D D0 89 45 C4 89 45 A4 XX XX XX XX = 18 98 E4 06 Адрес же 06E49818 А ошибка конкретно такая выскакивает: Невозможно компилировать эту строку mov[ [00000000+4]],(float)2000.0 Скобки пробовал убирать - то же самое. Может я что-то не то делаю? Изменено 1 августа, 2018 пользователем Desmos Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 1 августа, 2018 Поделиться Опубликовано 1 августа, 2018 5 часов назад, Desmos сказал: Может я что-то не то делаю? Как говорил дядька один... Плохо когда не умеешь, да ещо и забыл Вот про эти скобки речь была. Но скрипт всё равно не правильно работать будет. До воскресения сам бы уж сделал то... Хотя если не торопишься, жди Игоря. Спойлер [ENABLE] aobscan(INJECT,F2 0F 10 05 XX XX XX XX 8B 4D D0 89 45 C4 89 45 A4) // should be unique alloc(newmem,$1000) label(return) label(code) registersymbol(code) registersymbol(INJECT) newmem: mov [code+4],(float)2000 // В [code+4] по идее наш адрес. запиши в него // то что тебе нужно. code: readmem(INJECT,8) // Если меняется адрес, то делаем так 1 jmp return INJECT: jmp newmem db 90 90 90 return: [DISABLE] INJECT: readmem(code,8) // и так 2 unregistersymbol(code) // также 3 регистрируем/дерегистр. метку code unregistersymbol(INJECT) dealloc(newmem) А выше вариант что дал, не работает ? Если нет, то если уж в скобках не разобрался, то как и на чем сделать лучше - подавно не поймешь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Desmos Опубликовано 2 августа, 2018 Автор Поделиться Опубликовано 2 августа, 2018 Тему можно закрывать MasterGH дал ответ. Спасибо ему большое! Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 5 августа, 2018 Поделиться Опубликовано 5 августа, 2018 В 01.08.2018 в 10:26, Desmos сказал: Да, действительно, адрес в сигнатуре перевёрнут вот, например, сигнатура с адресом: В 01.08.2018 в 09:54, LIRW сказал: Игорь,но ошибка то на них именно. Ответил здесь Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения