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

[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. А так ты можешь сделать, только смотри что бы сигнатура осталась уникальной.
 

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

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

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

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

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

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