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

Взлом Diablo II Lord of Destruction


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

3 минуты назад, DeadCraft сказал:

Ну я не на столько деревянный в этом плане =) 

ну не знаю. Сейчас загрузил игру по новой - у меня всё работает. Короче - дождись видео, поймёшь где ошибаешься.

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

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

Версия игры я так понимаю 1.13c ?

Разобрались по скайпу. У DeadCraft 1/13D, у меня скорее всего  1.13c .

И как оказалось для разных героев тоже iD героя меняется, так что в следующем видео добавлю ID всех героев и напишу скрипт убийство - уровень, но только для версии  1.13c. А для версии 1.13d можно будет дописать по Скайпу.

 

ЗЫ: Если кто будет тестить и у него версия отличная от моей, то пока замените везде в скрипте, для токого же героя как у меня на видео, 2 на 3:

cmp bx,6280      // cmp bx,6380      для версии 1.13d

 

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

Эту серию я посвящаю своему первому учителю - keng.

Окончательный скрипт:

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

{ Game   : Game.exe
  Version: 
  Date   : 2017-04-22
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
{$LUA}
getAddressList().getMemoryRecordByID(77).Color=0x0008000
PlaySound(findTableFile([[Activate]]))
{$ASM}
aobscanmodule(GodMod,D2Common.dll,85 FF 89 78 04) // should be unique
aobscanmodule(GodMod1,D2Common.dll,01 68 04 75 0A)
aobscanmodule(GodMod2,D2Common.dll,10 00 8B 4C 24 1C 85 C9)
alloc(newmem,$4000)
label(newmem1)
label(newmem2)
label(code)
label(code1)
label(code2)
label(return)
label(return1)
label(return2)
label(GodMod_Hero)
label(GodMod_Hero2)
label(Mana)
label(Mana1)
label(Mana2)
label(Stamina)
label(Stamina1)
label(Stamina2)
label(Experience)
label(Experience2)
label(Cycle_Exp)
label(Cycle_Exp2)
label(Gold)
label(Gold1)
label(Gold2)
label(Cycle)
label(Cycle1)
label(Cycle2)
label(GodMod_Hero_ENABLE)
registersymbol(GodMod_Hero_ENABLE)
label(Mana_ENABLE)
registersymbol(Mana_ENABLE)
label(Stamina_ENABLE)
registersymbol(Stamina_ENABLE)
label(Experience_ENABLE)
registersymbol(Experience_ENABLE)
label(Gold_ENABLE)
registersymbol(Gold_ENABLE)
registersymbol(GodMod)
registersymbol(GodMod1)
registersymbol(GodMod2)

newmem:
// Блок проверки ГГ ли это
  cmp bx,6280                 // Для v.1.13c
  je @f
  cmp bx,6380                 // Для v.1.13d
  je @f
  jmp code

// Блок проверки какая характеристика ГГ
@@:
  cmp edx,00060000            // ID HP Hero.
  je GodMod_Hero
  cmp edx,00080000            // ID маны.
  je Mana
  cmp edx,000A0000            // ID выносливости.
  je Stamina
  cmp edx,000D0000            // ID опыта.
  je Experience
  cmp edx,000E0000            // ID денег.
  je Gold
  jmp code

// Блок работы с HP Hero
GodMod_Hero:
  cmp [GodMod_Hero_ENABLE],1  // Проверяем активировал ли пользователь скрипт.
  jne code
  mov edi,[eax+0C]            // Загружаем Max значение HP Hero.
  jmp code

// Блок работы с маной
Mana:
  cmp [Mana_ENABLE],1         // Проверяем активировал ли пользователь скрипт.
  jne code
  mov edi,[eax+0C]            // Загружаем Max значение маны.
  jmp code

// Блок работы с выносливостью
Stamina:
  cmp [Stamina_ENABLE],1      // Проверяем активировал ли пользователь скрипт.
  jne code
  mov edi,[eax+0C]            // Загружаем Max значение выносливости.
  jmp code

// Блок работы с опытом
Experience:
  cmp [Experience_ENABLE],1   // Проверяем активировал ли пользователь скрипт.
  jne code
  push ecx
  mov ecx,eax

Cycle_Exp:                    // Для поиска сколько Max опыта до следующего уровня.
  add ecx,8
  cmp [ecx],001E0000          // Проверяем ID Max опыта ГГ это.
  jne Cycle_Exp               // Если нет, то продолжаем цикл.
  cmp edi,[ecx+04]            // Если да, то сравниваем Max опыт с Текущим опытом.
  jae @f                      // Если больше и равно, то ничего не делаем.
  mov edi,[ecx+04]            // Если меньше записываем в текущий опыт Max.

@@:
  pop ecx
  jmp code

// Блок работы с деньгами
Gold:
  cmp [Gold_ENABLE],1         // Проверяем активировал ли пользователь скрипт.
  jne code
  push ecx
  mov ecx,eax

Cycle:                        // Для поиска сколько Max денег может быть.
  sub ecx,8
  cmp [ecx],000C0000          // Проверяем ID уровня ГГ это.
  jne Cycle                   // Если нет, то продолжаем цикл.
  mov ecx,[ecx+04]            // Если да, то загружаем уровень
  mov edi,#10000              // Загружаем Max ко-во денег для 1 уровня ГГ.
  imul edi,ecx                // Умножаем на текущий уровень ГГ.
  pop ecx
  jmp code

code:
  test edi,edi
  mov [eax+04],edi
  jmp return

newmem1:
// Блок проверки ГГ ли это
  cmp bx,6280                 // Для v.1.13c
  je @f
  cmp bx,6380                 // Для v.1.13d
  je @f
  jmp code1

// Блок проверки какая характеристика ГГ
@@:
  cmp edx,00080000            // ID маны.
  je Mana1
  cmp edx,000A0000            // ID выносливости.
  je Stamina1
  cmp edx,000E0000            // ID денег.
  je Gold1
  jmp code1

// Блок работы с маной
Mana1:
  cmp [Mana_ENABLE],1         // Проверяем активировал ли пользователь скрипт.
  jne code1
  mov ebp,[eax+0C]            // Загружаем Max значение маны.
  mov [eax+04],ebp            // в адрес текущей выносливости.
  jne D2Common.Ordinal11158+52
  jmp return1

// Блок работы с выносливостью
Stamina1:
  cmp [Stamina_ENABLE],1      // Проверяем активировал ли пользователь скрипт.
  jne code1
  mov ebp,[eax+0C]            // Загружаем Max значение выносливости.
  mov [eax+04],ebp            // в адрес текущей выносливости.
  jne D2Common.Ordinal11158+52
  jmp return1

// Блок работы с деньгами
Gold1:
  cmp [Gold_ENABLE],1         // Проверяем активировал ли пользователь скрипт.
  jne code1
  push ecx
  mov ecx,eax

Cycle1:                       // Для поиска сколько Max денег может быть.
  sub ecx,8
  cmp [ecx],000C0000          // Проверяем ID уровня ГГ это.
  jne Cycle1                  // Если нет, то продолжаем цикл.
  mov ecx,[ecx+04]            // Если да, то загружаем уровень
  mov ebp,#10000              // Загружаем Max ко-во денег для 1 уровня ГГ.
  imul ebp,ecx                // Умножаем на текущий уровень ГГ.
  pop ecx
  mov [eax+04],ebp
  jne D2Common.Ordinal11158+52
  jmp return1

code1:
  add [eax+04],ebp
  jne D2Common.Ordinal11158+52
  jmp return1

newmem2:
   mov ecx,[esp+1C]
// Блок проверки ГГ ли это
  cmp bx,6280                 // Для v.1.13c
  je @f
  cmp bx,6380                 // Для v.1.13d
  je @f
  jmp code2

// Блок проверки какая характеристика ГГ
@@:
  cmp edx,00060000            // ID HP Hero.
  je GodMod_Hero2
  cmp edx,00080000            // ID маны.
  je Mana2
  cmp edx,000A0000            // ID выносливости.
  je Stamina2
  cmp edx,000D0000            // ID опыта.
  je Experience2
  cmp edx,000E0000            // ID денег.
  je Gold2
  jmp code2

// Блок работы с HP Hero
GodMod_Hero2:
  cmp [GodMod_Hero_ENABLE],1  // Проверяем активировал ли пользователь скрипт.
  jne code2
  mov ecx,[eax+0C]            // Загружаем Max значение HP Hero.
  jmp code2

// Блок работы с маной
Mana2:
  cmp [Mana_ENABLE],1         // Проверяем активировал ли пользователь скрипт.
  jne code2
  mov ecx,[eax+0C]            // Загружаем Max значение маны.
  jmp code2

// Блок работы с выносливостью
Stamina2:
  cmp [Stamina_ENABLE],1      // Проверяем активировал ли пользователь скрипт.
  jne code2
  mov ecx,[eax+0C]            // Загружаем Max значение выносливости.
  jmp code2

// Блок работы с опытом
Experience2:
  cmp [Experience_ENABLE],1   // Проверяем активировал ли пользователь скрипт.
  jne code2
  push edi
  mov edi,eax

Cycle_Exp2:                   // Для поиска сколько Max опыта до следующего уровня.
  add edi,8
  cmp [edi],001E0000          // Проверяем ID Max опыта ГГ это.
  jne Cycle_Exp2              // Если нет, то продолжаем цикл.
  cmp ecx,[edi+04]            // Если да, то сравниваем Max опыт с Текущим опытом.
  jae @f                      // Если больше и равно, то ничего не делаем.
  mov ecx,[edi+04]            // Если меньше записываем в текущий опыт Max.

@@:
  pop edi
  jmp code2

// Блок работы с деньгами
Gold2:
  cmp [Gold_ENABLE],1         // Проверяем активировал ли пользователь скрипт.
  jne code2
  push edi
  mov edi,eax

Cycle2:                       // Для поиска сколько Max денег может быть.
  sub edi,8
  cmp [edi],000C0000          // Проверяем ID уровня ГГ это.
  jne Cycle2                  // Если нет, то продолжаем цикл.
  mov edi,[edi+04]            // Если да, то загружаем уровень
  mov ecx,#10000              // Загружаем Max ко-во денег для 1 уровня ГГ.
  imul ecx,edi                // Умножаем на текущий уровень ГГ.
  pop edi
  jmp code2

code2:
  test ecx,ecx
  jmp return2

GodMod_Hero_ENABLE:
  dd 0
Mana_ENABLE:
  dd 0
Stamina_ENABLE:
  dd 0
Experience_ENABLE:
  dd 0
Gold_ENABLE:
  dd 0

GodMod:
  jmp newmem
return:

GodMod1:
  jmp newmem1
return1:

GodMod2+02:
  jmp newmem2
  db 90
return2:

[DISABLE]
{$LUA}
getAddressList().getMemoryRecordByID(77).Color=0x00000ff
PlaySound(findTableFile([[Deactivate]]))
{$ASM}
GodMod:
  db 85 FF 89 78 04
GodMod1:
  db 01 68 04 75 0A
GodMod2+02:
  db 8B 4C 24 1C 85 C9

unregistersymbol(GodMod_Hero_ENABLE)
unregistersymbol(Mana_ENABLE)
unregistersymbol(Stamina_ENABLE)
unregistersymbol(Experience_ENABLE)
unregistersymbol(Gold_ENABLE)
unregistersymbol(GodMod)
unregistersymbol(GodMod1)
unregistersymbol(GodMod2)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "D2Common.dll"+58382

"D2Common.dll"+58367: 8D 04 C1              -  lea eax,[ecx+eax*8]
"D2Common.dll"+5836A: 85 C0                 -  test eax,eax
"D2Common.dll"+5836C: 75 0A                 -  jne D2Common.dll+58378
"D2Common.dll"+5836E: 8B 13                 -  mov edx,[ebx]
"D2Common.dll"+58370: 52                    -  push edx
"D2Common.dll"+58371: 8B C7                 -  mov eax,edi
"D2Common.dll"+58373: E8 38 FC FF FF        -  call D2Common.dll+57FB0
"D2Common.dll"+58378: 8B 68 04              -  mov ebp,[eax+04]
"D2Common.dll"+5837B: 8B 4C 24 14           -  mov ecx,[esp+14]
"D2Common.dll"+5837F: 8D 3C 29              -  lea edi,[ecx+ebp]
// ---------- INJECTING HERE ----------
"D2Common.dll"+58382: 85 FF                 -  test edi,edi
"D2Common.dll"+58384: 89 78 04              -  mov [eax+04],edi
// ---------- DONE INJECTING  ----------
"D2Common.dll"+58387: 7E 12                 -  jle D2Common.dll+5839B
"D2Common.dll"+58389: 8B 54 24 18           -  mov edx,[esp+18]
"D2Common.dll"+5838D: 8A 4A 53              -  mov cl,[edx+53]
"D2Common.dll"+58390: 84 C9                 -  test cl,cl
"D2Common.dll"+58392: 74 07                 -  je D2Common.dll+5839B
"D2Common.dll"+58394: 81 4B 10 00 00 00 20  -  or [ebx+10],20000000
"D2Common.dll"+5839B: 8B 48 04              -  mov ecx,[eax+04]
"D2Common.dll"+5839E: 85 C9                 -  test ecx,ecx
"D2Common.dll"+583A0: 75 15                 -  jne D2Common.dll+583B7
"D2Common.dll"+583A2: 8B 4C 24 18           -  mov ecx,[esp+18]
}
{
// ORIGINAL CODE - INJECTION POINT: "D2Common.dll"+59CE3

"D2Common.dll"+59CCC: 85 C0              -  test eax,eax
"D2Common.dll"+59CCE: 7C 09              -  jl D2Common.dll+59CD9
"D2Common.dll"+59CD0: 8B 0E              -  mov ecx,[esi]
"D2Common.dll"+59CD2: 8D 04 C1           -  lea eax,[ecx+eax*8]
"D2Common.dll"+59CD5: 85 C0              -  test eax,eax
"D2Common.dll"+59CD7: 75 0A              -  jne D2Common.dll+59CE3
"D2Common.dll"+59CD9: 8B 13              -  mov edx,[ebx]
"D2Common.dll"+59CDB: 52                 -  push edx
"D2Common.dll"+59CDC: 8B C7              -  mov eax,edi
"D2Common.dll"+59CDE: E8 CD E2 FF FF     -  call D2Common.dll+57FB0
// ---------- INJECTING HERE ----------
"D2Common.dll"+59CE3: 01 68 04           -  add [eax+04],ebp
"D2Common.dll"+59CE6: 75 0A              -  jne D2Common.dll+59CF2
// ---------- DONE INJECTING  ----------
"D2Common.dll"+59CE8: 8B 0B              -  mov ecx,[ebx]
"D2Common.dll"+59CEA: 51                 -  push ecx
"D2Common.dll"+59CEB: 8B D0              -  mov edx,eax
"D2Common.dll"+59CED: E8 1E DE FF FF     -  call D2Common.dll+57B10
"D2Common.dll"+59CF2: 6A 00              -  push 00
"D2Common.dll"+59CF4: 55                 -  push ebp
"D2Common.dll"+59CF5: 8B C3              -  mov eax,ebx
"D2Common.dll"+59CF7: E8 E4 FB FF FF     -  call D2Common.dll+598E0
"D2Common.dll"+59CFC: 8B 43 10           -  mov eax,[ebx+10]
"D2Common.dll"+59CFF: 85 C0              -  test eax,eax
}
{
// ORIGINAL CODE - INJECTION POINT: "D2Common.dll"+59C55

"D2Common.dll"+59C43: 55              -  push ebp
"D2Common.dll"+59C44: 8B 6C 24 1C     -  mov ebp,[esp+1C]
"D2Common.dll"+59C48: 2B E9           -  sub ebp,ecx
"D2Common.dll"+59C4A: 75 09           -  jne D2Common.dll+59C55
"D2Common.dll"+59C4C: 5D              -  pop ebp
"D2Common.dll"+59C4D: 5F              -  pop edi
"D2Common.dll"+59C4E: 5E              -  pop esi
"D2Common.dll"+59C4F: 33 C0           -  xor eax,eax
"D2Common.dll"+59C51: 5B              -  pop ebx
"D2Common.dll"+59C52: C2 10 00        -  ret 0010
// ---------- INJECTING HERE ----------
"D2Common.dll"+59C55: 8B 4C 24 1C     -  mov ecx,[esp+1C]
"D2Common.dll"+59C59: 85 C9           -  test ecx,ecx
// ---------- DONE INJECTING  ----------
"D2Common.dll"+59C5B: 75 0C           -  jne D2Common.dll+59C69
"D2Common.dll"+59C5D: 8B 0B           -  mov ecx,[ebx]
"D2Common.dll"+59C5F: 51              -  push ecx
"D2Common.dll"+59C60: 8B D0           -  mov edx,eax
"D2Common.dll"+59C62: E8 A9 DE FF FF  -  call D2Common.dll+57B10
"D2Common.dll"+59C67: EB 03           -  jmp D2Common.dll+59C6C
"D2Common.dll"+59C69: 89 48 04        -  mov [eax+04],ecx
"D2Common.dll"+59C6C: 6A 00           -  push 00
"D2Common.dll"+59C6E: 55              -  push ebp
"D2Common.dll"+59C6F: 8B C3           -  mov eax,ebx
}

 

И один из опциональных скриптов (остальные индентичны):

"God Mod Numpad 1":

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

[ENABLE]
{$LUA}
getAddressList().getMemoryRecordByID(81).Color=0x0008000
PlaySound(findTableFile([[Activate]]))
{$ASM}
GodMod_Hero_ENABLE:
  dd 1
 
[DISABLE]
{$LUA}
getAddressList().getMemoryRecordByID(81).Color=0x00000ff
PlaySound(findTableFile([[Deactivate]]))
{$ASM}
GodMod_Hero_ENABLE:
  dd 0

 

Инфа из блокнота (может кому-нибудь будет нужна):

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

Diablo II - Lord of Destruction

Денюжки (ID - EDX=000E0000), Выносливость (ID - EDX=000A0000)
НР (ID - EDX=00060000), ЕХР (ID - EDX=000D0000):

Рабочий адрес:
03B12A5C
6FDA8424 - 8B 40 04  - mov eax,[eax+04] // Читающая
6FDA8378 - 8B 68 04  - mov ebp,[eax+04]
6FDA8384 - 89 78 04  - mov [eax+04],edi // Всегда, на запись
6FDA839B - 8B 48 04  - mov ecx,[eax+04]

6FDA837F - 8D 3C 29   - lea edi,[ecx+ebp]
6FDA8382 - 85 FF  - test edi,edi
6FDA8384 - 89 78 04  - mov [eax+04],edi <<
6FDA8387 - 7E 12 - jle D2Common.Ordinal11140+14B
6FDA8389 - 8B 54 24 18  - mov edx,[esp+18]

EAX=03B12A58
EBX=05EE6280
ECX=FFFFFFFF
EDX=000E0000
ESI=05EE62C8
EDI=00000013
ESP=0019F50C
EBP=00000014
EIP=6FDA8387

Проверяющий адрес:
03B1305C
6FDA9C40 - 8B 48 04  - mov ecx,[eax+04]
6FDA9C69 - 89 48 04  - mov [eax+04],ecx // При выкидывании, выносливость при восстановлении, НР и ЕХР
6FDA9CE3 - 01 68 04  - add [eax+04],ebp // При продаже/покупке, выносливость при трате
6FDA7D64 - 8B 79 04  - mov edi,[ecx+04]

6FDA9C62 - E8 A9DEFFFF - call D2Common.Ordinal10219+A0
6FDA9C67 - EB 03 - jmp D2Common.Ordinal10818+7C
6FDA9C69 - 89 48 04  - mov [eax+04],ecx << //Деньги, выносливость, НР, EXP
6FDA9C6C - 6A 00 - push 00
6FDA9C6E - 55 - push ebp

EAX=03B13058
EBX=05EE6280
ECX=00000001
EDX=000E0000
ESI=05EE62A4
EDI=000E0000
ESP=0019F544
EBP=FFFFFFFF

6FDA9CDC - 8B C7  - mov eax,edi
6FDA9CDE - E8 CDE2FFFF - call D2Common.Ordinal10429+120
6FDA9CE3 - 01 68 04  - add [eax+04],ebp << //Деньги, выносливость
6FDA9CE6 - 75 0A - jne D2Common.Ordinal11158+52
6FDA9CE8 - 8B 0B  - mov ecx,[ebx]

EAX=03B13058
EBX=05EE6280
ECX=03B13000
EDX=000E0000
ESI=05EE62A4
EDI=000E0000
ESP=0019F538
EBP=00000001
EIP=6FDA9CE6


 

Видео:

 

 

И табличка:

For_lizzmack.CT

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

ЗЫ; на версии  1.13d, фильтр по BX, меняется и по-моему меняется ещё что-то, только что посмотрели по Скайпу, Так что для 1.13d скрипт нужно дорабатывать. 

Если поставить временный BX (на одну загрузку игры), то работают стабильно 3 опции (Мана, выносливость и GodMod), Золото работает плохо, а опыт приводит к вылету.

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

Комментарии в табличке что-то задумали..

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

Cycle1:                       // Для РїРѕРёСЃРєР° сколько Max денег может быть.
  sub ecx,8
  cmp [ecx],000C0000          // Проверяем ID СѓСЂРѕРІРЅСЏ ГГ это.
  jne Cycle1                  // Если нет, то продолжаем цикл.
  mov ecx,[ecx+04]            // Если РґР°, то загружаем уровень
  mov ebp,#10000              // Загружаем Max РєРѕ-РІРѕ денег для 1 СѓСЂРѕРІРЅСЏ ГГ.
  imul ebp,ecx                // Умножаем РЅР° текущий уровень ГГ.


Возможно проблема с моей стороны но не уверен :D.

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

1 минуту назад, what228 сказал:

Возможно проблема с моей стороны но не уверен :D

Кодировку на UTF-8 поменяй в ANSI такой мусор выводит только.

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

2 минуты назад, what228 сказал:

Комментарии...........

к предложению partoftheworlD , ещё можно выучить новый язык: берёшь строчку Для РїРѕРёСЃРєР° сколько Max денег может быть. ,берёшь перевод и учишь, как все полиглоты делают.:D  

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

2 минуты назад, Garik66 сказал:

ещё можно выучить новый язык

А потом на форуме так и общаешься, шифруешься от пользователей и спец.служб:D

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

3 минуты назад, partoftheworlD сказал:

А потом на форуме так и общаешься, шифруешься от пользователей и спец.служб:D

 

 

 

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

2 минуты назад, what228 сказал:

В CE поменять?

я в Notepad++ менял, в CE такого не видел

 

7 минут назад, Garik66 сказал:

 

"А потом на форуме так и общаешься, шифруешься от пользователей и спец.служб"

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

1 минуту назад, partoftheworlD сказал:

я в Notepad++ менял, в CE такого не видел

 

"А потом на форуме так и общаешься, шифруешься от пользователей и спец.служб"

Дык и так UTF-8 стоит.

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

1 минуту назад, partoftheworlD сказал:

"А потом на форуме так и общаешься, шифруешься от пользователей и спец.служб"

Ну да - новый язык GHL

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

15 минуту назад, partoftheworlD сказал:

Уверен?

Ну я не прям дурак же :) 

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

Снимок4.PNGЭто UTF-8

Снимок5.PNGЭто ANSI

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

Сделал максимальное количество золота в сундуке. Значение меняется если в нём есть хотя бы одна монета.

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

{ Game   : Game.exe
  Version: 1.13d + PlugY 11.02
  Date   : 2017-04-24
  Author : DeadCraft

  This script does blah blah blah
}

[ENABLE]

aobscanmodule(MaxMoneyStash,D2Common.dll,85 F6 8B 40 04) // should be unique
aobscanmodule(MaxMoneyStash1,D2Common.dll,01 68 04 75 0A) // should be unique
alloc(newmem,$1000)
label(newmem1)
label(code)
label(return)
label(code1)
label(return1)
registersymbol(MaxMoneyStash)
registersymbol(MaxMoneyStash1)

////////////////////////////////////////////////////////////////////////////////

newmem:
  cmp edx,000F0000
  jne code
  mov [eax+04],#2500000

code:
  test esi,esi
  mov eax,[eax+04]
  jmp return

////////////////////////////////////////////////////////////////////////////////

newmem1:
  cmp edx,000F0000
  jne code1
  mov [eax+04],#2500000
  mov ebp,0

code1:
  add [eax+04],ebp
  jne D2Common.Ordinal11158+52
  jmp return1

////////////////////////////////////////////////////////////////////////////////

MaxMoneyStash:
  jmp newmem
return:

MaxMoneyStash1:
  jmp newmem1
return1:

////////////////////////////////////////////////////////////////////////////////

[DISABLE]

MaxMoneyStash:
  db 85 F6 8B 40 04

MaxMoneyStash1:
  db 01 68 04 75 0A

unregistersymbol(MaxMoneyStash)
unregistersymbol(MaxMoneyStash1)
dealloc(newmem)

////////////////////////////////////////////////////////////////////////////////

{
// ORIGINAL CODE - INJECTION POINT: "D2Common.dll"+58422

"D2Common.dll"+5840C: 7C 09              -  jl D2Common.dll+58417
"D2Common.dll"+5840E: 8B 0E              -  mov ecx,[esi]
"D2Common.dll"+58410: 8D 04 C1           -  lea eax,[ecx+eax*8]
"D2Common.dll"+58413: 85 C0              -  test eax,eax
"D2Common.dll"+58415: 75 07              -  jne D2Common.dll+5841E
"D2Common.dll"+58417: 5E                 -  pop esi
"D2Common.dll"+58418: 33 C0              -  xor eax,eax
"D2Common.dll"+5841A: 5D                 -  pop ebp
"D2Common.dll"+5841B: C2 04 00           -  ret 0004
"D2Common.dll"+5841E: 8B 74 24 0C        -  mov esi,[esp+0C]
// ---------- INJECTING HERE ----------
"D2Common.dll"+58422: 85 F6              -  test esi,esi
"D2Common.dll"+58424: 8B 40 04           -  mov eax,[eax+04]
// ---------- DONE INJECTING  ----------
"D2Common.dll"+58427: 74 36              -  je D2Common.dll+5845F
"D2Common.dll"+58429: 8A 56 05           -  mov dl,[esi+05]
"D2Common.dll"+5842C: 8B 0D E0 D0 DD 6F  -  mov ecx,[D2Common.dll+8D0E0]
"D2Common.dll"+58432: 84 51 08           -  test [ecx+08],dl
"D2Common.dll"+58435: 74 28              -  je D2Common.dll+5845F
"D2Common.dll"+58437: 85 ED              -  test ebp,ebp
"D2Common.dll"+58439: 74 24              -  je D2Common.dll+5845F
"D2Common.dll"+5843B: 8B 4B 44           -  mov ecx,[ebx+44]
"D2Common.dll"+5843E: 85 C9              -  test ecx,ecx
"D2Common.dll"+58440: 74 1D              -  je D2Common.dll+5845F
}


{
// ORIGINAL CODE - INJECTION POINT: "D2Common.dll"+59CE3

"D2Common.dll"+59CCC: 85 C0              -  test eax,eax
"D2Common.dll"+59CCE: 7C 09              -  jl D2Common.dll+59CD9
"D2Common.dll"+59CD0: 8B 0E              -  mov ecx,[esi]
"D2Common.dll"+59CD2: 8D 04 C1           -  lea eax,[ecx+eax*8]
"D2Common.dll"+59CD5: 85 C0              -  test eax,eax
"D2Common.dll"+59CD7: 75 0A              -  jne D2Common.dll+59CE3
"D2Common.dll"+59CD9: 8B 13              -  mov edx,[ebx]
"D2Common.dll"+59CDB: 52                 -  push edx
"D2Common.dll"+59CDC: 8B C7              -  mov eax,edi
"D2Common.dll"+59CDE: E8 CD E2 FF FF     -  call D2Common.dll+57FB0
// ---------- INJECTING HERE ----------
"D2Common.dll"+59CE3: 01 68 04           -  add [eax+04],ebp
"D2Common.dll"+59CE6: 75 0A              -  jne D2Common.dll+59CF2
// ---------- DONE INJECTING  ----------
"D2Common.dll"+59CE8: 8B 0B              -  mov ecx,[ebx]
"D2Common.dll"+59CEA: 51                 -  push ecx
"D2Common.dll"+59CEB: 8B D0              -  mov edx,eax
"D2Common.dll"+59CED: E8 1E DE FF FF     -  call D2Common.dll+57B10
"D2Common.dll"+59CF2: 6A 00              -  push 00
"D2Common.dll"+59CF4: 55                 -  push ebp
"D2Common.dll"+59CF5: 8B C3              -  mov eax,ebx
"D2Common.dll"+59CF7: E8 E4 FB FF FF     -  call D2Common.dll+598E0
"D2Common.dll"+59CFC: 8B 43 10           -  mov eax,[ebx+10]
"D2Common.dll"+59CFF: 85 C0              -  test eax,eax
}

////////////////////////////////////////////////////////////////////////////////

 

 

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

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

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

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