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

[Son of Witch] Оптимизация скриптов


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

Доброе утро день всем.
// Хотя кому как. Я только недавно проснулся.

На днях, взламывал игру [Son of Bitch Witch]
Точнее использовал на практике свои (скудные, но все же) навыки.

На данный момент, имеется небольшая таблица:
2018_07_25_142443.png

Таблица простенькая. На некоторые вещи проверки пока-что не стал делать. (типо HP, MANA, Rage (ака ярость), Деньги, Урон. А ну и для боссов похоже инструкция взята отдельно.) позже сделаю еще варианты что бы можно было и для игроков фильтровать.
Цель с которой я создал тему (как можно догадаться из названия) попросить об оптимизации.
зачем? - спросите вы. Хочу посмотреть как на это (чудо) посмотрят другие люди, оценят, укажут на ошибки и прочее. Возможно скорее всего, вам понадобится игра для этого, так что, можете написать в ЛС, я кину игру. Если не надо - еще лучше.

А и еще пару слов про игру. Некоторые значения (по типу HP) немного ... зашифрованные что ли? Потому-что я их искал в типе float,double,4byte  - и они не являются обычными значениями (обычно идет так: 100 хп == 100.0:d;100:s;100:4 (флоат вроде буквой s позначается же?) а они были что-то типо: 1.225252525:d == 100 хп, 5234324600:4 (и в 4-байтном менялось, обычно, только последняя часть значения. т.е. если 100 хп =12345600, то 0 хп == 12345500; Это адрес?) а на счет флоата .... не помню.

Игра очень вые....тая, и там овер9999+ проверок и всяких инструкциях на HP, потому его немного не удобно "ловить" ибо
во-первых, игра тупит.
во-вторых, игра спамит ошибкой и самоликвидируется. (ор что?)

а и тут сразу ОЧЕНЬ важный вопрос. (Прямо вопрос Жизни и Взлома)
Через отладчик (тот что ловит инструкции что обращаются к адресам и не только) можно ли делать так, что бы некоторые инструкции он тупо не ловил?
Например, в этой игре, как я говорит чуточку ранее, на ХП есть множество проверок (аля cmp [edx+xxxxxx],01 и аналогичные и их может быть по штук 20. А выполняются они чуть ли не раз 10 в секунду. За пару минут может до 20К раз эта инструкция сплыть) естественно из за этого игра жутко лагает, тупит и (как я говорил ранее) вылетает.
Хотелось бы пунктик "не считывать/отлавливать данную инструкцию" есть чет типо такого? Или может плагин какой есть для этого?

Такс, вернемся к оптимизации.
Ниже я опишу отдельно мои скрипты, а также приложу сам lolwhatitis.ct 
Скорее всего не приложу. Ибо я только что увидел что нельзя приложить файл... а заливать куда-либо чет не хочется. Разве что в Диске пните я кину фулл пак скриптов. (но это не точно)

Но перед этим, хотелось что бы кто-то подсказал такой момент:
Как можно заметить со скрина (выше) у меня есть скрипт на "Бессмертие + OHK" (это один из немногих где есть проверка свой/чужой, правда... я взял значение что может меняться потому слетает в некоторых случаях (не по середине игры а именно либо работает всю игру, либо не пашет всю игру.). Так что надо переделать... но это совсем другая история.)

А также "Только Бессмертие" и "Только One Hit - One Kill"
Так как я не могу инжектить в одно и то же место 2 и более скрипта (не могу же?) то мне бы хотелось сделать что-то типо "выбора":
 

Спойлер


[X] "Бессмертие && OHK" ---> (и в этой же таблице, строчкой ниже) "Settings" = "0/1/2" // если 0 - онли бессмертие, если 1 - онли OHK, если 3 - то и то и то. 
//[X] - типо активация
Подскажите как это сделать, а то видел в таблицах а как - не шарю.
 
//Я думаю это выделяется память под значение (типо: push edx (если он = "0" и нигде не юзается)
//и делается проверка, типо: если 0 то выполняем эту часть кода, если 1 то эту и тд. 


На счет этого вроде бы все.
На счет оптимизации самих скриптов.
Гляньте, посмотрите и, кому не лень, укажите на косяки, недочёты или как можно было бы сделать лучше, проще или эффективнее скрипт(ы) и тд и тп. 


А вот и сами скрипты написанные на кооленке лежа на голове, на коленке.

Скрипт на Увеличение Макс. ХП:

Спойлер

{ Game   : game.exe
  Version:
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(max_hp,game.exe,0F BF 8F A4 02 00 00 0F) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov word ptr [edi+000002A4],#1000 // Самый оригинальный код в моей жизни. 
                                    //Кстати, а тут можно выводить вместо #1000, скажем "#{value}", а само значение уже указывать непосредственно в самой таблцие. 
                                    //А то что я как [CENSORED] буду 100500 раз скрипты переписывать?
code:
  movsx ecx,word ptr [edi+000002A4] // такс, а movsx на сколько я понял, работает с строкой с отображаемым ХП, и она ее просто добавляет к ней значение и "растягивает".
  jmp return

max_hp:
  jmp newmem
  nop
  nop
return:
registersymbol(max_hp)

[DISABLE]

max_hp:
  db 0F BF 8F A4 02 00 00

unregistersymbol(max_hp)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+CB781

"game.exe"+CB757: 89 45 98                 -  mov [ebp-68],eax
"game.exe"+CB75A: 8B 85 68 01 00 00        -  mov eax,[ebp+00000168]
"game.exe"+CB760: 89 4D DC                 -  mov [ebp-24],ecx
"game.exe"+CB763: 8D 4D 8B                 -  lea ecx,[ebp-75]
"game.exe"+CB766: 68 4C 49 F3 00           -  push game.exe+D9494C
"game.exe"+CB76B: 89 7D E8                 -  mov [ebp-18],edi
"game.exe"+CB76E: 89 45 B8                 -  mov [ebp-48],eax
"game.exe"+CB771: E8 5A 3F F4 FF           -  call game.exe+F6D0
"game.exe"+CB776: 89 5D FC                 -  mov [ebp-04],ebx
"game.exe"+CB779: F2 0F 10 8E 30 02 00 00  -  movsd xmm1,[esi+00000230]
// ---------- INJECTING HERE ----------
"game.exe"+CB781: 0F BF 8F A4 02 00 00     -  movsx ecx,word ptr [edi+000002A4]
// ---------- DONE INJECTING  ----------
"game.exe"+CB788: 0F 28 C1                 -  movaps xmm0,xmm1
"game.exe"+CB78B: F2 0F 59 05 C0 A3 F3 00  -  mulsd xmm0,[game.exe+D9A3C0]
"game.exe"+CB793: 0F 28 D1                 -  movaps xmm2,xmm1
"game.exe"+CB796: F2 0F 59 15 78 AC F3 00  -  mulsd xmm2,[game.exe+D9AC78]
"game.exe"+CB79E: F2 0F 2C C0              -  cvttsd2si eax,xmm0
"game.exe"+CB7A2: 89 45 A8                 -  mov [ebp-58],eax
"game.exe"+CB7A5: B8 67 66 66 66           -  mov eax,nvd3dum.dll+D6667
"game.exe"+CB7AA: F7 E9                    -  imul ecx
"game.exe"+CB7AC: C1 FA 03                 -  sar edx,03
"game.exe"+CB7AF: 8B C2                    -  mov eax,edx
}

 

Скрипт на выдачу 1000 ХП при использовании зелья здоровья:

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(add_poison_hp,game.exe,66 89 86 A6 02 00 00 66 83) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov ax,#1000 // В идеале, я бы этот скрипт и еще пару совместил в одно. Что бы не делать 1000 скриптов с практически одним эффектом.
  jmp code     // ax ... помните я говорил что меняется только последняя часть значения здоровья? а вот ax вам все и объяснит (я же прав да? если да - похвалите меня Я ведь такой ми-ми-ми :d)
code:
  mov [esi+000002A6],ax // по адресу "АДРЕС_ХП_ИГРОКА-2A6", находится указатель. Тут бы совет кулхацкера. Что бы пояснил как это работает и как "работать" с таким адресом. Я например сравнить даже ХП не могу игроков. Они в адресах. :c А это же много таких указателей может быть (на вещи, инвентарь статы и тд). #HELP
  jmp return

add_poison_hp:
  jmp newmem
  nop
  nop
return:
registersymbol(add_poison_hp)

[DISABLE]

add_poison_hp:
  db 66 89 86 A6 02 00 00

unregistersymbol(add_poison_hp)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+4F6221

"game.exe"+4F61FC: 8D 57 01                       -  lea edx,[edi+01]
"game.exe"+4F61FF: 90                             -  nop 
"game.exe"+4F6200: 8B 74 BD CC                    -  mov esi,[ebp+edi*4-34]
"game.exe"+4F6204: 85 F6                          -  test esi,esi
"game.exe"+4F6206: 0F 84 82 0C 00 00              -  je game.exe+4F6E8E
"game.exe"+4F620C: 0F B7 8E A6 02 00 00           -  movzx ecx,word ptr [esi+000002A6]
"game.exe"+4F6213: 0F BF C1                       -  movsx eax,cx
"game.exe"+4F6216: 89 45 E4                       -  mov [ebp-1C],eax
"game.exe"+4F6219: 66 8B 44 BD C4                 -  mov ax,[ebp+edi*4-3C]
"game.exe"+4F621E: 66 03 C1                       -  add ax,cx
// ---------- INJECTING HERE ----------
"game.exe"+4F6221: 66 89 86 A6 02 00 00           -  mov [esi+000002A6],ax
// ---------- DONE INJECTING  ----------
"game.exe"+4F6228: 66 83 F8 01                    -  cmp ax,01
"game.exe"+4F622C: 7D 07                          -  jnl game.exe+4F6235
"game.exe"+4F622E: 66 89 96 A6 02 00 00           -  mov [esi+000002A6],dx
"game.exe"+4F6235: 0F B7 86 A4 02 00 00           -  movzx eax,word ptr [esi+000002A4]
"game.exe"+4F623C: 66 39 86 A6 02 00 00           -  cmp [esi+000002A6],ax
"game.exe"+4F6243: 7E 07                          -  jle game.exe+4F624C
"game.exe"+4F6245: 66 89 86 A6 02 00 00           -  mov [esi+000002A6],ax
"game.exe"+4F624C: 6A 0A                          -  push 0A
"game.exe"+4F624E: C7 85 60 01 00 00 00 00 00 00  -  mov [ebp+00000160],00000000
"game.exe"+4F6258: 8D 8D 50 01 00 00              -  lea ecx,[ebp+00000150]
}

 

Скрипт на бессмертие+OHK: (3 в 1 - акция :D)

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(dmg_enemy,game.exe,66 29 9F A6 02 00 00 8B CE FF) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  //cmp [edi+0c],1 // просто закомментированный код. не обращайте внимания.
  //je code
  //cmp [edi+0c],24 

// Это Бессмертие и OHK.
  cmp [edi+64],#10000 
  jne @f
  mov bx,#0
  jmp code

@@:
 mov bx,1000
 jmp code

code:
  sub [edi+000002A6],bx
  jmp return

// Не стал показывать 3 разных скрипта, решил показать все вариации в одном. (А так то. Там просто кусок кода какой-либо убирается и все)
//Это ТОЛЬКО бессмертие:
  cmp [edi+64],#10000 // т.е. проверяем 10000 ли
  jne code          // если нет - валим в код
  mov bx,#0        // если да - bx == 0
  jmp code        // валим в код

code:
  sub [edi+000002A6],bx  // Х - 0 = Х
  jmp return
// end script
// а это ТОЛЬКО OHK
newmem:
  cmp [edi+64],#10000
  jne @f
  jmp code

@@:
 mov bx,#1000
 jmp code
// end script

dmg_enemy:
  jmp newmem
  nop
  nop
return:
registersymbol(dmg_enemy)

[DISABLE]

dmg_enemy:
  db 66 29 9F A6 02 00 00

unregistersymbol(dmg_enemy)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+2BAFAC

"game.exe"+2BAF83: 68 B0 D3 0A 02                 -  push game.exe+D8D3B0
"game.exe"+2BAF88: E8 43 92 D7 FF                 -  call game.exe+341D0
"game.exe"+2BAF8D: 84 C0                          -  test al,al
"game.exe"+2BAF8F: 75 18                          -  jne game.exe+2BAFA9
"game.exe"+2BAF91: 8B 4F 18                       -  mov ecx,[edi+18]
"game.exe"+2BAF94: 68 2C 01 00 00                 -  push 0000012C
"game.exe"+2BAF99: 68 B0 D3 0A 02                 -  push game.exe+D8D3B0
"game.exe"+2BAF9E: 8B 89 D4 0F 00 00              -  mov ecx,[ecx+00000FD4]
"game.exe"+2BAFA4: E8 A7 84 D7 FF                 -  call game.exe+33450
"game.exe"+2BAFA9: FF 75 B4                       -  push [ebp-4C]
// ---------- INJECTING HERE ----------
"game.exe"+2BAFAC: 66 29 9F A6 02 00 00           -  sub [edi+000002A6],bx
// ---------- DONE INJECTING  ----------
"game.exe"+2BAFB3: 8B CE                          -  mov ecx,esi
"game.exe"+2BAFB5: FF 75 C4                       -  push [ebp-3C]
"game.exe"+2BAFB8: FF 75 C0                       -  push [ebp-40]
"game.exe"+2BAFBB: FF 75 0C                       -  push [ebp+0C]
"game.exe"+2BAFBE: 53                             -  push ebx
"game.exe"+2BAFBF: 57                             -  push edi
"game.exe"+2BAFC0: E8 8B 12 E2 FF                 -  call game.exe+DC250
"game.exe"+2BAFC5: 8A 45 D7                       -  mov al,[ebp-29]
"game.exe"+2BAFC8: 66 83 BF A6 02 00 00 01        -  cmp word ptr [edi+000002A6],01
"game.exe"+2BAFD0: C7 87 F8 05 00 00 00 00 00 00  -  mov [edi+000005F8],00000000
}

 

Скрипт на выдачу маны после прохождения комнаты:
// Игра - это карта с комнатами. Вы можете выходить и входить в другие. Новая комната дает вам 1 ману. Я просто словил это и решил влепить +100 маны за 1 раз. (100  маны хватит с головой)

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(addinfmana,game.exe,66 01 86 A8 02 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov ax,#100           // На счет маны не помню. Вроде бы она так же как и ХП было. т.е менялся только конец значения (ax есть, значит так и есть. Такие значения кстати тяжело (мне) искать, надо значение уменьшилось/увеличилось. А это, иногда, сложно реализовать, к примеру с ХП. Минус ХП - и ты сдох.) 
  jmp code
code:
  add [esi+000002A8],ax
  jmp return

addinfmana:
  jmp newmem
  nop
  nop
return:
registersymbol(addinfmana)

[DISABLE]

addinfmana:
  db 66 01 86 A8 02 00 00

unregistersymbol(addinfmana)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+249C3A

"game.exe"+249C20: 50                    -  push eax
"game.exe"+249C21: 53                    -  push ebx
"game.exe"+249C22: 56                    -  push esi
"game.exe"+249C23: A1 54 A8 1A 01        -  mov eax,[game.exe+F4A854]
"game.exe"+249C28: 33 C5                 -  xor eax,ebp
"game.exe"+249C2A: 50                    -  push eax
"game.exe"+249C2B: 8D 45 F4              -  lea eax,[ebp-0C]
"game.exe"+249C2E: 64 A3 00 00 00 00     -  mov fs:[00000000],eax
"game.exe"+249C34: 8B F1                 -  mov esi,ecx
"game.exe"+249C36: 66 8B 45 08           -  mov ax,[ebp+08]
// ---------- INJECTING HERE ----------
"game.exe"+249C3A: 66 01 86 A8 02 00 00  -  add [esi+000002A8],ax
// ---------- DONE INJECTING  ----------
"game.exe"+249C41: B8 C7 00 00 00        -  mov eax,000000C7
"game.exe"+249C46: 66 39 86 A8 02 00 00  -  cmp [esi+000002A8],ax
"game.exe"+249C4D: 7E 69                 -  jle game.exe+249CB8
"game.exe"+249C4F: 68 94 81 00 01        -  push game.exe+DA8194
"game.exe"+249C54: 68 34 13 00 00        -  push 00001334
"game.exe"+249C59: 68 CC 66 00 01        -  push game.exe+DA66CC
"game.exe"+249C5E: 8D 4D 0B              -  lea ecx,[ebp+0B]
"game.exe"+249C61: E8 6A 5A DC FF        -  call game.exe+F6D0
"game.exe"+249C66: C7 45 FC 00 00 00 00  -  mov [ebp-04],00000000
"game.exe"+249C6D: 83 7E 68 00           -  cmp dword ptr [esi+68],00
}

 

Скрипт без траты маны:

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(nospendmana,game.exe,66 89 87 A8 02 00 00 8B) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov ax,100 // ну тут все просто. Записываем сотку в ax и она как бы и не тратиться 
             //(я чет так и не понял разницы что с # что без #. Одинаково вроде пашет... НУ или может я еще не столкнулся с моментом когда оно вместо значения 100 влепит 00000100. Было бы интересно посмотреть на это. такой БУМ и ты [CENSORED] с 00000100 маны.
  jmp code
code:
  mov [edi+000002A8],ax // Эта шкура кстати, при одном использовании маны (хоть у тебя будет 100 маны, а ты заюзаешь только 5 очков) перезаписывала ее на 0. 
  jmp return

nospendmana:
  jmp newmem
  nop
  nop
return:
registersymbol(nospendmana)

[DISABLE]

nospendmana:
  db 66 89 87 A8 02 00 00

unregistersymbol(nospendmana)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+243C9A

"game.exe"+243C73: 8D 4F 08                 -  lea ecx,[edi+08]
"game.exe"+243C76: E8 A5 7D E1 FF           -  call game.exe+5BA20
"game.exe"+243C7B: 03 D8                    -  add ebx,eax
"game.exe"+243C7D: B8 01 00 00 00           -  mov eax,00000001
"game.exe"+243C82: 3B D8                    -  cmp ebx,eax
"game.exe"+243C84: 0F 4C D8                 -  cmovl ebx,eax
"game.exe"+243C87: 66 29 9F A8 02 00 00     -  sub [edi+000002A8],bx
"game.exe"+243C8E: 66 83 BF A8 02 00 00 00  -  cmp word ptr [edi+000002A8],00
"game.exe"+243C96: 7D 09                    -  jnl game.exe+243CA1
"game.exe"+243C98: 33 C0                    -  xor eax,eax
// ---------- INJECTING HERE ----------
"game.exe"+243C9A: 66 89 87 A8 02 00 00     -  mov [edi+000002A8],ax
// ---------- DONE INJECTING  ----------
"game.exe"+243CA1: 8B 86 9C 00 00 00        -  mov eax,[esi+0000009C]
"game.exe"+243CA7: 85 C0                    -  test eax,eax
"game.exe"+243CA9: 7E 26                    -  jle game.exe+243CD1
"game.exe"+243CAB: 83 C0 FF                 -  add eax,-01
"game.exe"+243CAE: 89 86 9C 00 00 00        -  mov [esi+0000009C],eax
"game.exe"+243CB4: 75 1B                    -  jne game.exe+243CD1
"game.exe"+243CB6: 8B 8D 70 FD FF FF        -  mov ecx,[ebp-00000290]
"game.exe"+243CBC: 8B 01                    -  mov eax,[ecx]
"game.exe"+243CBE: 03 85 74 FD FF FF        -  add eax,[ebp-0000028C]
"game.exe"+243CC4: 50                       -  push eax
}

 

Скрипт на получение макс. кол-ва ярости при первом ударе
//В игре есть ярость. Дается за получение урона или его нанесение (?). Может использоваться для нанесения "топовых" ударов. (аля Ульта только это удар с повышенным уроном или спец прием)
 

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(unlim_rage,game.exe,66 01 87 AC 02 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov ax,100        // Ярость кстати тоже странной была. значения от 0 до 99 было обычным. (т.е. оно имело формат значениях. А вот если значение доходило до отметки 100, превращалось в значение типа 656353 (примерно так). 
code:
  add [edi+000002AC],ax 
  jmp return

unlim_rage:
  jmp newmem
  nop
  nop
return:
registersymbol(unlim_rage)

[DISABLE]

unlim_rage:
  db 66 01 87 AC 02 00 00

unregistersymbol(unlim_rage)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+249DF1

"game.exe"+249DD2: 8B 45 EC              -  mov eax,[ebp-14]
"game.exe"+249DD5: 3B 47 08              -  cmp eax,[edi+08]
"game.exe"+249DD8: 74 D5                 -  je game.exe+249DAF
"game.exe"+249DDA: 8B 70 18              -  mov esi,[eax+18]
"game.exe"+249DDD: C6 45 FC 00           -  mov byte ptr [ebp-04],00
"game.exe"+249DE1: 8D 4D F2              -  lea ecx,[ebp-0E]
"game.exe"+249DE4: E8 17 7A DC FF        -  call game.exe+11800
"game.exe"+249DE9: 8B 45 08              -  mov eax,[ebp+08]
"game.exe"+249DEC: 03 C3                 -  add eax,ebx
"game.exe"+249DEE: 0F AF C6              -  imul eax,esi
// ---------- INJECTING HERE ----------
"game.exe"+249DF1: 66 01 87 AC 02 00 00  -  add [edi+000002AC],ax
// ---------- DONE INJECTING  ----------
"game.exe"+249DF8: 0F B7 87 AA 02 00 00  -  movzx eax,word ptr [edi+000002AA]
"game.exe"+249DFF: 66 39 87 AC 02 00 00  -  cmp [edi+000002AC],ax
"game.exe"+249E06: 7E 07                 -  jle game.exe+249E0F
"game.exe"+249E08: 66 89 87 AC 02 00 00  -  mov [edi+000002AC],ax
"game.exe"+249E0F: C7 45 FC FF FF FF FF  -  mov [ebp-04],FFFFFFFF
"game.exe"+249E16: 8D 4D F1              -  lea ecx,[ebp-0F]
"game.exe"+249E19: E8 E2 79 DC FF        -  call game.exe+11800
"game.exe"+249E1E: 8B 4D F4              -  mov ecx,[ebp-0C]
"game.exe"+249E21: 64 89 0D 00 00 00 00  -  mov fs:[00000000],ecx
"game.exe"+249E28: 59                    -  pop ecx
}

 

Без траты ярости:

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(rage_nofall,game.exe,66 89 87 AC 02 00 00 EB) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov ax,100 //ну... просто "как бы" не тратим ярость при использовании. 
code:
  mov [edi+000002AC],ax
  jmp return

rage_nofall:
  jmp newmem
  nop
  nop
return:
registersymbol(rage_nofall)

[DISABLE]

rage_nofall:
  db 66 89 87 AC 02 00 00

unregistersymbol(rage_nofall)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+243C36

"game.exe"+243C1B: 8B CE                    -  mov ecx,esi
"game.exe"+243C1D: E8 3E 7F E1 FF           -  call game.exe+5BB60
"game.exe"+243C22: 83 F8 01                 -  cmp eax,01
"game.exe"+243C25: 74 18                    -  je game.exe+243C3F
"game.exe"+243C27: 83 F8 03                 -  cmp eax,03
"game.exe"+243C2A: 74 13                    -  je game.exe+243C3F
"game.exe"+243C2C: 83 F8 02                 -  cmp eax,02
"game.exe"+243C2F: 75 70                    -  jne game.exe+243CA1
"game.exe"+243C31: 33 C0                    -  xor eax,eax
"game.exe"+243C33: FF 47 58                 -  inc [edi+58]
// ---------- INJECTING HERE ----------
"game.exe"+243C36: 66 89 87 AC 02 00 00     -  mov [edi+000002AC],ax
// ---------- DONE INJECTING  ----------
"game.exe"+243C3D: EB 62                    -  jmp game.exe+243CA1
"game.exe"+243C3F: 6A 00                    -  push 00
"game.exe"+243C41: 8D 5F 08                 -  lea ebx,[edi+08]
"game.exe"+243C44: 6A 6B                    -  push 6B
"game.exe"+243C46: 8B CB                    -  mov ecx,ebx
"game.exe"+243C48: E8 D3 7D E1 FF           -  call game.exe+5BA20
"game.exe"+243C4D: 01 87 8C 02 00 00        -  add [edi+0000028C],eax
"game.exe"+243C53: 8B CB                    -  mov ecx,ebx
"game.exe"+243C55: 6A 00                    -  push 00
"game.exe"+243C57: 68 98 00 00 00           -  push 00000098
}

 

Скрипт на выдачу большого кол-ва монет при поднятии любой монетки: 
//выпадают часто. так что изи мани

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(add_money,game.exe,01 86 08 03 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov eax,#1000 // Вместо любой поднятой монеты мы получаем +1000 монет(денег).
  jmp code      //Не уверен нужен ли этот jmp тут, так как мы все равно дойдем до "code", но мне так спокойнее. :3 // Ну чисто технически, jmp же как бы и не влияет особо ни на что? Верно же? 
// Законом не запрещено. jmp-лю где хочу.
code:
  add [esi+00000308],eax
  jmp return

add_money:
  jmp newmem
  nop
return:
registersymbol(add_money)

[DISABLE]

add_money:
  db 01 86 08 03 00 00

unregistersymbol(add_money)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+249017

"game.exe"+249000: 64 89 0D 00 00 00 00           -  mov fs:[00000000],ecx
"game.exe"+249007: 59                             -  pop ecx
"game.exe"+249008: 5F                             -  pop edi
"game.exe"+249009: 5E                             -  pop esi
"game.exe"+24900A: 8B E5                          -  mov esp,ebp
"game.exe"+24900C: 5D                             -  pop ebp
"game.exe"+24900D: C2 08 00                       -  ret 0008
"game.exe"+249010: 8B 44 24 04                    -  mov eax,[esp+04]
"game.exe"+249014: 56                             -  push esi
"game.exe"+249015: 8B F1                          -  mov esi,ecx
// ---------- INJECTING HERE ----------
"game.exe"+249017: 01 86 08 03 00 00              -  add [esi+00000308],eax
// ---------- DONE INJECTING  ----------
"game.exe"+24901D: 81 BE 08 03 00 00 3F 42 0F 00  -  cmp [esi+00000308],000F423F
"game.exe"+249027: 7E 0A                          -  jle game.exe+249033
"game.exe"+249029: C7 86 08 03 00 00 3F 42 0F 00  -  mov [esi+00000308],000F423F
"game.exe"+249033: 81 BE 08 03 00 00 0F 27 00 00  -  cmp [esi+00000308],0000270F
"game.exe"+24903D: 7E 31                          -  jle game.exe+249070
"game.exe"+24903F: 8B 4E 18                       -  mov ecx,[esi+18]
"game.exe"+249042: 6A 00                          -  push 00
"game.exe"+249044: 68 4C D7 FE 00                 -  push game.exe+D8D74C
"game.exe"+249049: 8B 89 D4 0F 00 00              -  mov ecx,[ecx+00000FD4]
"game.exe"+24904F: E8 7C B1 DE FF                 -  call game.exe+341D0
}

 

Без траты денег в магазе:
//В этой игре есть магаз (ОГА) где же деньги еще тратить? Ну так это. Изи ловим халяву и берем все за 0 рублей золотых. Вот бы мне такой скрипт в реале :c
А да кстати, подскажите как его апгрейднуть до уровень БОГ @Xipho ?
Сейчас, если вещь стоит 100 золотых, а у тебя в кармане лаве меньше 100-ки, ты хрен его купишь. Даже если включен скрипт.
Подскажите как сделать так, что бы даже если у тебя в кармане 0 золотых, ты мог купить чет в магазе. Буду благодарен.

 

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(infinity_money,game.exe,29 87 08 03 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov eax,#0  // ничего нового. Хотя, в идеале, если влепить -100, как пример,то - на - дает +, а значит можно набить мани... 
//но зачем если есть первый скрипт? :c ... тогда в целях оптимизации их можно слить воедино? Интересный вопрос.
  jmp code
code:
  sub [edi+00000308],eax
  jmp return

infinity_money:
  jmp newmem
  nop
return:
registersymbol(infinity_money)

[DISABLE]

infinity_money:
  db 29 87 08 03 00 00

unregistersymbol(infinity_money)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+247F26

"game.exe"+247F04: 8D 45 D8                       -  lea eax,[ebp-28]
"game.exe"+247F07: 8B 4F 18                       -  mov ecx,[edi+18]
"game.exe"+247F0A: 6A 00                          -  push 00
"game.exe"+247F0C: 6A 00                          -  push 00
"game.exe"+247F0E: 50                             -  push eax
"game.exe"+247F0F: E8 9C CF DF FF                 -  call game.exe+44EB0
"game.exe"+247F14: C6 45 FC 01                    -  mov byte ptr [ebp-04],01
"game.exe"+247F18: 8D 4D D8                       -  lea ecx,[ebp-28]
"game.exe"+247F1B: E8 B0 90 DC FF                 -  call game.exe+10FD0
"game.exe"+247F20: 8B 85 28 FB FF FF              -  mov eax,[ebp-000004D8]
// ---------- INJECTING HERE ----------
"game.exe"+247F26: 29 87 08 03 00 00              -  sub [edi+00000308],eax
// ---------- DONE INJECTING  ----------
"game.exe"+247F2C: 79 0A                          -  jns game.exe+247F38
"game.exe"+247F2E: C7 87 08 03 00 00 00 00 00 00  -  mov [edi+00000308],00000000
"game.exe"+247F38: F7 D8                          -  neg eax
"game.exe"+247F3A: 50                             -  push eax
"game.exe"+247F3B: 8D 45 C0                       -  lea eax,[ebp-40]
"game.exe"+247F3E: 50                             -  push eax
"game.exe"+247F3F: E8 3C EF E0 FF                 -  call game.exe+56E80
"game.exe"+247F44: C6 45 FC 21                    -  mov byte ptr [ebp-04],21
"game.exe"+247F48: 0F 57 C0                       -  xorps xmm0,xmm0
"game.exe"+247F4B: F2 0F 11 04 24                 -  movsd [esp],xmm0
}

 

 

Без траты золота при стрельбе из посоха:

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(money_spend_posoh,game.exe,FF 8E 08 03 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  add [esi+00000308],#2 // Не ну этот скрипт я бы точно слил в одно... наверное. Кхм, если кратко, есть посох что стреляет золотом с увеличенным дамагом (без золота дамаг меньше) фича веселая, но... дорогая. А так, мы не только не теряем золото, а еще и получаем +1 золота. (ну можно было убрать dec.. или заменить его на inc но ... оптимизация для лохов! (говорит человек который просит его код оптимизировать...)
code:
  dec [esi+00000308]
  jmp return

money_spend_posoh:
  jmp newmem
  nop
return:
registersymbol(money_spend_posoh)

[DISABLE]

money_spend_posoh:
  db FF 8E 08 03 00 00

unregistersymbol(money_spend_posoh)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+256750

"game.exe"+256728: E8 33 45 E0 FF                 -  call game.exe+5AC60
"game.exe"+25672D: C7 40 34 00 00 00 00           -  mov [eax+34],00000000
"game.exe"+256734: C6 45 FC 01                    -  mov byte ptr [ebp-04],01
"game.exe"+256738: 8D 4D D2                       -  lea ecx,[ebp-2E]
"game.exe"+25673B: E8 C0 B0 DB FF                 -  call game.exe+11800
"game.exe"+256740: 8B 75 E4                       -  mov esi,[ebp-1C]
"game.exe"+256743: 8B 4D B4                       -  mov ecx,[ebp-4C]
"game.exe"+256746: 66 8B 46 6C                    -  mov ax,[esi+6C]
"game.exe"+25674A: 66 3B 41 40                    -  cmp ax,[ecx+40]
"game.exe"+25674E: 75 12                          -  jne game.exe+256762
// ---------- INJECTING HERE ----------
"game.exe"+256750: FF 8E 08 03 00 00              -  dec [esi+00000308]
// ---------- DONE INJECTING  ----------
"game.exe"+256756: 56                             -  push esi
"game.exe"+256757: E8 74 B8 E5 FF                 -  call game.exe+B1FD0
"game.exe"+25675C: EB 04                          -  jmp game.exe+256762
"game.exe"+25675E: C6 45 F2 00                    -  mov byte ptr [ebp-0E],00
"game.exe"+256762: 6A 00                          -  push 00
"game.exe"+256764: 8B CE                          -  mov ecx,esi
"game.exe"+256766: E8 85 16 00 00                 -  call game.exe+257DF0
"game.exe"+25676B: 84 C0                          -  test al,al
"game.exe"+25676D: 74 06                          -  je game.exe+256775
"game.exe"+25676F: 8B 07                          -  mov eax,[edi]
}

 

Скрипт на урон добивания +1000:
//Урон добивания, когда ты ударил врага,  и он упал на пол. В этот момент ты можего попытаться его добить (обычно, добивание больнее бьет чем обычный удар.)

И этот удар/урон идет отдельной инструкцией.

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(down_attack,game.exe,8B B7 A0 02 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov [edi+000002A0],#1000 //Да, урон от добивания идет отдельным навыком/скиллом и пихать в OHK я чет не стал. (не спрашивайте почему.) Вы главное покажите, на примере одного скрипта, как их можно сливать в одно, а я там если что пойму. А если нет - что мешает спросить еще раз? :3 (БАН мешает :c)
  jmp code
code:
  mov esi,[edi+000002A0]
  jmp return

down_attack:
  jmp newmem
  nop
return:
registersymbol(down_attack)

[DISABLE]

down_attack:
  db 8B B7 A0 02 00 00

unregistersymbol(down_attack)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+25B8CE

"game.exe"+25B8A2: 8D 45 F4              -  lea eax,[ebp-0C]
"game.exe"+25B8A5: 64 A3 00 00 00 00     -  mov fs:[00000000],eax
"game.exe"+25B8AB: 8B F9                 -  mov edi,ecx
"game.exe"+25B8AD: 89 7D B0              -  mov [ebp-50],edi
"game.exe"+25B8B0: 68 D8 6B 0C 02        -  push game.exe+DA6BD8
"game.exe"+25B8B5: 68 50 03 00 00        -  push 00000350
"game.exe"+25B8BA: 68 CC 66 0C 02        -  push game.exe+DA66CC
"game.exe"+25B8BF: 8D 4D BE              -  lea ecx,[ebp-42]
"game.exe"+25B8C2: E8 09 3E DB FF        -  call game.exe+F6D0
"game.exe"+25B8C7: C7 45 FC 00 00 00 00  -  mov [ebp-04],00000000
// ---------- INJECTING HERE ----------
"game.exe"+25B8CE: 8B B7 A0 02 00 00     -  mov esi,[edi+000002A0]
// ---------- DONE INJECTING  ----------
"game.exe"+25B8D4: 85 F6                 -  test esi,esi
"game.exe"+25B8D6: 0F 8E 0B 02 00 00     -  jng game.exe+25BAE7
"game.exe"+25B8DC: 6A 25                 -  push 25
"game.exe"+25B8DE: C7 45 E8 00 00 00 00  -  mov [ebp-18],00000000
"game.exe"+25B8E5: 8D 4D D8              -  lea ecx,[ebp-28]
"game.exe"+25B8E8: C7 45 EC 00 00 00 00  -  mov [ebp-14],00000000
"game.exe"+25B8EF: 68 F0 6B 0C 02        -  push game.exe+DA6BF0
"game.exe"+25B8F4: C7 45 EC 0F 00 00 00  -  mov [ebp-14],0000000F
"game.exe"+25B8FB: C7 45 E8 00 00 00 00  -  mov [ebp-18],00000000
"game.exe"+25B902: C6 45 D8 00           -  mov byte ptr [ebp-28],00
}

 


Зелье добивания == 1000 урона:

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(poison_down_attack_max,game.exe,01 81 A0 02 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov eax,#1000 // просто зелье дает +1000 к урону от добивания. Отдельно потому-что хотел вывести это все в отдельную группу "зелья".  
                //Но это уже совсем другая история. Может быть стоит все зелья определенной категории лепить в один скрипт? (скажем, зелья ярости в скрипт с яростью и тд)
  jmp code
code:
  add [ecx+000002A0],eax
  jmp return

poison_down_attack_max:
  jmp newmem
  nop
return:
registersymbol(poison_down_attack_max)

[DISABLE]

poison_down_attack_max:
  db 01 81 A0 02 00 00

unregistersymbol(poison_down_attack_max)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+4FC12D

"game.exe"+4FC108: 68 4A 07 00 00                 -  push 0000074A
"game.exe"+4FC10D: 68 80 14 0D 02                 -  push game.exe+DB1480
"game.exe"+4FC112: 8D 4D F3                       -  lea ecx,[ebp-0D]
"game.exe"+4FC115: E8 B6 35 B1 FF                 -  call game.exe+F6D0
"game.exe"+4FC11A: C7 45 FC 00 00 00 00           -  mov [ebp-04],00000000
"game.exe"+4FC121: 8B 4D 0C                       -  mov ecx,[ebp+0C]
"game.exe"+4FC124: 85 C9                          -  test ecx,ecx
"game.exe"+4FC126: 74 1E                          -  je game.exe+4FC146
"game.exe"+4FC128: 8B 45 14                       -  mov eax,[ebp+14]
"game.exe"+4FC12B: 8B 00                          -  mov eax,[eax]
// ---------- INJECTING HERE ----------
"game.exe"+4FC12D: 01 81 A0 02 00 00              -  add [ecx+000002A0],eax
// ---------- DONE INJECTING  ----------
"game.exe"+4FC133: 83 B9 A0 02 00 00 01           -  cmp dword ptr [ecx+000002A0],01
"game.exe"+4FC13A: 7D 0A                          -  jnl game.exe+4FC146
"game.exe"+4FC13C: C7 81 A0 02 00 00 01 00 00 00  -  mov [ecx+000002A0],00000001
"game.exe"+4FC146: C7 45 FC FF FF FF FF           -  mov [ebp-04],FFFFFFFF
"game.exe"+4FC14D: 8D 4D F3                       -  lea ecx,[ebp-0D]
"game.exe"+4FC150: E8 AB 56 B1 FF                 -  call game.exe+11800
"game.exe"+4FC155: 33 C0                          -  xor eax,eax
"game.exe"+4FC157: 8B 4D F4                       -  mov ecx,[ebp-0C]
"game.exe"+4FC15A: 64 89 0D 00 00 00 00           -  mov fs:[00000000],ecx
"game.exe"+4FC161: 59                             -  pop ecx
}

 

 

Убить босса (звучит как игра... или как фильм "Убить Боба") OHK BOSS:
 

Спойлер

{ Game   : game.exe
  Version: 
  Date   : 2018-07-24
  Author : YUZIA

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(boos_kill,game.exe,66 29 B7 A6 02 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  mov si,#1000         // Может быть я бы и знал что такое si. Но я не учил С/С++, сорян пацаны :c
  jmp code
code:
  sub [edi+000002A6],si
  jmp return

boos_kill:
  jmp newmem
  nop
  nop
return:
registersymbol(boos_kill)

[DISABLE]

boos_kill:
  db 66 29 B7 A6 02 00 00

unregistersymbol(boos_kill)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "game.exe"+2BA6C6

"game.exe"+2BA69E: 6A 00                          -  push 00
"game.exe"+2BA6A0: 68 B0 D3 EF 00                 -  push game.exe+D8D3B0
"game.exe"+2BA6A5: E8 26 9B D7 FF                 -  call game.exe+341D0
"game.exe"+2BA6AA: 84 C0                          -  test al,al
"game.exe"+2BA6AC: 75 18                          -  jne game.exe+2BA6C6
"game.exe"+2BA6AE: 8B 4F 18                       -  mov ecx,[edi+18]
"game.exe"+2BA6B1: 68 2C 01 00 00                 -  push 0000012C
"game.exe"+2BA6B6: 68 B0 D3 EF 00                 -  push game.exe+D8D3B0
"game.exe"+2BA6BB: 8B 89 D4 0F 00 00              -  mov ecx,[ecx+00000FD4]
"game.exe"+2BA6C1: E8 8A 8D D7 FF                 -  call game.exe+33450
// ---------- INJECTING HERE ----------
"game.exe"+2BA6C6: 66 29 B7 A6 02 00 00           -  sub [edi+000002A6],si
// ---------- DONE INJECTING  ----------
"game.exe"+2BA6CD: 8B CB                          -  mov ecx,ebx
"game.exe"+2BA6CF: 68 0F 27 00 00                 -  push 0000270F
"game.exe"+2BA6D4: FF 75 CC                       -  push [ebp-34]
"game.exe"+2BA6D7: FF 75 C8                       -  push [ebp-38]
"game.exe"+2BA6DA: FF 75 10                       -  push [ebp+10]
"game.exe"+2BA6DD: 56                             -  push esi
"game.exe"+2BA6DE: 57                             -  push edi
"game.exe"+2BA6DF: E8 6C 1B E2 FF                 -  call game.exe+DC250
"game.exe"+2BA6E4: 8B 4D C4                       -  mov ecx,[ebp-3C]
"game.exe"+2BA6E7: 8A 45 D6                       -  mov al,[ebp-2A]
}

 

 

Вроде бы вот и все скрипты что я успел сделать за некоторое время.

Думаю в будущем сделать еще более-менее улучшенный GOD. Там есть прям такой что тебя не дамажит вовсе. (Ибо тот что сейчас просто урон ставит на 0, а есть еще тот что тебя не могут коснуться (не коллизия, вроде как)

Ну, вроде как все. Всем спасибо за внимание. Если что - пишите свои мнения об скриптах, возможные идеи и способы оптимизации или их реализации (хотя... там ничего такого оригинального нет, просто mov, add, dec, проверка свой чужой (cmp) и все (самые простые инструкции). А вот как доберусь до float с их fld, fstp и другими... вот там будет HARD.

Планы на будущее:

Спойлер


В планах у меня еще стоит сделать парочку скриптов для зелий (там скорее всего будет отдельная инструкция под каждый вид зелья... так что не знаю как это я все должен буду ловить... 
Парочку скриптов для урона (а именно там есть стихийные уроны (отравление, окаменение, заморозка, и тд)
Сделать (может быть) телепорт hack. 
Сделать speed hack. 
Сделать InvisHack,
Выдачу (или хотя бы не потерю) предметов
Сломать инвентарь (на кол-во слотов)
и другое (Размахнулся я конечно знатно. Надо еще все это научиться делать :D)
Ну и под конец, если все получится, релизнуть свое "творение" в массы. Продавать по 500 рублей.

 

Небольшое дополнение:

  • Как сделать шаблон для "подставляемого" значения?
    скажем, есть код:
    add [eax+1337],#100
    Вместо "#100", я хочу поставить "#{value}",  а само значение я хочу прописывать в самой таблице (например, при активации скрипта, откроется подменю, в котором буде указываться число)
    И я например могу решить, какое значение я хочу подставить.
     

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

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

4 часа назад, Yuzia сказал:

Доброе утро день всем.

@Yuzia, инфы (скриптов, видео-уроков) полон форум по всем твоим вопросам.

Написал тебе скрипт GodMode + OHK.

Посмотри как реализовано, А дальше сам. Смотри видео, скрипты и т.д.

Скрипт в табличке.

For_Yuzia.CT

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

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

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

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