Garik66 Опубликовано 27 июля, 2016 Поделиться Опубликовано 27 июля, 2016 Покопался, но по-видимому мозги не в том направлении работают. Допустим есть две игры, написанных на одном движке. Написан скрипт для обеих. Тело инъекции одинаковое, отличаются только сигнатура (оригинальный инструкции игры). Хочу сделать, чтобы был один скрипт для обеих игр. Есть вопросы к мастерам: 1. По pid игры отличить какая из игр запущена мы не можем, так как pid меняется. По идее нужно отличать по названию процесса, но процессы игр например выглядят так NG.exe и ng.exe, как в таком случае отличить какая из игр запущена. 2. Пытался сигнатуру в АА-скрипте в aobscanmodule(Health,NG.exe,xx xx xx xx xx) подставлять так aobscanmodule(Health,NG.exe,Signatura). а саму сигнатуру приравнивать в отдельном lua- скрипте в зависимости от запущенной игры, делал примерно так: Скрытый текст if (getOpenedProcessID() ~= getProcessIDFromProcessName("ng.exe")) then OpenProcess("ng.exe") Signatura = 'AA AA AA AA AA AA' Signatura1 = 'DD DD DD DD DD' else if (getOpenedProcessID() ~= getProcessIDFromProcessName("NG.exe")) then OpenProcess("NG.exe") Signatura = 'BB BB BB BB BB' Signatura1 = 'CC CC CC CC CC' end end end Но так не получается, так как создаётся новый адрес, куда прописывается сигнатура (оригинальный код игры) и АА-скрипт подключается именно туда, а не в оригинальную инструкцию игры. 3. Так как меняются оригинальные инструкции игры, нужно менять и эти сигнатуры в АА-скрипте, делал также, как и во втором случае, но СЕ уже не компилирует это: Скрытый текст code: db СС СС СС СС СС jmp return // заменял на code: db Signatura1 jmp return // и здесь [DISABLE] Health: db СС СС СС СС СС // заменял на [DISABLE] Health: db Signatura1 Вот как правильно вcё это сделать? Надеюсь, что объяснил понятно.. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 27 июля, 2016 Поделиться Опубликовано 27 июля, 2016 1 час назад, Garik66 сказал: По идее нужно отличать по названию процесса, но процессы игр например выглядят так NG.exe и ng.exe, как в таком случае отличить какая из игр запущена. Навскидку, можно приводить к верхнему регистру(string,upper(str)) или к нижнему(string.lower(str)) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 27 июля, 2016 Автор Поделиться Опубликовано 27 июля, 2016 18 минуту назад, A1t0r сказал: Навскидку, можно приводить к верхнему регистру(string,upper(str)) или к нижнему(string.lower(str)) А как это в скрипт запилить? По первому вопросу нашёл решение, но оно не универсальное (скорее всего только для этой серии игр) - нашёл адрес (статичный), где само название игры на английском, т.е. по нему можно отличать. Интересуют 2 и 3 вопросы. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 27 июля, 2016 Поделиться Опубликовано 27 июля, 2016 (изменено) Если не ошибаюсь, то Lua-функция autoAssemble() принимает в себя скрипт на ассемблере в виде строки. Получается можно написать что-то вроде autoAssemble( [[aobscanmodule(Health,]]..moduleName..[[,xx xx xx xx xx) //скрипт ]]} Только не знаю можно ли склеивать строки заключённые в квадратные скобки. И никто не запрещает использовать луашную функцию AOBScan(x,x,x,x,...), только процесс надо открыть сначала. Изменено 27 июля, 2016 пользователем A1t0r добавлено Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 27 июля, 2016 Автор Поделиться Опубликовано 27 июля, 2016 6 минут назад, A1t0r сказал: Если не ошибаюсь, то Lua-функция autoAssemble() принимает в себя скрипт на ассемблере в виде строки. Получается можно написать что-то вроде autoAssemble( [[aobscanmodule(Health,]]..moduleName..[[,xx xx xx xx xx) //скрипт ]]} Только не знаю можно ли склеивать строки заключённые в квадратные скобки. И никто не запрещает использовать луашную функцию AOBScan(x,x,x,x,...), только процесс надо открыть сначала. Не помог. По-видимому я плохо объяснил. Мне нужно в LUA-скрипте, определиться какая сигнатура будет ( в зависимости) от запущенной игры. А в АА-скрипте уже использовать эту сигнатуру для активации скрипта, ну и 3 вопрос остаётся. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 27 июля, 2016 Поделиться Опубликовано 27 июля, 2016 (изменено) Если у тебя всего два варианта, то прогони сначала одну сигнатуру через aobscan, и если список окажется пустой, то прогони вторую, и если и он будет пустой, значит что-то здесь не так. Что-то голова плохо варит сегодня Изменено 27 июля, 2016 пользователем A1t0r добавлено Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 27 июля, 2016 Автор Поделиться Опубликовано 27 июля, 2016 9 минут назад, A1t0r сказал: Если у тебя всего два варианта, то прогони сначала одну сигнатуру через aobscan, и если список окажется пустой, то прогони вторую, и если и он будет пустой, значит что-то здесь не так. Что-то голова плохо варит сегодня В первом посте писал, что сигнатуру находит конечно, но подключается к вновь созданной, а не там где нужно, короче хрень получается. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 июля, 2016 Поделиться Опубликовано 28 июля, 2016 Может поможет пример. Выполняем автоматически Lua скрипт в главной таблице при запуске терйнера или же Lua скрипт в ставляем в АА скрипт с помощью {$LUA}. Первый вариант ниже if (getOpenedProcessID() == getProcessIDFromProcessName("test.exe")) then data = '01' else if (getOpenedProcessID() == getProcessIDFromProcessName("test2.exe")) then data = 'FF' end end Обращаться к переменной "data" из Lua можно как на примере ниже Скрытый текст [ENABLE] alloc(newmem,2048) label(returnhere) newmem: mov [test.exe+5B5A4], $data jmp returnhere "test.exe"+5464A: jmp newmem nop returnhere: [DISABLE] "test.exe"+5464A: inc [test.exe+5B5A4] //Alt: db FF 05 A4 B5 45 00 dealloc(newmem) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 июля, 2016 Поделиться Опубликовано 28 июля, 2016 А если по заголовку главного окна искать процесс, например? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 июля, 2016 Автор Поделиться Опубликовано 28 июля, 2016 (изменено) 7 часов назад, MasterGH сказал: Может поможет пример. 7 часов назад, Xipho сказал: А если по заголовку главного окна искать процесс, например? MasterGH, Xipho, спасибо большое за ответы!!! Снял небольшое видео с уточнением по вопросу темы - что я хочу сделать? Видео: Изменено 28 июля, 2016 пользователем Garik66 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 июля, 2016 Поделиться Опубликовано 28 июля, 2016 Должен отметить, что вопрос на видео рассмотрен очень подробно. Поэтому за столь подробное объяснение я поставил +1. Я полностью согласен с решением заменить части скрипта чтобы не писать практически два одинаковых. Как это сделать? Чтобы ответить на этот вопрос необходимо пытаться найти решение на практике. Это делается через попытки, ошибки и исправления ошибок. 1. Попытка. Только, что проверил вариант с "aobscanmodule(INJECT,test.exe, $data)" и он, к сожалению, не подходит, т.к. CE не понимает $data в функции aobscanmodule. Я надеялся, что это будет работать, но нет. Следующая попытка - подстановка данных по маркерам. 2. Я пишу небольшой пример. Скрипт АА пишем с маркерами. Будет ругаться при сохранении скрипта - игнорим и сохраняем. Сейчас делаю один маркер тот же $data Скрытый текст [ENABLE] aobscanmodule(INJECT,test.exe, $data) alloc(newmem,$1000) label(code) label(return) newmem: code: inc [test.exe+5B5A4] jmp return INJECT: jmp code nop return: registersymbol(INJECT) [DISABLE] INJECT: db FF 05 A4 B5 45 00 unregistersymbol(INJECT) dealloc(newmem) С помощью Lua читаем скрипт. Делаем подмену маркера на другую стороку. И выполняем скрипт Скрытый текст -- Скрипт Lua -- Попытка определить процесс (или другим кодом открыть процесс) if (getOpenedProcessID() == getProcessIDFromProcessName("test.exe")) then data = 'FF 05 A4 B5 45 00' else if (getOpenedProcessID() == getProcessIDFromProcessName("test2.exe")) then data = 'FF 05 A4 B5 45 00' end end -- Ищем скрипт по его навзванию в таблице 'Cheat' addresslist = getAddressList() memoryRecord = addresslist.getMemoryRecordByDescription('Cheat') script = memoryRecord.Script -- Подменяем маркер, сохраняем скрипт, активируем скрипт script = string.gsub(script, "$data", data) memoryRecord.Script = script memoryRecord.Active = true Выполняем Lua скрипт и видим, что скрипт активировался. Заходим в него и видим, что подмена маркера была успешной. Скрытый текст [ENABLE] aobscanmodule(INJECT,test.exe, FF 05 A4 B5 45 00) alloc(newmem,$1000) label(code) label(return) newmem: code: inc [test.exe+5B5A4] jmp return INJECT: jmp code nop return: registersymbol(INJECT) [DISABLE] INJECT: db FF 05 A4 B5 45 00 unregistersymbol(INJECT) dealloc(newmem) Проверяю. Инъекция выполнена. Так что могу посоветовать использовать вот этот пример с разными маркерами Скрытый текст script = memoryRecord.Script -- Маркер 1 script = string.gsub(script, "$data", data) -- Другие маркеры -- ... -- Перезапись скрипта и активация memoryRecord.Script = script memoryRecord.Active = true 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 июля, 2016 Автор Поделиться Опубликовано 28 июля, 2016 (изменено) 40 минуты назад, MasterGH сказал: 2. Я пишу небольшой пример. БОЛШОЙ сенк MasterGH!!! На выходных попробую внедрить в табличку. Интересно, а съест ли СЕ и вот это в таком случае: Скрытый текст [ENABLE] aobscanmodule(INJECT,test.exe, $data) alloc(newmem,$1000) label(code) label(return) newmem: code: db $data // это тоже нужно заменять jmp return INJECT: jmp code nop return: registersymbol(INJECT) [DISABLE] INJECT: db $data // и это тоже нужно заменять unregistersymbol(INJECT) dealloc(newmem) Изменено 28 июля, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 июля, 2016 Автор Поделиться Опубликовано 29 июля, 2016 19 час назад, MasterGH сказал: С помощью Lua читаем скрипт. MasterGH, чёй-то у меня не кушается и в LUA-скрипте тоже, вот попробовал на другой игре: Скрипт LUA: Скрытый текст function poiskAddress() result = AOBScan("80 78 40 00 0F 94 C0 84 C0 75 0F") address = stringlist_getString(result,1) address = address + 48 end addresslist = getAddressList() memoryRecord = addresslist.getMemoryRecordByID('2') script = memoryRecord.Script script = string.gsub(script, "$address", address) memoryRecord.Script = script Выдаёт ошибку: Скрытый текст Error:[string "function poiskAddress() ..."]:10: bad argument #3 to 'gsub' (string/function/table expected) ругается именно на эту строчку: script = string.gsub(script, "$address", address) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 июля, 2016 Поделиться Опубликовано 29 июля, 2016 Можно так попробовать Скрытый текст result = AOBScan("80 78 40 00 0F 94 C0 84 C0 75 0F") address = stringlist_getString(result,1) address = address + 48 addresslist = getAddressList() memoryRecord = addresslist.getMemoryRecordByID('2') script = memoryRecord.Script script = string.gsub(script, "$address", address) memoryRecord.Script = script Здесь переменная address содержит значение и должна работать. Могу посетовать еще тестить замену маркеров без подключения к процессу. Максимально сократить код, скрипты, пока не начнет получаться заменять маркеры. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 июля, 2016 Автор Поделиться Опубликовано 29 июля, 2016 40 минуты назад, MasterGH сказал: Можно так попробовать тогда ошибка: Error:Недопустимый объект класса Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 июля, 2016 Автор Поделиться Опубликовано 29 июля, 2016 MasterGH, сенк большой!!! Всё работает. Сейчас засниму небольшое видео. Остался вопрос, как возвращать назад метки в скрипт, если пользователь случайно нажмёт сохранить таблицу, после замены меток на значения. Есть ли такая возможность? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 июля, 2016 Автор Поделиться Опубликовано 29 июля, 2016 (изменено) Итак скрипт "Окно персонажа для обеих игр": Скрытый текст { Game : KB.exe Version: Date : 2016-01-18 Author : Garik66 This script does blah blah blah } [ENABLE] aobscanmodule(WindowCharacter,KB.exe,$Signatura) // should be unique alloc(newmem,$4000) label(code) label(return) label(XAR1) registersymbol(XAR1) label(XAR2) registersymbol(XAR2) label(XAR3) registersymbol(XAR3) label(XAR4) registersymbol(XAR4) label(XAR5) registersymbol(XAR5) label(XAR6) registersymbol(XAR6) label(XAR7) registersymbol(XAR7) label(XAR8) registersymbol(XAR8) label(XAR9) registersymbol(XAR9) label(XAR10) registersymbol(XAR10) label(XAR11) registersymbol(XAR11) label(XAR12) registersymbol(XAR12) label(XAR13) registersymbol(XAR13) registersymbol(WindowCharacter) newmem: push eax mov eax,[edi+04] cmp [eax+$a],61747461 // attack jne @f cmp [eax+$a+4],00006B63 jne @f mov [XAR1],ecx @@: cmp [eax+$a],6B6F6F62 // booksize jne @f cmp [eax+$a+4],657A6973 jne @f mov [XAR2],ecx @@: cmp [eax+$a],73797263 // crystals jne @f cmp [eax+$a+4],736C6174 jne @f mov [XAR3],ecx @@: cmp [eax+$a],65666564 // defense jne @f cmp [eax+$a+4],0065736E jne @f mov [XAR4],ecx @@: cmp [eax+$a],65707865 // experience jne @f cmp [eax+$a+4],6E656972 jne @f cmp [eax+$a+8],00006563 jne @f mov [XAR5],ecx @@: cmp [eax+$a],65746E69 // intellect jne @f cmp [eax+$a+4],63656C6C jne @f cmp [eax+$a+8],00000074 jne @f mov [XAR6],ecx @@: cmp [eax+$a],6461656C // leadership jne @f cmp [eax+$a+4],68737265 jne @f cmp [eax+$a+8],00007069 jne @f mov [XAR7],ecx @@: cmp [eax+$a],616E616D // mana jne @f mov [XAR8],ecx @@: cmp [eax+$a],656E6F6D // money jne @f cmp byte ptr [eax+$a+4],79 jne @f mov [XAR9],ecx @@: cmp [eax+$a],65676172 // rage jne @f mov [XAR10],ecx @@: cmp [eax+$a],656E7572 // rune_magic jne @f cmp [eax+$a+4],67616D5F jne @f cmp [eax+$a+8],00006369 jne @f mov [XAR11],ecx @@: cmp [eax+$a],656E7572 // rune_might jne @f cmp [eax+$a+4],67696D5F jne @f cmp [eax+$a+8],00007468 jne @f mov [XAR12],ecx @@: cmp [eax+$a],656E7572 // rune_mind jne code cmp [eax+$a+4],6E696D5F jne code cmp [eax+$a+8],00000064 jne code mov [XAR13],ecx code: pop eax $OriginalCode jmp return XAR1: dd 0 XAR2: dd 0 XAR3: dd 0 XAR4: dd 0 XAR5: dd 0 XAR6: dd 0 XAR7: dd 0 XAR8: dd 0 XAR9: dd 0 XAR10: dd 0 XAR11: dd 0 XAR12: dd 0 XAR13: dd 0 WindowCharacter: jmp newmem db 90 90 return: [DISABLE] WindowCharacter: $OriginalCode unregistersymbol(XAR1) unregistersymbol(XAR2) unregistersymbol(XAR3) unregistersymbol(XAR4) unregistersymbol(XAR5) unregistersymbol(XAR6) unregistersymbol(XAR7) unregistersymbol(XAR8) unregistersymbol(XAR9) unregistersymbol(XAR10) unregistersymbol(XAR11) unregistersymbol(XAR12) unregistersymbol(XAR13) unregistersymbol(WindowCharacter) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "kb.exe"+4CBD3 "kb.exe"+4CBB6: 8B F8 - mov edi,eax "kb.exe"+4CBB8: 85 FF - test edi,edi "kb.exe"+4CBBA: 0F 84 6C FF FF FF - je kb.exe+4CB2C "kb.exe"+4CBC0: 8B 6C 24 34 - mov ebp,[esp+34] "kb.exe"+4CBC4: 55 - push ebp "kb.exe"+4CBC5: 8B CF - mov ecx,edi "kb.exe"+4CBC7: E8 A4 1B 1F 00 - call kb.exe+23E770 "kb.exe"+4CBCC: 85 C0 - test eax,eax "kb.exe"+4CBCE: 7C 0C - jl kb.exe+4CBDC "kb.exe"+4CBD0: 8B 4F 0C - mov ecx,[edi+0C] // ---------- INJECTING HERE ---------- "kb.exe"+4CBD3: 8B 34 81 - mov esi,[ecx+eax*4] "kb.exe"+4CBD6: 89 74 24 10 - mov [esp+10],esi // ---------- DONE INJECTING ---------- "kb.exe"+4CBDA: EB 06 - jmp kb.exe+4CBE2 "kb.exe"+4CBDC: 89 5C 24 10 - mov [esp+10],ebx "kb.exe"+4CBE0: 8B F3 - mov esi,ebx "kb.exe"+4CBE2: 0F B6 55 00 - movzx edx,byte ptr [ebp+00] "kb.exe"+4CBE6: 8B 44 24 14 - mov eax,[esp+14] "kb.exe"+4CBEA: 52 - push edx "kb.exe"+4CBEB: E8 60 CF 00 00 - call kb.exe+59B50 "kb.exe"+4CBF0: 84 C0 - test al,al "kb.exe"+4CBF2: 0F 84 F6 00 00 00 - je kb.exe+4CCEE "kb.exe"+4CBF8: 85 F6 - test esi,esi } Статичный адрес, по которому я определяю, какая игра запущена, так как название процесса игры в обоих играх одинаковая kb/exe [luaide.dll+CC6B1] LUA-скрипт, определяющий сигнатуру, смещения и оригинальные байты игры, в зависимости от запущенной игры: Скрытый текст [ENABLE] {$LUA} addressList = getAddressList() memoryRecord = addressList.getMemoryRecordByID(161) memoryRecord2 = addressList.getMemoryRecordByID(162) if (getProcessIDFromProcessName("KB.exe")==nil) then else OpenProcess("KB.exe") if memoryRecord.value == "King's Bounty - The Legend" then Signatura = '8B 2C 81 89 6C 24 18' a = '14' OriginalCode = 'db 8B 2C 81 89 6C 24 18' else if memoryRecord.value == "Kings Bounty Armored Princ" then Signatura = '8B 34 81 89 74 24 10 EB 06 89 5C 24 10 8B F3 0F' a = '0C' OriginalCode = 'db 8B 34 81 89 74 24 10' end end end script = memoryRecord2.Script script = string.gsub(script, "$Signatura", Signatura) script = string.gsub(script, "$a", a) script = string.gsub(script, "$OriginalCode", OriginalCode) memoryRecord2.Script = script {$ASM} [DISABLE] Видео: Изменено 29 июля, 2016 пользователем Garik66 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 июля, 2016 Поделиться Опубликовано 29 июля, 2016 1 час назад, Garik66 сказал: MasterGH, сенк большой!!! Всё работает. Сейчас засниму небольшое видео. Остался вопрос, как возвращать назад метки в скрипт, если пользователь случайно нажмёт сохранить таблицу, после замены меток на значения. Есть ли такая возможность? Можно текст с метками хранить в Lua переменной. tamplate = [[ здесь скрипт с метками ]] 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 июля, 2016 Автор Поделиться Опубликовано 29 июля, 2016 2 минуты назад, MasterGH сказал: Можно текст с метками хранить в Lua переменной. tamplate = [[ здесь скрипт с метками ]] ОК!!! СЕНК!!! Потом опробую. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 2 августа, 2016 Автор Поделиться Опубликовано 2 августа, 2016 В 29.07.2016в19:35, MasterGH сказал: Можно текст с метками хранить в Lua переменной. MasterGH, написал скрипт для всех пяти игр серии - Один скрипт для 5 игр + урок - Как выйти на структуру, для написания фильтра.. Если и другие скрипты в серии будут также близки, то: В 29.07.2016в19:07, Garik66 сказал: Остался вопрос, как возвращать назад метки в скрипт, если пользователь случайно нажмёт сохранить таблицу, после замены меток на значения. Есть ли такая возможность? будет очень актуально. Просьба - поможешь разобраться в этом: В 29.07.2016в19:35, MasterGH сказал: tamplate = [[ здесь скрипт с метками ]] Как это можно сделать? Пока я не понял. Если можно, то на моём конкретном примере. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 3 августа, 2016 Поделиться Опубликовано 3 августа, 2016 Как пример Скрытый текст tamplate = [[ [ENABLE] aobscanmodule(INJECT,test.exe, $data) alloc(newmem,$1000) label(code) label(return) newmem: code: inc [test.exe+5B5A4] jmp return INJECT: jmp code nop return: registersymbol(INJECT) [DISABLE] INJECT: db FF 05 A4 B5 45 00 unregistersymbol(INJECT) dealloc(newmem) ]] -- Попытка определить процесс (или другим кодом открыть процесс) if (getOpenedProcessID() == getProcessIDFromProcessName("test.exe")) then data = 'FF 05 A4 B5 45 00' else if (getOpenedProcessID() == getProcessIDFromProcessName("test2.exe")) then data = 'FF 05 A4 B5 45 00' end end -- Подменяем маркер, сохраняем скрипт, активируем скрипт newTamplate = tamplate.gsub(script, "$data", data) ... Примеры замен newTamplate = tamplate.gsub(script, "$data1", data) newTamplate = tamplate.gsub(script, "$data2", data) newTamplate = tamplate.gsub(script, "$data3, data) newTamplate = tamplate.gsub(script, "$dataN", data) ... memoryRecord = getAddressList().getMemoryRecordByDescription('Cheat') memoryRecord.Script = newTamplate memoryRecord.Active = true Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 3 августа, 2016 Автор Поделиться Опубликовано 3 августа, 2016 (изменено) 2 часа назад, MasterGH сказал: Как пример Не получается - СЕ не кушает. Мне кажется в этих строках ошибка: newTamplate = tamplate.gsub(script, "$data1", data) Поэтому попробовал и так: Скрытый текст addressList = getAddressList() memoryRecord = addressList.getMemoryRecordByID(226) memoryRecord2 = addressList.getMemoryRecordByID(162) if (getProcessIDFromProcessName("KB.exe")==nil) then else OpenProcess("KB.exe") if memoryRecord.value == "King's Bounty - The Leg" then Process = 'KB.exe' Signatura = '8B 4F 0C 8B 2C 81 89' Register1 = 'eax' Register2 = 'edi' Register3 = 'ecx' a = '14' OriginalCode = 'db 8B 4F 0C 8B 2C 81' else if memoryRecord.value == "Kings Bounty Armored Pr" then Process = 'kb.exe' Signatura = '8B 4F 0C 8B 34 81 89 74 24 10 EB 06' Register1 = 'eax' Register2 = 'edi' Register3 = 'ecx' a = '0C' OriginalCode = 'db 8B 4F 0C 8B 34 81' else if memoryRecord.value == "Kings Bounty Crossworld" then Process = 'kb.exe' Signatura = '8B 4F 0C 8B 34 81 89 74 24 18' Register1 = 'eax' Register2 = 'edi' Register3 = 'ecx' a = '0C' OriginalCode = 'db 8B 4F 0C 8B 34 81' end end end end if (getProcessIDFromProcessName("KBWotN.exe")==nil) then else OpenProcess("KBWotN.exe") Process = 'KBWotN.exe' Signatura = '8B 4F 0C 8B 1C 81 EB 02 33 DB 0F' Register1 = 'eax' Register2 = 'edi' Register3 = 'ecx' a = '0C' OriginalCode = 'db 8B 4F 0C 8B 1C 81' end if (getProcessIDFromProcessName("KBDarkside.exe")==nil) then else OpenProcess("KBDarkside.exe") Process = 'KBDarkside.exe' Signatura = '8B 45 0C 8B 0C 98 8B 01 FF 50 14 89 44 24 14 8B 46 10' Register1 = 'ecx' Register2 = 'ebp' Register3 = 'eax' a = '0C' OriginalCode = 'db 8B 45 0C 8B 0C 98' end tamplate = [[ { Game : KB.exe Version: Date : 2016-01-18 Author : Garik66 This script does blah blah blah } [ENABLE] aobscanmodule(WindowCharacter,$Process,$Signatura) // should be unique alloc(newmem,$4000) label(code) label(return) label(XAR1) registersymbol(XAR1) label(XAR2) registersymbol(XAR2) label(XAR3) registersymbol(XAR3) label(XAR4) registersymbol(XAR4) label(XAR5) registersymbol(XAR5) label(XAR6) registersymbol(XAR6) label(XAR7) registersymbol(XAR7) label(XAR8) registersymbol(XAR8) label(XAR9) registersymbol(XAR9) label(XAR10) registersymbol(XAR10) label(XAR11) registersymbol(XAR11) label(XAR12) registersymbol(XAR12) label(XAR13) registersymbol(XAR13) registersymbol(WindowCharacter) newmem: $OriginalCode push $Register1 mov $Register1,[$Register2+04] cmp [$Register1+$a],61747461 // attack jne @f cmp [$Register1+$a+4],00006B63 jne @f mov [XAR1],$Register3 jmp code @@: cmp [$Register1+$a],6B6F6F62 // booksize jne @f cmp [$Register1+$a+4],657A6973 jne @f mov [XAR2],$Register3 jmp code @@: cmp [$Register1+$a+28],6B6F6F62 // booksize jne @f cmp [$Register1+$a+28+4],657A6973 jne @f mov [XAR2],$Register3 jmp code @@: cmp [$Register1+$a],73797263 // crystals jne @f cmp [$Register1+$a+4],736C6174 jne @f mov [XAR3],$Register3 jmp code @@: cmp [$Register1+$a],65666564 // defense jne @f cmp [$Register1+$a+4],0065736E jne @f mov [XAR4],$Register3 jmp code @@: cmp [$Register1+$a],65707865 // experience jne @f cmp [$Register1+$a+4],6E656972 jne @f cmp [$Register1+$a+8],00006563 jne @f mov [XAR5],$Register3 jmp code @@: cmp [$Register1+$a],65746E69 // intellect jne @f cmp [$Register1+$a+4],63656C6C jne @f cmp [$Register1+$a+8],00000074 jne @f mov [XAR6],$Register3 jmp code @@: cmp [$Register1+$a],6461656C // leadership jne @f cmp [$Register1+$a+4],68737265 jne @f cmp [$Register1+$a+8],00007069 jne @f mov [XAR7],$Register3 jmp code @@: cmp [$Register1+$a],616E616D // mana jne @f mov [XAR8],$Register3 mov $Register1,[$Register3] mov [$Register1+08],64 jmp code @@: cmp [$Register1+$a],656E6F6D // money jne @f cmp byte ptr [$Register1+$a+4],79 jne @f mov [XAR9],$Register3 jmp code @@: cmp [$Register1+$a],65676172 // rage jne @f mov [XAR10],$Register3 mov $Register1,[$Register3] mov [$Register1+08],64 jmp code @@: cmp [$Register1+$a+28],65676172 // rage jne @f mov [XAR10],$Register3 mov $Register1,[$Register3] mov [$Register1+08],64 jmp code @@: cmp [$Register1+$a],656E7572 // rune_magic jne @f cmp [$Register1+$a+4],67616D5F jne @f cmp [$Register1+$a+8],00006369 jne @f mov [XAR11],$Register3 jmp code @@: cmp [$Register1+$a],656E7572 // rune_might jne @f cmp [$Register1+$a+4],67696D5F jne @f cmp [$Register1+$a+8],00007468 jne @f mov [XAR12],$Register3 jmp code @@: cmp [$Register1+$a],656E7572 // rune_mind jne code cmp [$Register1+$a+4],6E696D5F jne code cmp [$Register1+$a+8],00000064 jne code mov [XAR13],$Register3 jmp code code: pop $Register1 jmp return XAR1: dd 0 XAR2: dd 0 XAR3: dd 0 XAR4: dd 0 XAR5: dd 0 XAR6: dd 0 XAR7: dd 0 XAR8: dd 0 XAR9: dd 0 XAR10: dd 0 XAR11: dd 0 XAR12: dd 0 XAR13: dd 0 WindowCharacter: jmp newmem db 90 return: [DISABLE] WindowCharacter: $OriginalCode unregistersymbol(XAR1) unregistersymbol(XAR2) unregistersymbol(XAR3) unregistersymbol(XAR4) unregistersymbol(XAR5) unregistersymbol(XAR6) unregistersymbol(XAR7) unregistersymbol(XAR8) unregistersymbol(XAR9) unregistersymbol(XAR10) unregistersymbol(XAR11) unregistersymbol(XAR12) unregistersymbol(XAR13) unregistersymbol(WindowCharacter) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "KB.exe"+465A1 "KB.exe"+46582: E8 09 C4 FC FF - call KB.exe+12990 "KB.exe"+46587: 8B F8 - mov edi,eax "KB.exe"+46589: 85 FF - test edi,edi "KB.exe"+4658B: 0F 84 6D FF FF FF - je KB.exe+464FE "KB.exe"+46591: 8B 74 24 3C - mov esi,[esp+3C] "KB.exe"+46595: 56 - push esi "KB.exe"+46596: 8B CF - mov ecx,edi "KB.exe"+46598: E8 A3 79 1E 00 - call KB.exe+22DF40 "KB.exe"+4659D: 85 C0 - test eax,eax "KB.exe"+4659F: 7C 0C - jl KB.exe+465AD // ---------- INJECTING HERE ---------- "KB.exe"+465A1: 8B 4F 0C - mov ecx,[edi+0C] "KB.exe"+465A4: 8B 2C 81 - mov ebp,[ecx+eax*4] // ---------- DONE INJECTING ---------- "KB.exe"+465A7: 89 6C 24 18 - mov [esp+18],ebp "KB.exe"+465AB: EB 06 - jmp KB.exe+465B3 "KB.exe"+465AD: 89 5C 24 18 - mov [esp+18],ebx "KB.exe"+465B1: 8B EB - mov ebp,ebx "KB.exe"+465B3: 0F B6 16 - movzx edx,byte ptr [esi] "KB.exe"+465B6: 8B 44 24 1C - mov eax,[esp+1C] "KB.exe"+465BA: 52 - push edx "KB.exe"+465BB: E8 D0 AE 00 00 - call KB.exe+51490 "KB.exe"+465C0: 84 C0 - test al,al "KB.exe"+465C2: 0F 84 E4 00 00 00 - je KB.exe+466AC } { // ORIGINAL CODE - INJECTION POINT: "kb.exe"+4CBD0 "kb.exe"+4CBB1: E8 EA AA FC FF - call kb.exe+176A0 "kb.exe"+4CBB6: 8B F8 - mov edi,eax "kb.exe"+4CBB8: 85 FF - test edi,edi "kb.exe"+4CBBA: 0F 84 6C FF FF FF - je kb.exe+4CB2C "kb.exe"+4CBC0: 8B 6C 24 34 - mov ebp,[esp+34] "kb.exe"+4CBC4: 55 - push ebp "kb.exe"+4CBC5: 8B CF - mov ecx,edi "kb.exe"+4CBC7: E8 A4 1B 1F 00 - call kb.exe+23E770 "kb.exe"+4CBCC: 85 C0 - test eax,eax "kb.exe"+4CBCE: 7C 0C - jl kb.exe+4CBDC // ---------- INJECTING HERE ---------- "kb.exe"+4CBD0: 8B 4F 0C - mov ecx,[edi+0C] "kb.exe"+4CBD3: 8B 34 81 - mov esi,[ecx+eax*4] // ---------- DONE INJECTING ---------- "kb.exe"+4CBD6: 89 74 24 10 - mov [esp+10],esi "kb.exe"+4CBDA: EB 06 - jmp kb.exe+4CBE2 "kb.exe"+4CBDC: 89 5C 24 10 - mov [esp+10],ebx "kb.exe"+4CBE0: 8B F3 - mov esi,ebx "kb.exe"+4CBE2: 0F B6 55 00 - movzx edx,byte ptr [ebp+00] "kb.exe"+4CBE6: 8B 44 24 14 - mov eax,[esp+14] "kb.exe"+4CBEA: 52 - push edx "kb.exe"+4CBEB: E8 60 CF 00 00 - call kb.exe+59B50 "kb.exe"+4CBF0: 84 C0 - test al,al "kb.exe"+4CBF2: 0F 84 F6 00 00 00 - je kb.exe+4CCEE } { // ORIGINAL CODE - INJECTION POINT: "KB.exe"+51122 "KB.exe"+51103: E8 58 83 FC FF - call KB.exe+19460 "KB.exe"+51108: 8B F8 - mov edi,eax "KB.exe"+5110A: 85 FF - test edi,edi "KB.exe"+5110C: 0F 84 70 FF FF FF - je KB.exe+51082 "KB.exe"+51112: 8B 6C 24 3C - mov ebp,[esp+3C] "KB.exe"+51116: 55 - push ebp "KB.exe"+51117: 8B CF - mov ecx,edi "KB.exe"+51119: E8 72 68 1E 00 - call KB.exe+237990 "KB.exe"+5111E: 85 C0 - test eax,eax "KB.exe"+51120: 7C 0C - jl KB.exe+5112E // ---------- INJECTING HERE ---------- "KB.exe"+51122: 8B 4F 0C - mov ecx,[edi+0C] "KB.exe"+51125: 8B 34 81 - mov esi,[ecx+eax*4] // ---------- DONE INJECTING ---------- "KB.exe"+51128: 89 74 24 18 - mov [esp+18],esi "KB.exe"+5112C: EB 0C - jmp KB.exe+5113A "KB.exe"+5112E: C7 44 24 18 00 00 00 00 - mov [esp+18],00000000 "KB.exe"+51136: 8B 74 24 18 - mov esi,[esp+18] "KB.exe"+5113A: 0F B6 55 00 - movzx edx,byte ptr [ebp+00] "KB.exe"+5113E: 52 - push edx "KB.exe"+5113F: 8B C3 - mov eax,ebx "KB.exe"+51141: E8 EA DC 00 00 - call KB.exe+5EE30 "KB.exe"+51146: 84 C0 - test al,al "KB.exe"+51148: 0F 84 F8 00 00 00 - je KB.exe+51246 } { // ORIGINAL CODE - INJECTION POINT: "KBWotN.exe"+D43EC "KBWotN.exe"+D43CD: E8 7E ED F2 FF - call KBWotN.exe+3150 "KBWotN.exe"+D43D2: 8B F8 - mov edi,eax "KBWotN.exe"+D43D4: 85 FF - test edi,edi "KBWotN.exe"+D43D6: 0F 84 67 FF FF FF - je KBWotN.exe+D4343 "KBWotN.exe"+D43DC: 8B 74 24 34 - mov esi,[esp+34] "KBWotN.exe"+D43E0: 56 - push esi "KBWotN.exe"+D43E1: 8B CF - mov ecx,edi "KBWotN.exe"+D43E3: E8 F8 07 F3 FF - call KBWotN.exe+4BE0 "KBWotN.exe"+D43E8: 85 C0 - test eax,eax "KBWotN.exe"+D43EA: 78 08 - js KBWotN.exe+D43F4 // ---------- INJECTING HERE ---------- "KBWotN.exe"+D43EC: 8B 4F 0C - mov ecx,[edi+0C] "KBWotN.exe"+D43EF: 8B 1C 81 - mov ebx,[ecx+eax*4] // ---------- DONE INJECTING ---------- "KBWotN.exe"+D43F2: EB 02 - jmp KBWotN.exe+D43F6 "KBWotN.exe"+D43F4: 33 DB - xor ebx,ebx "KBWotN.exe"+D43F6: 0F B6 16 - movzx edx,byte ptr [esi] "KBWotN.exe"+D43F9: 52 - push edx "KBWotN.exe"+D43FA: 8B CD - mov ecx,ebp "KBWotN.exe"+D43FC: E8 8F 6A FE FF - call KBWotN.exe+BAE90 "KBWotN.exe"+D4401: 84 C0 - test al,al "KBWotN.exe"+D4403: 0F 84 EC 00 00 00 - je KBWotN.exe+D44F5 "KBWotN.exe"+D4409: 85 DB - test ebx,ebx "KBWotN.exe"+D440B: 0F 84 0B 01 00 00 - je KBWotN.exe+D451C } { // ORIGINAL CODE - INJECTION POINT: "KBDarkside.exe"+30FF17 "KBDarkside.exe"+30FEF5: 33 DB - xor ebx,ebx "KBDarkside.exe"+30FEF7: 89 44 24 14 - mov [esp+14],eax "KBDarkside.exe"+30FEFB: 85 C0 - test eax,eax "KBDarkside.exe"+30FEFD: 0F 84 87 00 00 00 - je KBDarkside.exe+30FF8A "KBDarkside.exe"+30FF03: 57 - push edi "KBDarkside.exe"+30FF04: 3B 5D 10 - cmp ebx,[ebp+10] "KBDarkside.exe"+30FF07: 72 0E - jb KBDarkside.exe+30FF17 "KBDarkside.exe"+30FF09: 68 50 72 8A 00 - push KBDarkside.exe+4A7250 "KBDarkside.exe"+30FF0E: FF 15 C4 2F 10 01 - call dword ptr [KBDarkside.exe+D02FC4] "KBDarkside.exe"+30FF14: 83 C4 04 - add esp,04 // ---------- INJECTING HERE ---------- "KBDarkside.exe"+30FF17: 8B 45 0C - mov eax,[ebp+0C] "KBDarkside.exe"+30FF1A: 8B 0C 98 - mov ecx,[eax+ebx*4] // ---------- DONE INJECTING ---------- "KBDarkside.exe"+30FF1D: 8B 01 - mov eax,[ecx] "KBDarkside.exe"+30FF1F: FF 50 14 - call dword ptr [eax+14] "KBDarkside.exe"+30FF22: 89 44 24 14 - mov [esp+14],eax "KBDarkside.exe"+30FF26: 8B 46 10 - mov eax,[esi+10] "KBDarkside.exe"+30FF29: 89 44 24 10 - mov [esp+10],eax "KBDarkside.exe"+30FF2D: 8D 68 01 - lea ebp,[eax+01] "KBDarkside.exe"+30FF30: 3B 6E 14 - cmp ebp,[esi+14] "KBDarkside.exe"+30FF33: 76 1D - jna KBDarkside.exe+30FF52 "KBDarkside.exe"+30FF35: 8D 45 10 - lea eax,[ebp+10] "KBDarkside.exe"+30FF38: 89 46 14 - mov [esi+14],eax } ]] --memoryRecord2.Script = tamplate --script = memoryRecord2.Script script = string.gsub(tamplate, "$Process", Process) script = string.gsub(tamplate, "$Signatura", Signatura) script = string.gsub(tamplate, "$Register1", Register1) script = string.gsub(tamplate, "$Register2", Register2) script = string.gsub(tamplate, "$Register3", Register3) script = string.gsub(tamplate, "$a", a) script = string.gsub(tamplate, "$OriginalCode", OriginalCode) memoryRecord2.Script = script но СЕ опять же не кушает. Но зараза не объясняет, где ошибка, пишет - Не весь код пригоден инъекции. Изменено 3 августа, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 4 августа, 2016 Поделиться Опубликовано 4 августа, 2016 Сначала я сделал так script = tamplate.gsub(tamplate, "$Process", Process) script = script.gsub(tamplate, "$Signatura", Signatura) script = script.gsub(tamplate, "$Register1", Register1) script = script.gsub(tamplate, "$Register2", Register2) script = script.gsub(tamplate, "$Register3", Register3) script = script.gsub(tamplate, "$a", a) script = script.gsub(tamplate, "$OriginalCode", OriginalCode) memoryRecord.Script = script У меня повылезали ошибки. Потом я сделал так и ошибки пропали. Скрытый текст addressList = getAddressList() --memoryRecord = addressList.getMemoryRecordByID(226) --memoryRecord2 = addressList.getMemoryRecordByID(162) memoryRecord = addressList.getMemoryRecordByDescription('Cheat') memoryRecord.Script = newTamplate memoryRecord.Active = true Process = 'KB.exe' Signatura = '' Register1 = '' Register2 = '' Register3 = '' a = '' OriginalCode = '' if (getProcessIDFromProcessName("KB.exe")==nil) then else OpenProcess("KB.exe") if memoryRecord.value == "King's Bounty - The Leg" then Process = 'KB.exe' Signatura = '8B 4F 0C 8B 2C 81 89' Register1 = 'eax' Register2 = 'edi' Register3 = 'ecx' a = '14' OriginalCode = 'db 8B 4F 0C 8B 2C 81' else if memoryRecord.value == "Kings Bounty Armored Pr" then Process = 'kb.exe' Signatura = '8B 4F 0C 8B 34 81 89 74 24 10 EB 06' Register1 = 'eax' Register2 = 'edi' Register3 = 'ecx' a = '0C' OriginalCode = 'db 8B 4F 0C 8B 34 81' else if memoryRecord.value == "Kings Bounty Crossworld" then Process = 'kb.exe' Signatura = '8B 4F 0C 8B 34 81 89 74 24 18' Register1 = 'eax' Register2 = 'edi' Register3 = 'ecx' a = '0C' OriginalCode = 'db 8B 4F 0C 8B 34 81' end end end end if (getProcessIDFromProcessName("KBWotN.exe")==nil) then else OpenProcess("KBWotN.exe") Process = 'KBWotN.exe' Signatura = '8B 4F 0C 8B 1C 81 EB 02 33 DB 0F' Register1 = 'eax' Register2 = 'edi' Register3 = 'ecx' a = '0C' OriginalCode = 'db 8B 4F 0C 8B 1C 81' end if (getProcessIDFromProcessName("KBDarkside.exe")==nil) then else OpenProcess("KBDarkside.exe") Process = 'KBDarkside.exe' Signatura = '8B 45 0C 8B 0C 98 8B 01 FF 50 14 89 44 24 14 8B 46 10' Register1 = 'ecx' Register2 = 'ebp' Register3 = 'eax' a = '0C' OriginalCode = 'db 8B 45 0C 8B 0C 98' end tamplate = [[ { Game : KB.exe Version: Date : 2016-01-18 Author : Garik66 This script does blah blah blah } [ENABLE] aobscanmodule(WindowCharacter,$Process,$Signatura) // should be unique alloc(newmem,$4000) label(code) label(return) label(XAR1) registersymbol(XAR1) label(XAR2) registersymbol(XAR2) label(XAR3) registersymbol(XAR3) label(XAR4) registersymbol(XAR4) label(XAR5) registersymbol(XAR5) label(XAR6) registersymbol(XAR6) label(XAR7) registersymbol(XAR7) label(XAR8) registersymbol(XAR8) label(XAR9) registersymbol(XAR9) label(XAR10) registersymbol(XAR10) label(XAR11) registersymbol(XAR11) label(XAR12) registersymbol(XAR12) label(XAR13) registersymbol(XAR13) registersymbol(WindowCharacter) newmem: $OriginalCode push $Register1 mov $Register1,[$Register2+04] cmp [$Register1+$a],61747461 // attack jne @f cmp [$Register1+$a+4],00006B63 jne @f mov [XAR1],$Register3 jmp code @@: cmp [$Register1+$a],6B6F6F62 // booksize jne @f cmp [$Register1+$a+4],657A6973 jne @f mov [XAR2],$Register3 jmp code @@: cmp [$Register1+$a+28],6B6F6F62 // booksize jne @f cmp [$Register1+$a+28+4],657A6973 jne @f mov [XAR2],$Register3 jmp code @@: cmp [$Register1+$a],73797263 // crystals jne @f cmp [$Register1+$a+4],736C6174 jne @f mov [XAR3],$Register3 jmp code @@: cmp [$Register1+$a],65666564 // defense jne @f cmp [$Register1+$a+4],0065736E jne @f mov [XAR4],$Register3 jmp code @@: cmp [$Register1+$a],65707865 // experience jne @f cmp [$Register1+$a+4],6E656972 jne @f cmp [$Register1+$a+8],00006563 jne @f mov [XAR5],$Register3 jmp code @@: cmp [$Register1+$a],65746E69 // intellect jne @f cmp [$Register1+$a+4],63656C6C jne @f cmp [$Register1+$a+8],00000074 jne @f mov [XAR6],$Register3 jmp code @@: cmp [$Register1+$a],6461656C // leadership jne @f cmp [$Register1+$a+4],68737265 jne @f cmp [$Register1+$a+8],00007069 jne @f mov [XAR7],$Register3 jmp code @@: cmp [$Register1+$a],616E616D // mana jne @f mov [XAR8],$Register3 mov $Register1,[$Register3] mov [$Register1+08],64 jmp code @@: cmp [$Register1+$a],656E6F6D // money jne @f cmp byte ptr [$Register1+$a+4],79 jne @f mov [XAR9],$Register3 jmp code @@: cmp [$Register1+$a],65676172 // rage jne @f mov [XAR10],$Register3 mov $Register1,[$Register3] mov [$Register1+08],64 jmp code @@: cmp [$Register1+$a+28],65676172 // rage jne @f mov [XAR10],$Register3 mov $Register1,[$Register3] mov [$Register1+08],64 jmp code @@: cmp [$Register1+$a],656E7572 // rune_magic jne @f cmp [$Register1+$a+4],67616D5F jne @f cmp [$Register1+$a+8],00006369 jne @f mov [XAR11],$Register3 jmp code @@: cmp [$Register1+$a],656E7572 // rune_might jne @f cmp [$Register1+$a+4],67696D5F jne @f cmp [$Register1+$a+8],00007468 jne @f mov [XAR12],$Register3 jmp code @@: cmp [$Register1+$a],656E7572 // rune_mind jne code cmp [$Register1+$a+4],6E696D5F jne code cmp [$Register1+$a+8],00000064 jne code mov [XAR13],$Register3 jmp code code: pop $Register1 jmp return XAR1: dd 0 XAR2: dd 0 XAR3: dd 0 XAR4: dd 0 XAR5: dd 0 XAR6: dd 0 XAR7: dd 0 XAR8: dd 0 XAR9: dd 0 XAR10: dd 0 XAR11: dd 0 XAR12: dd 0 XAR13: dd 0 WindowCharacter: jmp newmem db 90 return: [DISABLE] WindowCharacter: $OriginalCode unregistersymbol(XAR1) unregistersymbol(XAR2) unregistersymbol(XAR3) unregistersymbol(XAR4) unregistersymbol(XAR5) unregistersymbol(XAR6) unregistersymbol(XAR7) unregistersymbol(XAR8) unregistersymbol(XAR9) unregistersymbol(XAR10) unregistersymbol(XAR11) unregistersymbol(XAR12) unregistersymbol(XAR13) unregistersymbol(WindowCharacter) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "KB.exe"+465A1 "KB.exe"+46582: E8 09 C4 FC FF - call KB.exe+12990 "KB.exe"+46587: 8B F8 - mov edi,eax "KB.exe"+46589: 85 FF - test edi,edi "KB.exe"+4658B: 0F 84 6D FF FF FF - je KB.exe+464FE "KB.exe"+46591: 8B 74 24 3C - mov esi,[esp+3C] "KB.exe"+46595: 56 - push esi "KB.exe"+46596: 8B CF - mov ecx,edi "KB.exe"+46598: E8 A3 79 1E 00 - call KB.exe+22DF40 "KB.exe"+4659D: 85 C0 - test eax,eax "KB.exe"+4659F: 7C 0C - jl KB.exe+465AD // ---------- INJECTING HERE ---------- "KB.exe"+465A1: 8B 4F 0C - mov ecx,[edi+0C] "KB.exe"+465A4: 8B 2C 81 - mov ebp,[ecx+eax*4] // ---------- DONE INJECTING ---------- "KB.exe"+465A7: 89 6C 24 18 - mov [esp+18],ebp "KB.exe"+465AB: EB 06 - jmp KB.exe+465B3 "KB.exe"+465AD: 89 5C 24 18 - mov [esp+18],ebx "KB.exe"+465B1: 8B EB - mov ebp,ebx "KB.exe"+465B3: 0F B6 16 - movzx edx,byte ptr [esi] "KB.exe"+465B6: 8B 44 24 1C - mov eax,[esp+1C] "KB.exe"+465BA: 52 - push edx "KB.exe"+465BB: E8 D0 AE 00 00 - call KB.exe+51490 "KB.exe"+465C0: 84 C0 - test al,al "KB.exe"+465C2: 0F 84 E4 00 00 00 - je KB.exe+466AC } { // ORIGINAL CODE - INJECTION POINT: "kb.exe"+4CBD0 "kb.exe"+4CBB1: E8 EA AA FC FF - call kb.exe+176A0 "kb.exe"+4CBB6: 8B F8 - mov edi,eax "kb.exe"+4CBB8: 85 FF - test edi,edi "kb.exe"+4CBBA: 0F 84 6C FF FF FF - je kb.exe+4CB2C "kb.exe"+4CBC0: 8B 6C 24 34 - mov ebp,[esp+34] "kb.exe"+4CBC4: 55 - push ebp "kb.exe"+4CBC5: 8B CF - mov ecx,edi "kb.exe"+4CBC7: E8 A4 1B 1F 00 - call kb.exe+23E770 "kb.exe"+4CBCC: 85 C0 - test eax,eax "kb.exe"+4CBCE: 7C 0C - jl kb.exe+4CBDC // ---------- INJECTING HERE ---------- "kb.exe"+4CBD0: 8B 4F 0C - mov ecx,[edi+0C] "kb.exe"+4CBD3: 8B 34 81 - mov esi,[ecx+eax*4] // ---------- DONE INJECTING ---------- "kb.exe"+4CBD6: 89 74 24 10 - mov [esp+10],esi "kb.exe"+4CBDA: EB 06 - jmp kb.exe+4CBE2 "kb.exe"+4CBDC: 89 5C 24 10 - mov [esp+10],ebx "kb.exe"+4CBE0: 8B F3 - mov esi,ebx "kb.exe"+4CBE2: 0F B6 55 00 - movzx edx,byte ptr [ebp+00] "kb.exe"+4CBE6: 8B 44 24 14 - mov eax,[esp+14] "kb.exe"+4CBEA: 52 - push edx "kb.exe"+4CBEB: E8 60 CF 00 00 - call kb.exe+59B50 "kb.exe"+4CBF0: 84 C0 - test al,al "kb.exe"+4CBF2: 0F 84 F6 00 00 00 - je kb.exe+4CCEE } { // ORIGINAL CODE - INJECTION POINT: "KB.exe"+51122 "KB.exe"+51103: E8 58 83 FC FF - call KB.exe+19460 "KB.exe"+51108: 8B F8 - mov edi,eax "KB.exe"+5110A: 85 FF - test edi,edi "KB.exe"+5110C: 0F 84 70 FF FF FF - je KB.exe+51082 "KB.exe"+51112: 8B 6C 24 3C - mov ebp,[esp+3C] "KB.exe"+51116: 55 - push ebp "KB.exe"+51117: 8B CF - mov ecx,edi "KB.exe"+51119: E8 72 68 1E 00 - call KB.exe+237990 "KB.exe"+5111E: 85 C0 - test eax,eax "KB.exe"+51120: 7C 0C - jl KB.exe+5112E // ---------- INJECTING HERE ---------- "KB.exe"+51122: 8B 4F 0C - mov ecx,[edi+0C] "KB.exe"+51125: 8B 34 81 - mov esi,[ecx+eax*4] // ---------- DONE INJECTING ---------- "KB.exe"+51128: 89 74 24 18 - mov [esp+18],esi "KB.exe"+5112C: EB 0C - jmp KB.exe+5113A "KB.exe"+5112E: C7 44 24 18 00 00 00 00 - mov [esp+18],00000000 "KB.exe"+51136: 8B 74 24 18 - mov esi,[esp+18] "KB.exe"+5113A: 0F B6 55 00 - movzx edx,byte ptr [ebp+00] "KB.exe"+5113E: 52 - push edx "KB.exe"+5113F: 8B C3 - mov eax,ebx "KB.exe"+51141: E8 EA DC 00 00 - call KB.exe+5EE30 "KB.exe"+51146: 84 C0 - test al,al "KB.exe"+51148: 0F 84 F8 00 00 00 - je KB.exe+51246 } { // ORIGINAL CODE - INJECTION POINT: "KBWotN.exe"+D43EC "KBWotN.exe"+D43CD: E8 7E ED F2 FF - call KBWotN.exe+3150 "KBWotN.exe"+D43D2: 8B F8 - mov edi,eax "KBWotN.exe"+D43D4: 85 FF - test edi,edi "KBWotN.exe"+D43D6: 0F 84 67 FF FF FF - je KBWotN.exe+D4343 "KBWotN.exe"+D43DC: 8B 74 24 34 - mov esi,[esp+34] "KBWotN.exe"+D43E0: 56 - push esi "KBWotN.exe"+D43E1: 8B CF - mov ecx,edi "KBWotN.exe"+D43E3: E8 F8 07 F3 FF - call KBWotN.exe+4BE0 "KBWotN.exe"+D43E8: 85 C0 - test eax,eax "KBWotN.exe"+D43EA: 78 08 - js KBWotN.exe+D43F4 // ---------- INJECTING HERE ---------- "KBWotN.exe"+D43EC: 8B 4F 0C - mov ecx,[edi+0C] "KBWotN.exe"+D43EF: 8B 1C 81 - mov ebx,[ecx+eax*4] // ---------- DONE INJECTING ---------- "KBWotN.exe"+D43F2: EB 02 - jmp KBWotN.exe+D43F6 "KBWotN.exe"+D43F4: 33 DB - xor ebx,ebx "KBWotN.exe"+D43F6: 0F B6 16 - movzx edx,byte ptr [esi] "KBWotN.exe"+D43F9: 52 - push edx "KBWotN.exe"+D43FA: 8B CD - mov ecx,ebp "KBWotN.exe"+D43FC: E8 8F 6A FE FF - call KBWotN.exe+BAE90 "KBWotN.exe"+D4401: 84 C0 - test al,al "KBWotN.exe"+D4403: 0F 84 EC 00 00 00 - je KBWotN.exe+D44F5 "KBWotN.exe"+D4409: 85 DB - test ebx,ebx "KBWotN.exe"+D440B: 0F 84 0B 01 00 00 - je KBWotN.exe+D451C } { // ORIGINAL CODE - INJECTION POINT: "KBDarkside.exe"+30FF17 "KBDarkside.exe"+30FEF5: 33 DB - xor ebx,ebx "KBDarkside.exe"+30FEF7: 89 44 24 14 - mov [esp+14],eax "KBDarkside.exe"+30FEFB: 85 C0 - test eax,eax "KBDarkside.exe"+30FEFD: 0F 84 87 00 00 00 - je KBDarkside.exe+30FF8A "KBDarkside.exe"+30FF03: 57 - push edi "KBDarkside.exe"+30FF04: 3B 5D 10 - cmp ebx,[ebp+10] "KBDarkside.exe"+30FF07: 72 0E - jb KBDarkside.exe+30FF17 "KBDarkside.exe"+30FF09: 68 50 72 8A 00 - push KBDarkside.exe+4A7250 "KBDarkside.exe"+30FF0E: FF 15 C4 2F 10 01 - call dword ptr [KBDarkside.exe+D02FC4] "KBDarkside.exe"+30FF14: 83 C4 04 - add esp,04 // ---------- INJECTING HERE ---------- "KBDarkside.exe"+30FF17: 8B 45 0C - mov eax,[ebp+0C] "KBDarkside.exe"+30FF1A: 8B 0C 98 - mov ecx,[eax+ebx*4] // ---------- DONE INJECTING ---------- "KBDarkside.exe"+30FF1D: 8B 01 - mov eax,[ecx] "KBDarkside.exe"+30FF1F: FF 50 14 - call dword ptr [eax+14] "KBDarkside.exe"+30FF22: 89 44 24 14 - mov [esp+14],eax "KBDarkside.exe"+30FF26: 8B 46 10 - mov eax,[esi+10] "KBDarkside.exe"+30FF29: 89 44 24 10 - mov [esp+10],eax "KBDarkside.exe"+30FF2D: 8D 68 01 - lea ebp,[eax+01] "KBDarkside.exe"+30FF30: 3B 6E 14 - cmp ebp,[esi+14] "KBDarkside.exe"+30FF33: 76 1D - jna KBDarkside.exe+30FF52 "KBDarkside.exe"+30FF35: 8D 45 10 - lea eax,[ebp+10] "KBDarkside.exe"+30FF38: 89 46 14 - mov [esi+14],eax } ]] --memoryRecord2.Script = tamplate --script = memoryRecord2.Script script = tamplate.gsub(tamplate, "$Process", Process) script = script.gsub(tamplate, "$Signatura", Signatura) script = script.gsub(tamplate, "$Register1", Register1) script = script.gsub(tamplate, "$Register2", Register2) script = script.gsub(tamplate, "$Register3", Register3) script = script.gsub(tamplate, "$a", a) script = script.gsub(tamplate, "$OriginalCode", OriginalCode) memoryRecord.Script = script Кстати я получал Memory Record по имени, не по айдишнику. Я думаю, удобнее получать по имени. Короче ошибка в gsub заменах. А у меня еще ошибки в пустых переменных. Поэтому я написал (возможно это не нужно писать) Скрытый текст Process = 'KB.exe' Signatura = '' Register1 = '' Register2 = '' Register3 = '' a = '' OriginalCode = '' 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 августа, 2016 Автор Поделиться Опубликовано 4 августа, 2016 46 минуты назад, MasterGH сказал: Потом я сделал так и ошибки пропали. У меня пока не получается. Максимум, что получается заменить только одну метку - последнюю -$OriginalCode. Ладно нужно переварить это и потом доделать. А вопрос - важно ли что в самом скрипте с названием "Cheat" будет находиться, хотя по идее не должно быть важным. Я уже и plugin AA смотрел твой, чтобы посмотреть как там получается скрипт, но там вроде везде именно: script = string.gsub(script, "$data", data) string.gsub пишется. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 августа, 2016 Автор Поделиться Опубликовано 4 августа, 2016 5 часов назад, MasterGH сказал: Короче ошибка в gsub заменах. До разобрался. MasterGH, болшой, приболшой СПАСЫБ!!! Видео и LUA-скрипт, для сохранения и загрузки в таблицу скрипта с метками, выложил ТУТ. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения