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

Создание искуственного указателя


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

Доброго времени суток. Я здесь новичок. И хочу не много обнаглеть и предложить урок
Как вы поняли из названия темы мы будем бороться с DMA при помощи простого скрипта.
Для чего это нужно? Во первых для начинающих. Есть реверсивный способ поска указателе, но когда 
указатели многоуровневые иногда случается что указатель допустим пяти, шести уровневый, а найти вероятное значение
СЕ наотрез отказывается находить уже с третьего уровня, конечно же если грамотно подойти то найти легко, но это не для чайников а чайники тоже хотят взламывать игры. К тому же просто адреса иногда имеют преимущество, выбора горячих клавиш для чита. В скрипте только включить выключить, а в адресе более богатый выбор.
И так создаём искусственный указатель на примере игры чужой космос 2
открываем игру, открываем СЕ, открываем процесс в СЕ, проходим первый уровень (первый уровень лёгкий), попадаем на базу.

Спойлер

CK-1.jpg

мы видим у нас 1100 плазмы, плазма в игре одновременно и боеприпасы для супер оружия и как внутри игровая валюта.
открываем СЕ присоединяемся к процессу ищем как вы знаете 1100. Теперь надо нам её отсеять чтобы отсеять нам надо либо потратить плазму,
либо пополнить. Для этого кликаем на ракеты

Что мы там видем? У нас 1100 плазмы, плазма это одновременно боеприпасы для супер оружия и внутри игровая валюта, вводим в поиск 1100 жмём поиск, находим много результатов (это я скриншотить не буду, так как наверняка на форуме эта тема есть), для того чтоб отсеять, нам надо либо потратить плазму, либо пополнить, если жмём минус мы возвращаем ракеты базе, плазмы становиться больше, если жмём плюс, мы покупаем ракеты плазмы соответственно меньше. и так меняем значение, и отсеиваем пока не останеться один адрес, если их несколько, по очереди замораживаем и проверяем какой из нех заморожен(этому учить даже нубов не надо). За тем жмём найти инструкции ббращающиеся к этому адресу, соглашаемся на присоединение отладчика, чтоб появились инструкции покупаем или продаём ракеты.
получаем много инструкций. жмём остановить.

Что мы сдесь видим? Мы видим что смещение везде одинаково. Это значит что на указателе будет именно смещение DC, запишем его.Бывают случаи что смещение сложное типа этого [esi+eax*4+14],здесь надо поступить так-открыть калькулятор windows выбрать вид,если на хрюше вид инженерный если от виста и новее вид програмиста, в скопированной дополнительной информации через буфер обмена ищем значение в eax делаем вычисление в хексе, значение eax множаем на 4 и прибавляем 14. Могут быть варианты, что будут ещё инструкции с другими смещеними в разных играх, нам нужны инструкции где их есть большенство.
жмём на любой из них дополнительная информация, я нажал на первую в моём случаи получилось это

Спойлер

EAX=00002BF2
EBX=0592E0F0
ECX=0545C7D0
EDX=05563B01
ESI=0545C7D0
EDI=0000005A
EBP=0592E0F0
ESP=0012FE68
EIP=0041126A

Вероятный базовый указатель =0592E0F0

00411259 - mov edi,0000005A
0041125E - jnl 00411342
00411264 - mov eax,[ebp+000000DC]
0041126A - test eax,eax
0041126C - jng 00411342

 

мы видим Вероятный базовый указатель =0592E0F0 так же видим это значение находиться в EBX, сохраняем всё это в блокноте, позже нам это понадобиться,
сейчас нам нужен любой динамический адрес, в котором всегда после перезапуска игры будет какое то значение всё равно какое нам по барабану, к стати инструкции ещё не закрываем, в СЕ жмём новый поиск и ищем единицу результатов будет много, скажу вам по секрету всему свету первые пятьсот и больше адресов всегда будут иметь значения, после перезапуска игры они могут меняться, нам это не столь важно, главное что они всегда рабочие, вот из них мы и будем делать искусственный указатель. И так я занёс в моём случае первый адрес в таблицу. первый адрес в таблицу он у меня такой 00020008 вот из него мы будем делать указатель. И так открываем наши инструкции и ту инструкцию которую, скопировали в блокноте выделяем и жмём показать в дизассемблере, выбираем инструменты,в контекстном меню выбираем автоассемблер, там выбираем иньекция (AOB) в показвшемся окошке, соглашаемся с предложенным адресом, затем окно переключиться, в окошко с предлжением назвать код(переменные), я напишу plazma, 
откроется иньекция кода:

Спойлер

{ Game   : unwrapped.exe
  Version: 
  Date   : 2019-04-18
  Author : Pitronic

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(plazma,unwrapped.exe,8B 85 DC 00 00 00 85 C0 0F 8E) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  mov eax,[ebp+000000DC]
  jmp return

plazma:
  jmp newmem
  nop
return:
registersymbol(plazma)

[DISABLE]

plazma:
  db 8B 85 DC 00 00 00

unregistersymbol(plazma)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "unwrapped.exe"+11264

"unwrapped.exe"+1123A: 83 C4 28           -  add esp,28
"unwrapped.exe"+1123D: C3                 -  ret 
"unwrapped.exe"+1123E: 8B CE              -  mov ecx,esi
"unwrapped.exe"+11240: E8 3B 59 06 00     -  call unwrapped.exe+76B80
"unwrapped.exe"+11245: 84 C0              -  test al,al
"unwrapped.exe"+11247: 0F 85 86 08 00 00  -  jne unwrapped.exe+11AD3
"unwrapped.exe"+1124D: 8B 85 A8 00 00 00  -  mov eax,[ebp+000000A8]
"unwrapped.exe"+11253: 3B 85 AC 00 00 00  -  cmp eax,[ebp+000000AC]
"unwrapped.exe"+11259: BF 5A 00 00 00     -  mov edi,0000005A
"unwrapped.exe"+1125E: 0F 8D DE 00 00 00  -  jnl unwrapped.exe+11342
// ---------- INJECTING HERE ----------
"unwrapped.exe"+11264: 8B 85 DC 00 00 00  -  mov eax,[ebp+000000DC]
// ---------- DONE INJECTING  ----------
"unwrapped.exe"+1126A: 85 C0              -  test eax,eax
"unwrapped.exe"+1126C: 0F 8E D0 00 00 00  -  jng unwrapped.exe+11342
"unwrapped.exe"+11272: 39 BD FC 00 00 00  -  cmp [ebp+000000FC],edi
"unwrapped.exe"+11278: 0F 8E 32 02 00 00  -  jng unwrapped.exe+114B0
"unwrapped.exe"+1127E: 6A 04              -  push 04
"unwrapped.exe"+11280: 8B CE              -  mov ecx,esi
"unwrapped.exe"+11282: E8 59 58 06 00     -  call unwrapped.exe+76AE0
"unwrapped.exe"+11287: 84 C0              -  test al,al
"unwrapped.exe"+11289: 0F 85 B3 00 00 00  -  jne unwrapped.exe+11342
"unwrapped.exe"+1128F: 8A 4C 24 13        -  mov cl,[esp+13]
}

 

Собственно осталось в newmem: написать наш код. Мы будем присваивать нашему искуственному адресу, значение адреса ebx
newmem:
mov [00020008],ebx

дальше в СЕ добавляем адрес жмём добавить адрес отмечаем что это указатель, в нижнем поле вписываем наш адрес 00020008, а вверху пишем смещение DC, искуственный указатель готов и будет работать всегда, недостаток способа,чит  начинает работать только тогда, когда при включенном скрипте, поменяете значение этой самой плазмы. в игре.

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

21 минуту назад, Pitronic сказал:

сейчас нам нужен любой динамический адрес, в котором всегда после перезапуска игры будет какое то значение всё равно какое нам по барабану

Не советуй новичкам такое.

Значение может быть нужным игре. (на каком нибудь этапе).

22 минуты назад, Pitronic сказал:

недостаток способа,чит  начинает работать только тогда, когда при включенном скрипте, поменяете значение этой самой плазмы. в игре.

А читающей инструкции нет?

 

Урок так себе. Не нужен.

Тем более что у тебя указатель находится просто в EBP

27 минут назад, Pitronic сказал:

EBP=0592E0F0

т.е. [ebp+dc]- это и есть плазма.

 

30 минут назад, Pitronic сказал:

дальше в СЕ добавляем адрес жмём добавить адрес отмечаем что это указатель, в нижнем поле вписываем наш адрес 00020008, а вверху пишем смещение DC

Вместо этой чухни, делаем нормально:

Спойлер

{ Game   : unwrapped.exe
  Version:
  Date   : 2019-04-18
  Author : Pitronic

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(plazma,unwrapped.exe,8B 85 DC 00 00 00 85 C0 0F 8E) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(p_plazma)
registersymbol(p_plazma)
registersymbol(plazma)

newmem:
  lea eax,[ebp+000000DC]
  mov [p_plazma],eax

code:
  mov eax,[ebp+000000DC]
  jmp return

p_plazma:
  dd 0

plazma:
  jmp newmem
  db 90
return:

[DISABLE]
plazma:
  db 8B 85 DC 00 00 00

unregistersymbol(plazma)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "unwrapped.exe"+11264

"unwrapped.exe"+1123A: 83 C4 28           -  add esp,28
"unwrapped.exe"+1123D: C3                 -  ret
"unwrapped.exe"+1123E: 8B CE              -  mov ecx,esi
"unwrapped.exe"+11240: E8 3B 59 06 00     -  call unwrapped.exe+76B80
"unwrapped.exe"+11245: 84 C0              -  test al,al
"unwrapped.exe"+11247: 0F 85 86 08 00 00  -  jne unwrapped.exe+11AD3
"unwrapped.exe"+1124D: 8B 85 A8 00 00 00  -  mov eax,[ebp+000000A8]
"unwrapped.exe"+11253: 3B 85 AC 00 00 00  -  cmp eax,[ebp+000000AC]
"unwrapped.exe"+11259: BF 5A 00 00 00     -  mov edi,0000005A
"unwrapped.exe"+1125E: 0F 8D DE 00 00 00  -  jnl unwrapped.exe+11342
// ---------- INJECTING HERE ----------
"unwrapped.exe"+11264: 8B 85 DC 00 00 00  -  mov eax,[ebp+000000DC]
// ---------- DONE INJECTING  ----------
"unwrapped.exe"+1126A: 85 C0              -  test eax,eax
"unwrapped.exe"+1126C: 0F 8E D0 00 00 00  -  jng unwrapped.exe+11342
"unwrapped.exe"+11272: 39 BD FC 00 00 00  -  cmp [ebp+000000FC],edi
"unwrapped.exe"+11278: 0F 8E 32 02 00 00  -  jng unwrapped.exe+114B0
"unwrapped.exe"+1127E: 6A 04              -  push 04
"unwrapped.exe"+11280: 8B CE              -  mov ecx,esi
"unwrapped.exe"+11282: E8 59 58 06 00     -  call unwrapped.exe+76AE0
"unwrapped.exe"+11287: 84 C0              -  test al,al
"unwrapped.exe"+11289: 0F 85 B3 00 00 00  -  jne unwrapped.exe+11342
"unwrapped.exe"+1128F: 8A 4C 24 13        -  mov cl,[esp+13]
}

 

В p_plazma теперь лежит адрес плазмы и p_plazma и есть указатель - искусственный.

А адрес в табличке будет выглядеть так:

Спойлер

image.png.4cc49a94d612184670eb727a3d7cc3ba.png

 

Короче уроки наши смотри.
А только потом уроки пиши.

ЗЫ: тему закрываю. не несет смысловой нагрузки.

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

  • Garik66 закрыл тема
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

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

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