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

[Borderlands 2] Проблема со встраиванием скрипта на бесконечное здоровье

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

Сначала я делал скрипт на "Новый уровень при убийстве" когда я его сделал оказалось что инструкция на которую я сделал скрипт была привязана и к скрипту "Бесконечное здоровье".Но я нашел выход, сделать скрипт на "Бесконечное здоровье" чуть выше чем он был до этого.В итоге оказалось что сканер сигнатур захватывает ту часть байтов которая изменяется.Вопрос теперь в том как сделать так что бы скрипт на "Новый уровень при убийстве" и  "Бесконечное здоровье" работали.

Скрипт на "Новый уровень при убийстве"

Спойлер

{ Game   : Borderlands2.exe
  Version: 
  Date   : 2019-02-07
  Author : mumut

  This script does blah blah blah
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(New_level_with_every_kill,Borderlands2.exe,F3 0F 11 46 6C 8B 0D) // should be unique
aobscanmodule(Level,Borderlands2.exe,F3 0F 10 4F 6C 0F 5B)
alloc(newmem,$1000)
label(newmem2)
label(code)
label(code2)
label(return)
label(return2)
label(Level_up)
registersymbol(New_level_with_every_kill)
registersymbol(Level)

newmem:
  cmp [esi+B0],(float)45
  jne code
  cmp [esi+6C],(float)0
  jne code
  inc [Level_up]
code:
  movss [esi+6C],xmm0
  jmp return

newmem2:
  cmp [Level_up],1
  jne code2
  mov [Level_up],0
  cvtdq2ps xmm0,xmm0
  movss [edi+6C],xmm0
code2:
  movss xmm1,[edi+6C]
  jmp return2

Level_up:
  dd 0

New_level_with_every_kill:
  jmp newmem
return:

Level:
  jmp newmem2
return2:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
New_level_with_every_kill:
  db F3 0F 11 46 6C
Level:
  db F3 0F 10 4F 6C

unregistersymbol(New_level_with_every_kill)
unregistersymbol(Level)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Borderlands2.exe"+A189C2

"Borderlands2.exe"+A189A7: 76 07                    -  jna Borderlands2.exe+A189B0
"Borderlands2.exe"+A189A9: F3 0F 11 4E 6C           -  movss [esi+6C],xmm1
"Borderlands2.exe"+A189AE: EB 17                    -  jmp Borderlands2.exe+A189C7
"Borderlands2.exe"+A189B0: 0F 2F C8                 -  comiss xmm1,xmm0
"Borderlands2.exe"+A189B3: 76 05                    -  jna Borderlands2.exe+A189BA
"Borderlands2.exe"+A189B5: 0F 28 C1                 -  movaps xmm0,xmm1
"Borderlands2.exe"+A189B8: EB 08                    -  jmp Borderlands2.exe+A189C2
"Borderlands2.exe"+A189BA: 0F 2F D0                 -  comiss xmm2,xmm0
"Borderlands2.exe"+A189BD: 77 03                    -  ja Borderlands2.exe+A189C2
"Borderlands2.exe"+A189BF: 0F 28 C2                 -  movaps xmm0,xmm2
// ---------- INJECTING HERE ----------
"Borderlands2.exe"+A189C2: F3 0F 11 46 6C           -  movss [esi+6C],xmm0
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+A189C7: 8B 0D 44 FD F9 02        -  mov ecx,[Borderlands2.exe+1EEFD44]
"Borderlands2.exe"+A189CD: 85 C9                    -  test ecx,ecx
"Borderlands2.exe"+A189CF: 74 0F                    -  je Borderlands2.exe+A189E0
"Borderlands2.exe"+A189D1: E8 FA 99 1B 00           -  call Borderlands2.exe+BD23D0
"Borderlands2.exe"+A189D6: D9 5D 08                 -  fstp dword ptr [ebp+08]
"Borderlands2.exe"+A189D9: F3 0F 10 45 08           -  movss xmm0,[ebp+08]
"Borderlands2.exe"+A189DE: EB 03                    -  jmp Borderlands2.exe+A189E3
"Borderlands2.exe"+A189E0: 0F 57 C0                 -  xorps xmm0,xmm0
"Borderlands2.exe"+A189E3: 8B 16                    -  mov edx,[esi]
"Borderlands2.exe"+A189E5: 8B 82 70 01 00 00        -  mov eax,[edx+00000170]
}
{
// ORIGINAL CODE - INJECTION POINT: "Borderlands2.exe"+9CEC87

"Borderlands2.exe"+9CEC5F: 0F 84 E9 00 00 00              -  je Borderlands2.exe+9CED4E
"Borderlands2.exe"+9CEC65: 8B 86 94 01 00 00              -  mov eax,[esi+00000194]
"Borderlands2.exe"+9CEC6B: 53                             -  push ebx
"Borderlands2.exe"+9CEC6C: 50                             -  push eax
"Borderlands2.exe"+9CEC6D: E8 BE 87 6A FF                 -  call Borderlands2.exe+77430
"Borderlands2.exe"+9CEC72: 8B D8                          -  mov ebx,eax
"Borderlands2.exe"+9CEC74: 83 C4 04                       -  add esp,04
"Borderlands2.exe"+9CEC77: 85 DB                          -  test ebx,ebx
"Borderlands2.exe"+9CEC79: 0F 84 CE 00 00 00              -  je Borderlands2.exe+9CED4D
"Borderlands2.exe"+9CEC7F: 66 0F 6E 83 5C 02 00 00        -  movd xmm0,[ebx+0000025C]
// ---------- INJECTING HERE ----------
"Borderlands2.exe"+9CEC87: F3 0F 10 4F 6C                 -  movss xmm1,[edi+6C]
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+9CEC8C: 0F 5B C0                       -  cvtdq2ps xmm0,xmm0
"Borderlands2.exe"+9CEC8F: 0F 2F C8                       -  comiss xmm1,xmm0
"Borderlands2.exe"+9CEC92: C7 45 F8 00 00 00 00           -  mov [ebp-08],00000000
"Borderlands2.exe"+9CEC99: 0F 82 9D 00 00 00              -  jb Borderlands2.exe+9CED3C
"Borderlands2.exe"+9CEC9F: 90                             -  nop 
"Borderlands2.exe"+9CECA0: 83 BB 5C 02 00 00 00           -  cmp dword ptr [ebx+0000025C],00
"Borderlands2.exe"+9CECA7: 7E 70                          -  jle Borderlands2.exe+9CED19
"Borderlands2.exe"+9CECA9: 8B CE                          -  mov ecx,esi
"Borderlands2.exe"+9CECAB: E8 F0 19 49 00                 -  call Borderlands2.exe+E606A0
"Borderlands2.exe"+9CECB0: 39 83 58 02 00 00              -  cmp [ebx+00000258],eax
}

 

Скрипт на  "Бесконечное здоровье"

Спойлер

{ Game   : Borderlands2.exe
  Version: 
  Date   : 2019-02-07
  Author : mumut

  This script does blah blah blah
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(Infinite_health,Borderlands2.exe,0F 2F D0 77 03 0F 28 C2 F3 0F 11 46 6C 8B) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  cmp [esi+B0],(float)0.5
  jne code
  jmp return
code:
  comiss xmm2,xmm0
  ja Borderlands2.exe+A189C2
  jmp return

Infinite_health:
  jmp newmem
return:
registersymbol(Infinite_health)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
Infinite_health:
  db 0F 2F D0 77 03

unregistersymbol(Infinite_health)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Borderlands2.exe"+A189BA

"Borderlands2.exe"+A1899B: F3 0F 2A D1              -  cvtsi2ss xmm2,ecx
"Borderlands2.exe"+A1899F: F3 0F 10 4E 44           -  movss xmm1,[esi+44]
"Borderlands2.exe"+A189A4: 0F 2F CB                 -  comiss xmm1,xmm3
"Borderlands2.exe"+A189A7: 76 07                    -  jna Borderlands2.exe+A189B0
"Borderlands2.exe"+A189A9: F3 0F 11 4E 6C           -  movss [esi+6C],xmm1
"Borderlands2.exe"+A189AE: EB 17                    -  jmp Borderlands2.exe+A189C7
"Borderlands2.exe"+A189B0: 0F 2F C8                 -  comiss xmm1,xmm0
"Borderlands2.exe"+A189B3: 76 05                    -  jna Borderlands2.exe+A189BA
"Borderlands2.exe"+A189B5: 0F 28 C1                 -  movaps xmm0,xmm1
"Borderlands2.exe"+A189B8: EB 08                    -  jmp Borderlands2.exe+A189C2
// ---------- INJECTING HERE ----------
"Borderlands2.exe"+A189BA: 0F 2F D0                 -  comiss xmm2,xmm0
"Borderlands2.exe"+A189BD: 77 03                    -  ja Borderlands2.exe+A189C2
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+A189BF: 0F 28 C2                 -  movaps xmm0,xmm2
"Borderlands2.exe"+A189C2: F3 0F 11 46 6C           -  movss [esi+6C],xmm0
"Borderlands2.exe"+A189C7: 8B 0D 44 FD D0 02        -  mov ecx,[Borderlands2.exe+1EEFD44]
"Borderlands2.exe"+A189CD: 85 C9                    -  test ecx,ecx
"Borderlands2.exe"+A189CF: 74 0F                    -  je Borderlands2.exe+A189E0
"Borderlands2.exe"+A189D1: E8 FA 99 1B 00           -  call Borderlands2.exe+BD23D0
"Borderlands2.exe"+A189D6: D9 5D 08                 -  fstp dword ptr [ebp+08]
"Borderlands2.exe"+A189D9: F3 0F 10 45 08           -  movss xmm0,[ebp+08]
"Borderlands2.exe"+A189DE: EB 03                    -  jmp Borderlands2.exe+A189E3
"Borderlands2.exe"+A189E0: 0F 57 C0                 -  xorps xmm0,xmm0
}

 

Вот эти байты:

Спойлер

F3 0F 11 46 6C 8B

 

Изменено пользователем mumut

Поделиться сообщением


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

Найти сигнатуру для поиска вручную, байты которые изменяются можешь обозначить ? или *, тогда CE будет принимать любые байты там, но при этом ты должен
сохранить уникальность сигнатуры.

Поделиться сообщением


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

А можешь показать пример а то я никогда не делал сигнатуры.Это мой первый опыт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, mumut сказал:

А можешь показать пример

Например у тебя в коде есть какая нибудь сигнатура допустим (случайные числа) 23 7B 26 22, CE ищет эту сигнатуру. У тебя есть ещё один скрипт, он при поиске
использует её же. Первый скрипт изменяет сигнатуру своим jmp *название метки*. Например он меняет первые 2 байта. (23 7B). Тебе надо найти вторые 2 байта и туда поставить скрипт, но первые байты изменены. Вместо этих байтов ставишь ** ** 26 22. Но так сигнатура может потерять свою уникальность, потому смотришь что есть выше в отладчике - например A5. Добавляешь A5 ** ** 26 22. Проверяешь поиском - уникально - используешь. Но вообще не стоит делать 2 скрипта которые работают в одном месте, сделай всё в одном скрипте. И к тому же, у тебя один скрипт может перезаписывать кусок jmp от другого, скорее всего будет просто вылет программы.

Изменено пользователем inaginary

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
13 минут назад, inaginary сказал:

скорее всего будет просто вылет программы.

Не я смотрел когда я включал сначала "Бесконечное здоровье" а потом "Новый уровень при убийстве" то ничего не вылетало.А когда наоборот то "Бесконечное здоровье" не включалась из за того что байты поменялись.То есть я могу попробовать сделать так "aobscanmodule(Infinite_health,Borderlands2.exe,0F 2F D0 77 03 0F 28 C2 ** ** ** ** ** 8B)" и есть шанс что все будет работать ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, mumut сказал:

То есть я могу попробовать сделать так

Да , вижу у тебя не пересекаются jmp. А так ты можешь сделать, только смотри что бы сигнатура осталась уникальной.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 минут назад, inaginary сказал:

уникальной.

А как понять что сигнатура уникальная ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, mumut сказал:

А как понять что сигнатура уникальная ?

Ставишь тип поиска Array of byte (Массив байт) ставишь "без разницы" в Writable и CopyOnWrite (синие квадратики вместо галочки), ставишь галочку hex у строки поиска, вставляешь массив и ищешь.

Дам тебе ещё совет как там можно очень просто реализовать бесконечные патроны. Замени в своём скрипте

ja Borderlands2.exe+A189C2

На

jb Borderlands2.exe+A189C2

Только это еще сделает врагов бессмертными, и тебя 😃
 

Изменено пользователем inaginary

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, inaginary сказал:

Ставишь тип поиска Array of byte (Массив байт)

p.s в настройках сканирования выбрать модуль в котором надо искать сигнатуру.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, inaginary сказал:

Найти сигнатуру для поиска вручную

Ребят ну причем здесь сигнатура.

Зачем лепить костыли.

Неужели нельзя просто сделать от одной инструкции и скрипт на здоровье и флаг для поднятия уровня?:D Проблем же нет.

6 часов назад, mumut сказал:

inc [Level_up]

@mumut, это не правильно. Это в данном случае прокатило благодаря моему второму скрипту на поднятие уровня, где флаг обнуляется.

Правильно будет именно присвоить значение флагу 1, т.е. 

mov [Level_up],1

Короче, если до выходных не сделаешь и, если кто-нить не поможет, в воскресение сделаю с пояснениями. (пятница и суббота рабочие у меня).

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
11 часов назад, mumut сказал:

что сканер сигнатур захватывает ту часть байтов

 Не совсем понял, что ты там задумал. Отвечаю лишь на вопрос... 

И так.. как вариант:

1) Делай полную иньекцию.. Он скопирует всего лишь 5 байт..  

2) Пропускай 5 меняющихся байт звездочками. 

3) Бери сигнатуру в плюс.. а не по коду в низ..  

То есть...  

Спойлер

"Borderlands2.exe"+A189A9: F3 0F 11 4E 6C           -  movss [esi+6C],xmm1
"Borderlands2.exe"+A189AE: EB 17                    -  jmp Borderlands2.exe+A189C7
"Borderlands2.exe"+A189B0: 0F 2F C8                 -  comiss xmm1,xmm0
"Borderlands2.exe"+A189B3: 76 05                    -  jna Borderlands2.exe+A189BA
"Borderlands2.exe"+A189B5: 0F 28 C1                 -  movaps xmm0,xmm1
"Borderlands2.exe"+A189B8: EB 08                    -  jmp Borderlands2.exe+A189C2
// ---------- INJECTING HERE ----------
"Borderlands2.exe"+A189BA: 0F 2F D0                 -  comiss xmm2,xmm0
"Borderlands2.exe"+A189BD: 77 03                    -  ja Borderlands2.exe+A189C2 


F3 0F 11 4E 6C EB 17 0F 2F C8 76 05 0F 28 C1 EB 08 0F 2F D0 77 03 

Сигнатура будет такая.. Читать будет с верху в низ.. Естественно укажешь +17 байт в 11h и всё. 
А то есть. 

Infinite_health+11:
  jmp newmem
return:
registersymbol(Infinite_health)

[DISABLE]

Infinite_health+11:
  db 0F 2F D0 77 03 
  
  Ps: 
  Не обзяательно писать все байты.. Пусть сигнатура будет хоть в +400 байт.. Главное указать от куда и что бы была уникальность. 

 

Вот как пример ещо.. Я ведь не писал все байты в строку.. А взял всего 13 байтов с самого верха.. Они уникальны (в своём роде) а до места ещо сам видишь 30 байт до нужного.. Так что писать все байты не обязательно. Так же можешь брать байты и с низу в минус уже... Вот как пример тут в плюс... В минус думаю догадываешься как писать...

 

444.thumb.jpg.160bdd73e26f6b58f65e0dffb3264b5e.jpg

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×

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

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