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

Как превратить инъекцию в скрипт


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

Дня доброго. Разобрал структуру (и запилил в инъекцию):

Spoiler

 

alloc(newmem,2048,"mgsvmgo.exe"+2A12A1B)
label(returnhere)
label(originalcode)
label(exit)

newmem:

originalcode:
mov eax,[rdx+rax*4]
mov rbx,[rsp+08]

//===============//
// BOUNTY HUNTER //
//===============//

mov [rdx+040],00000620 //Bounty claimed
mov [rdx+23C],005F55D1 //Experience points
mov [rdx+1E8],0062DC6C //Score
mov [rdx+13C],00002160 //Kills
mov [rdx+10C],00000D8C //Headshots
mov [rdx+030],00000C49 //Assists
mov [rdx+074],000009C6 //Deaths
mov [rdx+21C],00000861 //Stuns
mov [rdx+1B8],000004FA //Stunned by Enemy
mov [rdx+0BC],000004FD //Fultons
mov [rdx+0CC],00000292 //Fultoned by enemy
mov [rdx+0DC],000005AF //Fulton saves
mov [rdx+1C8],000009AD //Enemies marked
mov [rdx+1D8],00000507 //Marked by Enemy
mov [rdx+12C],00000287 //Interrogations
mov [rdx+14C],0000019F //Knife Kills
mov [rdx+054],000001FF //Enemies Charmed
mov [rdx+22C],00000217 //WG Destroyed
mov [rdx+010],00000020 //Amazing throws
mov [rdx+16C],00000861 //Missions played
mov [rdx+18C],00000840 //Missions won
mov [rdx+20C],0007B0C0 //Time

//==================//
// CLOAK AND DAGGER //
//==================//

mov [rdx+09C],00000458 //Discs Retreived
mov [rdx+098],0000054A //Discs Picked Up
mov [rdx+094],00000461 //Discs Defended
mov [rdx+240],00368C73 //Experience points
mov [rdx+1EC],0025D396 //Score
mov [rdx+140],00001F31 //Kills
mov [rdx+110],00000860 //Headshots
mov [rdx+034],00000B50 //Assists
mov [rdx+078],000009F0 //Deaths
mov [rdx+220],0000089B //Stuns
mov [rdx+1BC],00000515 //Stunned by Enemy
mov [rdx+0C0],00000477 //Fultons
mov [rdx+0D0],0000029D //Fultoned by enemy
mov [rdx+0E0],00000418 //Fulton saves
mov [rdx+1CC],00000989 //Enemies marked
mov [rdx+1DC],000004E2 //Marked by Enemy
mov [rdx+130],000002BA //Interrogations
mov [rdx+150],000001F8 //Knife Kills
mov [rdx+058],00000223 //Enemies Charmed
mov [rdx+230],00000268 //WG Destroyed
mov [rdx+014],00000025 //Amazing throws
mov [rdx+170],00000835 //Missions played
mov [rdx+190],0000081E //Missions won
mov [rdx+210],00075C60 //Time

//==============//
// COMM CONTROL //
//==============//

mov [rdx+0A0],00001418 //Comm Links Captured
mov [rdx+0A8],0000147C //Comm Links Neutralized
mov [rdx+0A4],00000B3A //Comm Links Defended
mov [rdx+244],002D637D //Experience points
mov [rdx+1F0],002FFB85 //Score
mov [rdx+144],00001D8E //Kills
mov [rdx+114],00000BCD //Headshots
mov [rdx+038],00000B6D //Assists
mov [rdx+07C],000009C2 //Deaths
mov [rdx+224],00000AF7 //Stuns
mov [rdx+1C0],00000504 //Stunned by Enemy
mov [rdx+0C4],0000049A //Fultons
mov [rdx+0D4],0000028B //Fultoned by enemy
mov [rdx+0E4],00000478 //Fulton saves
mov [rdx+1D0],00000996 //Enemies marked
mov [rdx+1E0],000004E9 //Marked by Enemy
mov [rdx+134],000002CA //Interrogations
mov [rdx+154],0000018F //Knife Kills
mov [rdx+05C],00000246 //Enemies Charmed
mov [rdx+234],00000201 //WG Destroyed
mov [rdx+018],00000019 //Amazing throws
mov [rdx+174],00000862 //Missions played
mov [rdx+194],0000084C //Missions won
mov [rdx+214],0006B3A0 //Time

//==========//
// SABOTAGE //
//==========//

mov [rdx+1A4],000003EA //Missiles Fultoned
mov [rdx+1A0],000003FD //Missiles Destroyed
mov [rdx+19C],000014C4 //Missile Damage
mov [rdx+208],00000A3A //Terminal Hacks
mov [rdx+248],002CF2CD //Experience points
mov [rdx+1F4],002F5534 //Score
mov [rdx+148],00001FBD //Kills
mov [rdx+118],00000699 //Headshots
mov [rdx+03C],00000BC4 //Assists
mov [rdx+080],000009C3 //Deaths
mov [rdx+228],000007DB //Stuns
mov [rdx+1C4],00000509 //Stunned by enemy
mov [rdx+0C8],0000040B //Fultons
mov [rdx+0D8],000002A5 //Fultoned by enemy
mov [rdx+0E8],00000475 //Fulton saves
mov [rdx+1D4],00000929 //Enemies Marked
mov [rdx+1E4],000004F0 //Marked by Enemy
mov [rdx+138],000002B0 //Interrogations
mov [rdx+158],0000019C //Knife kills
mov [rdx+060],00000298 //Enemies Charmed
mov [rdx+238],00000299 //WG destroyed
mov [rdx+01C],00000034 //Amazing throws
mov [rdx+178],00000B35 //Missions Played
mov [rdx+198],00000B12 //Mission Won
mov [rdx+218],00098EE0 //Time

exit:
jmp returnhere

"mgsvmgo.exe"+2A12A1B:
jmp newmem
nop
nop
nop
returnhere:

 

 

Смотрел кучу видео, шерстил форум, но так и не нашел как перевести строки из скрипта в "изменяемые" строки chetengine Т.е. я создаю группу BOUNTY HUNTER и там есть список значений, где Bounty claimed = 1568 (DEC), например, и я его могу свободно изменить. Т.е. задача, чтобы эта инъекция работала более наглядно (сразу было видно значения по смещениям и их можно было изменять в десятичной системе), как обычная таблица.

 

Я конечно мастер объяснять :wacko:

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

Есть два варианта -

1. LUA скрипт и события изменения значений

2. Регистрация меток на все значения, добавление по этим меткам пунктов в таблицу, а в самой инъекции записывать по адресам значения из этих ячеек.

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

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

Смотрел кучу видео, шерстил форум, но так и не нашел как перевести строки из скрипта в "изменяемые" строки chetengine

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

Судя по вот этим трём смещениям:

mov [rdx+09C],00000458 //Discs Retreived
mov [rdx+098],0000054A //Discs Picked Up
mov [rdx+094],00000461 //Discs Defended

адреса у тебя в игре по 4 байта.

Тогда:

1. Переписываем скрипт так:

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

[ENABLE]
alloc(newmem,2048,"mgsvmgo.exe"+2A12A1B)
label(returnhere)
label(originalcode)
label(pStructur)
registersymbol(pStructur)

newmem:
cmp rax,10       // Фильтр поставил на всякий случай из твоего первого адреса:
jne originalcode // mov [rdx+040],00000620 //Bounty claimed.
push rdx
pop [pStructur]

originalcode:
mov eax,[rdx+rax*4]
mov rbx,[rsp+08]
jmp returnhere

pStructur:
dd 0

"mgsvmgo.exe"+2A12A1B:
jmp newmem
db 90 90 90
returnhere:
 
[DISABLE]
"mgsvmgo.exe"+2A12A1B:
mov eax,[rdx+rax*4]
mov rbx,[rsp+08]

unregistersymbol(pStructur)
dealloc(newmem)

 

и потом забиваем в таблицу адреса с соответствующими смещениями:

картинка (пример с первым адресом:

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

9623629.jpg

Попробуй.

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

1.  Парсер с регуляркой на Lua создающий записи в таблице по имени и значение от регистрированной метки. Если не умеешь, то ручками

2. Скрипт выше с вытаскиванием поинтера в таблицу
3. Под скрипт все адреса перенести чаилдами (т.е. перетянуть мышкой как вложения)
4. На скрипт поставить опцию при активации раскрывать вложения.

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

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

А вот с этим скриптом по аналогии не получается сделать (значения отображаются, но игра вылетает):

Spoiler

//0002 - амазинг троу
//0010 - килы
//0014 - фултон
//001C - котики
//0028 - смерти
//0068 - хэдшоты
//0070 - допрос
//0074 - ?килы?
//0078 - ножи
//00СС - станы
//009C - меня станят
//00A4 - метка
//00A8 - меня отмечают

//00D4 - экспа

 

[ENABLE]
aobscanmodule(EXP,mgsvmgo.exe,42 8B 0C 80 01 0A)
alloc(newmem,$1000,"mgsvmgo.exe"+2A0EC16)
label(code)
label(return)
registersymbol(EXP)

newmem:
  add dword ptr [rax+D4],#10000

code:
  mov ecx,[rax+r8*4]
  add [rdx],ecx
  jmp return

EXP:
  jmp newmem
  nop
return:

[DISABLE]
EXP:
  db 42 8B 0C 80 01 0A

unregistersymbol(EXP)
dealloc(newmem)

 

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

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

значения отображаются, но игра вылетает

Игра вылетает:

Из-за того, что скорее всего эта инструкция очень часто работает с адресом и в результате происходит быстрое переполнение. 

Выход:

1. Брать инструкцию, которая работает одно действие в игре -> одно срабатывание инструкции. Ну например когда входим в характеристики героя - одно срабатывание инструкции на чтение ЭКСПЫ.

2. Можно добавить в скрипт флаг на разовое прибавление ЭКСПЫ, но тогда нужно будет включать выключать скрипт. Пример такого скрипта вот попробуй:

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

[ENABLE]
aobscanmodule(EXP,mgsvmgo.exe,42 8B 0C 80 01 0A)
alloc(newmem,$1000,"mgsvmgo.exe"+2A0EC16)
label(code)
label(return)
label(flag)
registersymbol(EXP)

newmem:
  cmp [flag],1
  jne code
  cmp r8,1A                     // этот фильтр на всякий случай, т.к.[rax+D4]
  jne code
  add dword ptr [rax+D4],#10000 // в этом контейнере [rax+r8*4] может быть не
  mov [flag],0
                                // только ЭКСПА.
code:
  mov ecx,[rax+r8*4]
  add [rdx],ecx
  jmp return

flag:
dd 1

EXP:
  jmp newmem
  nop
return:

[DISABLE]
EXP:

  db 42 8B 0C 80 01 0A
unregistersymbol(EXP)
dealloc(newmem)

 

 

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

  • 3 недели спустя...
1 час назад, deathguru сказал:

совсем забыл отписаться -_-

игра вылетела случайным образом, как оказалось. работает по аналогии со скриптом выше.

Значит инструкция (mov ecx,[rax+r8*4]) работает не только с перечисленными тобой характеристиками, И при работе моего фильтра (cmp r8,1A) проскакивает несколько адресов, т.е. меняется не только r8, но и rax. Поэтому нужен более точный фильтр. Это уже нужно с игрой поработать, чтобы уточнить.

Как посмотреть, какие адреса проскакивают:

1. Активируй мой скрипт.

2. Перейди на инъекцию (jmp newmem, т.е. на адрес newmem).

3. ПКМ по инструкции (add dword ptr [rax+D4],#10000, перед активаций скрипта временно поменяй её на игровую (mov ecx,[rax+r8*4]), чтобы не было вылета и в контекстном меню выбери "Найти адреса, к которым обращается  эта инструкция".

4. Поделай что-то в игре у тебя появиться в новом окне адрес опыта и другие, которые имеет в регистре r8 такое же значение 1А.

5. Проделай "Анализ структур", чтобы отфильтровать от ненужных тебе адресов.

6. Перепиши скрипт.

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

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

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

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