Перейти к содержанию

Один скрипт для двух игр, написанных на одном движке.


Рекомендуемые сообщения

Покопался, но по-видимому мозги не в том направлении работают.

Допустим есть две игры, написанных на одном движке. Написан скрипт для обеих. Тело инъекции одинаковое, отличаются только сигнатура (оригинальный инструкции игры).

Хочу сделать, чтобы был один скрипт для обеих игр.

 

Есть вопросы к мастерам:

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ё это сделать?

Надеюсь, что объяснил понятно..

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Garik66 сказал:

По идее нужно отличать по названию процесса, но процессы игр например выглядят так NG.exe и ng.exe, как в таком случае отличить какая из игр запущена. 

 

Навскидку, можно приводить к верхнему регистру(string,upper(str)) или к нижнему(string.lower(str))

Ссылка на комментарий
Поделиться на другие сайты

18 минуту назад, A1t0r сказал:

 

Навскидку, можно приводить к верхнему регистру(string,upper(str)) или к нижнему(string.lower(str))

А как это в скрипт запилить?

По первому вопросу нашёл решение, но оно не универсальное (скорее всего только для этой серии игр) - нашёл адрес (статичный), где само название игры на английском, т.е. по нему можно отличать.

Интересуют 2 и 3 вопросы.

Ссылка на комментарий
Поделиться на другие сайты

Если не ошибаюсь, то Lua-функция autoAssemble() принимает в себя скрипт на ассемблере в виде строки.

Получается можно написать что-то вроде

autoAssemble(
   [[aobscanmodule(Health,]]..moduleName..[[,xx xx xx xx xx)
   //скрипт
]]}

Только не знаю можно ли склеивать строки заключённые в квадратные скобки.

 

И никто не запрещает использовать луашную функцию AOBScan(x,x,x,x,...), только процесс надо открыть сначала.

Изменено пользователем A1t0r
добавлено
Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, A1t0r сказал:

Если не ошибаюсь, то Lua-функция autoAssemble() принимает в себя скрипт на ассемблере в виде строки.

Получается можно написать что-то вроде


autoAssemble(
   [[aobscanmodule(Health,]]..moduleName..[[,xx xx xx xx xx)
   //скрипт
]]}

Только не знаю можно ли склеивать строки заключённые в квадратные скобки.

 

И никто не запрещает использовать луашную функцию AOBScan(x,x,x,x,...), только процесс надо открыть сначала.

Не помог. :wacko: По-видимому я плохо объяснил.

Мне нужно в LUA-скрипте, определиться какая сигнатура будет ( в зависимости) от запущенной игры.

А в АА-скрипте уже использовать эту сигнатуру для активации скрипта, ну и 3 вопрос остаётся.

Ссылка на комментарий
Поделиться на другие сайты

Если у тебя всего два варианта, то прогони сначала одну сигнатуру через aobscan, и если список окажется пустой, то прогони вторую, и если и он будет пустой, значит что-то здесь не так.

 

Что-то голова плохо варит сегодня:(

Изменено пользователем A1t0r
добавлено
Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, A1t0r сказал:

Если у тебя всего два варианта, то прогони сначала одну сигнатуру через aobscan, и если список окажется пустой, то прогони вторую, и если и он будет пустой, значит что-то здесь не так.

 

Что-то голова плохо варит сегодня:(

В первом посте писал, что сигнатуру находит конечно, но подключается к вновь созданной, а не там где нужно, короче хрень получается.

Ссылка на комментарий
Поделиться на другие сайты

Может поможет пример. Выполняем автоматически 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
Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, MasterGH сказал:

Может поможет пример.

 

7 часов назад, Xipho сказал:

А если по заголовку главного окна искать процесс, например?

MasterGHXipho, спасибо большое за ответы!!!

Снял небольшое видео с уточнением по вопросу темы - что я хочу сделать?

Видео:

 

Изменено пользователем Garik66
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

Должен отметить, что вопрос на видео рассмотрен очень подробно. Поэтому за столь подробное объяснение я поставил +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
Ссылка на комментарий
Поделиться на другие сайты

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)

 

 

 

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

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)

 

Ссылка на комментарий
Поделиться на другие сайты

Можно так попробовать

Скрытый текст


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
Ссылка на комментарий
Поделиться на другие сайты

MasterGH, сенк большой!!!

Всё работает.

Сейчас засниму небольшое видео.

Остался вопрос, как возвращать назад метки в скрипт, если пользователь случайно нажмёт сохранить таблицу, после замены меток на значения.

Есть ли такая возможность? 

 

Ссылка на комментарий
Поделиться на другие сайты

Итак скрипт "Окно персонажа для обеих игр":

Скрытый текст

{ 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]

 

Видео:

 

Изменено пользователем Garik66
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Garik66 сказал:

MasterGH, сенк большой!!!

Всё работает.

Сейчас засниму небольшое видео.

Остался вопрос, как возвращать назад метки в скрипт, если пользователь случайно нажмёт сохранить таблицу, после замены меток на значения.

Есть ли такая возможность? 

 


Можно текст с метками хранить в Lua переменной.

tamplate = [[
здесь скрипт с метками
]]

 

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, MasterGH сказал:


Можно текст с метками хранить в Lua переменной.


tamplate = [[
здесь скрипт с метками
]]

 

ОК!!! СЕНК!!!

Потом опробую. 

Ссылка на комментарий
Поделиться на другие сайты

В 29.07.2016в19:35, MasterGH сказал:

Можно текст с метками хранить в Lua переменной.

MasterGH, написал скрипт для всех пяти игр серии - Один скрипт для 5 игр + урок - Как выйти на структуру, для написания фильтра..

Если и другие скрипты в серии будут также близки, то: 

В 29.07.2016в19:07, Garik66 сказал:

Остался вопрос, как возвращать назад метки в скрипт, если пользователь случайно нажмёт сохранить таблицу, после замены меток на значения.

Есть ли такая возможность? 

будет очень актуально. 

Просьба - поможешь разобраться в этом:

В 29.07.2016в19:35, MasterGH сказал:

tamplate = [[ здесь скрипт с метками ]]

Как это можно сделать? Пока я не понял. Если можно, то на моём конкретном примере. 

Ссылка на комментарий
Поделиться на другие сайты

Как пример

 

Скрытый текст

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

 

 

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, MasterGH сказал:

Как пример

Не получается :wacko: - СЕ не кушает.

Мне кажется в этих строках ошибка:

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

 

но СЕ опять же не кушает. Но зараза не объясняет, где ошибка, пишет - Не весь код пригоден инъекции.

 

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

Сначала я сделал так

 

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
Ссылка на комментарий
Поделиться на другие сайты

46 минуты назад, MasterGH сказал:

Потом я сделал так и ошибки пропали.

У меня пока не получается.

Максимум, что получается заменить только одну метку - последнюю -$OriginalCode. 

Ладно нужно переварить это и потом доделать.

 

А вопрос - важно ли что в самом скрипте с названием "Cheat" будет находиться, хотя по идее не должно быть важным.

Я уже и plugin AA смотрел твой, чтобы посмотреть как там получается скрипт, но там вроде везде именно:

script = string.gsub(script, "$data", data)

 string.gsub пишется.

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, MasterGH сказал:

Короче ошибка в gsub заменах.

До разобрался. 

MasterGH, болшой, приболшой СПАСЫБ!!! :D

Видео и LUA-скрипт, для сохранения и загрузки в таблицу скрипта с метками, выложил ТУТ.  

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.