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

Взлом Diablo The Hell v1 209


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

Скрипты

LUA-скрипт:

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

function CETimer1Timer(sender)
sum = readInteger('006920DC')
if sum ~= nill then
UDF1.CELabel1.setCaption(sum)
end
end

 

"15 Снятие ограничения к-ва выпавших предметов на этаже."

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

{ Game   : TH.exe
  Version: 
  Date   : 2017-02-05
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(Sum1,TH.exe,3B 1D DC 20 69 00 0F) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(Sum1)

newmem:
  cmp [TH.exe+2920DC],#100
  jae @f
  jmp code

@@:
  sub [TH.exe+2920DC],#100

code:
  cmp ebx,[TH.exe+2920DC]
  jmp return

Sum1:
  jmp newmem
  db 90
return:

[DISABLE]
Sum1:
  db 3B 1D DC 20 69 00

unregistersymbol(Sum1)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "TH.exe"+280C4

"TH.exe"+28092: 8B 0C 85 68 59 4A 00           -  mov ecx,[eax*4+TH.exe+A5968]
"TH.exe"+28099: E8 26 06 FF FF                 -  call TH.exe+186C4
"TH.exe"+2809E: 8B 86 9C 62 68 00              -  mov eax,[esi+TH.exe+28629C]
"TH.exe"+280A4: 39 86 A0 62 68 00              -  cmp [esi+TH.exe+2862A0],eax
"TH.exe"+280AA: 7C 14                          -  jl TH.exe+280C0
"TH.exe"+280AC: 89 86 A0 62 68 00              -  mov [esi+TH.exe+2862A0],eax
"TH.exe"+280B2: 83 A6 94 62 68 00 00           -  and dword ptr [esi+TH.exe+286294],00
"TH.exe"+280B9: C6 86 B0 62 68 00 01           -  mov byte ptr [esi+TH.exe+2862B0],01
"TH.exe"+280C0: 43                             -  inc ebx
"TH.exe"+280C1: 83 C7 04                       -  add edi,04
// ---------- INJECTING HERE ----------
"TH.exe"+280C4: 3B 1D DC 20 69 00              -  cmp ebx,[TH.exe+2920DC]
// ---------- DONE INJECTING  ----------
"TH.exe"+280CA: 0F 8C 3F FF FF FF              -  jl TH.exe+2800F
"TH.exe"+280D0: 5E                             -  pop esi
"TH.exe"+280D1: 5F                             -  pop edi
"TH.exe"+280D2: E8 C5 FE FF FF                 -  call TH.exe+27F9C
"TH.exe"+280D7: 5B                             -  pop ebx
"TH.exe"+280D8: C3                             -  ret 
"TH.exe"+280D9: 56                             -  push esi
"TH.exe"+280DA: BE 28 1E 69 00                 -  mov esi,TH.exe+291E28
"TH.exe"+280DF: 8B 0E                          -  mov ecx,[esi]
"TH.exe"+280E1: 83 26 00                       -  and dword ptr [esi],00
}

 

Видео:

 

Табличка:

таблица в следующем сообщении

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

Сейчас обнаружил (не дождался реакции заказчика), что табличка из-за скрипта LUA работает не правильно (я думал, что без его активации таймер не будет активироваться, а оказалось активируется).. 

Удалил LUA-скрипт (если понадобится переделаю его) и форму.

Табличку перезалью:

таблицу выложил здесь.

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

В 05.02.2017в21:45, Garik66 сказал:

Сейчас обнаружил (не дождался реакции заказчика), что табличка из-за скрипта LUA работает не правильно (я думал, что без его активации таймер не будет активироваться, а оказалось активируется).. 

Удалил LUA-скрипт (если понадобится переделаю его) и форму.

Табличку перезалью:

Thehell_v1_209plus15byGarik66.CT

при одновременном включении скриптов "шанс и кол-во дропа" + "кол-во на этаже" дроп не осуществляется вообще. Вместо этого рисуются контуры предметов в воздухе((

Это же последняя актуальная версия?

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

56 минут назад, lilker сказал:

при одновременном включении скриптов "шанс и кол-во дропа" + "кол-во на этаже" дроп не осуществляется вообще. Вместо этого рисуются контуры предметов в воздухе((

Это же последняя актуальная версия?

Проверю на выходных.

 

ЗЫ: Стоп - ты замораживаешь адрес "кол-во на этаже" ( :blink: ), или активируешь скрипт  "15 Снятие ограничения к-ва выпавших предметов на этаже."?

Если первое, то извини - это уже твой косяк - этот адрес конечно замораживать нельзя - он показывает именно количество предметов на этаже.;)

А если скрипт - то проверю, хотя на видео явно видно, что скрипт правильный  и всё работает.

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

да, напутал. заморозил адрес

проверю снова вечером

Гарик, в двух словах, где включить вынесенный счетчик в СЕ ? такой как ты использовал для подсчета предметов

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

13 часа назад, lilker сказал:

да, напутал. заморозил адрес

проверю снова вечером

Гарик, в двух словах, где включить вынесенный счетчик в СЕ ? такой как ты использовал для подсчета предметов

В последней версии таблицы я его удалил - Lua скрипт ( а точнее таймер) мешал загрузке таблицы. Его нужно переписать.

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

Добрый день) проверил таблицу с удаленным LUA ( если правильно все понял по ссылкам) - накладок с дропом нет. Каждый моб кидает вещь - все ок)

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

  • 1 месяц спустя...

Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам. 

Скрипт "16. Подбор брони":

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

{ Game   : TH.exe
  Version: 
  Date   : 2017-03-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
{$LUA}
-- запись в файл Garik66.txt
function write_file()
if readInteger('WriteID') == 1 then
file=io.open('Garik66.txt','a+')
file:write("newID - "..readInteger('IDItem66 '.."\n")..";  ")
file:close()
writeInteger('WriteID', 0)
end
end

-- таймер для проверки
t=createTimer(nil)
timer_setInterval(t, 100)
timer_onTimer(t, write_file)
timer_setEnabled(t, true)
{$ASM}
aobscanmodule(IDItemG66,TH.exe,8B 02 89 06 66 8B 42 04) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(WriteID)
registersymbol(WriteID)
label(IDItem66)
registersymbol(IDItem66)
registersymbol(IDItemG66)

newmem:
  cmp ebx,1
  jne code
  cmp [edx+128],#-35
  jne @f
  cmp [edx+FC],#35
  jne @f
  cmp [edx+d4],#200
  jne @f
  mov eax,[edx]
  mov [IDItem66],eax
  mov [WriteID],1

@@:
  inc [edx]

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

WriteID:
  dd 0
IDItem66:
  dd 0

IDItemG66:
  jmp newmem
  db 90 90 90
return:

[DISABLE]
{$LUA}
-- отключение таймера
timer_setEnabled(t, false)
{$ASM}
IDItemG66:
  db 8B 02 89 06 66 8B 42 04

unregistersymbol(IDItem66)
unregistersymbol(WriteID)
unregistersymbol(IDItemG66)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "TH.exe"+54D7C

"TH.exe"+54D63: 0B C1                 -  or eax,ecx
"TH.exe"+54D65: 0F BE 4A 52           -  movsx ecx,byte ptr [edx+52]
"TH.exe"+54D69: C1 E0 08              -  shl eax,08
"TH.exe"+54D6C: 0B C1                 -  or eax,ecx
"TH.exe"+54D6E: 0F BE 4A 53           -  movsx ecx,byte ptr [edx+53]
"TH.exe"+54D72: C1 E0 08              -  shl eax,08
"TH.exe"+54D75: 0B C1                 -  or eax,ecx
"TH.exe"+54D77: 89 46 0F              -  mov [esi+0F],eax
"TH.exe"+54D7A: 5E                    -  pop esi
"TH.exe"+54D7B: C3                    -  ret 
// ---------- INJECTING HERE ----------
"TH.exe"+54D7C: 8B 02                 -  mov eax,[edx]
"TH.exe"+54D7E: 89 06                 -  mov [esi],eax
"TH.exe"+54D80: 66 8B 42 04           -  mov ax,[edx+04]
// ---------- DONE INJECTING  ----------
"TH.exe"+54D84: 66 89 46 04           -  mov [esi+04],ax
"TH.exe"+54D88: 8A 42 3C              -  mov al,[edx+3C]
"TH.exe"+54D8B: 8A 4A 38              -  mov cl,[edx+38]
"TH.exe"+54D8E: D0 E0                 -  shl al,1
"TH.exe"+54D90: 02 C8                 -  add cl,al
"TH.exe"+54D92: 88 4E 08              -  mov [esi+08],cl
"TH.exe"+54D95: 8A 82 EC 00 00 00     -  mov al,[edx+000000EC]
"TH.exe"+54D9B: 88 46 09              -  mov [esi+09],al
"TH.exe"+54D9E: 8A 82 F0 00 00 00     -  mov al,[edx+000000F0]
"TH.exe"+54DA4: 88 46 0A              -  mov [esi+0A],al
}

 

Видео:

 

И табличка:

табличку выложил здесь

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

Если интересно, набросал инфу

1. Для увеличения скорости записи в файл можно использовать спидхак (тем же Lua)

speedhack_setSpeed(speed) : Enables the speedhack if needed and sets the specific speed
speedhack_getSpeed(): Returns the last set speed

2. Таймер может проскочить адрес, в этом случае можно вызывать функцию Lua из AA кода. На форуме где-то была тема. Может быть сложно.

3. Вывод в файл может быть с одинаковыми id-шникиами. Возможно, надо исправить

4. Можно использоваться функцию print('запись') для проверки происходящих действий в скрипте Lua. Т.е. пишет в файл ли, выполняются ли условия, что записал в файл и так далее...

5. Можно использовать звуковое оповещение из Lua, в конце расчета

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

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

1. Для увеличения скорости записи в файл можно использовать спидхак (тем же Lua)

Да уже с Ликером обсудили это.

26 минуты назад, lilker сказал:

на 13 минуте - инструкция замедляет перебор

я когда вручную тыкал, ускорял процесс в 5 раз, и шуршул без остановки

Да думаю можно будет использовать СЕ-ный спидхак, чтобы ускорить всю игру - можно и в 100 раз попробывать ускорить. - думаю сработатет.

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

2. Таймер может проскочить адрес, в этом случае можно вызывать функцию Lua из AA кода. На форуме где-то была тема. Может быть сложно.

это пока не уловил. Потом разберёмся.

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

3. Вывод в файл может быть с одинаковыми id-шникиами. Возможно, надо исправить

Это на врятли. Включили скрипт, оставили на ночь - пишет. записали куда-нить последний ID-ник перед выключением скрипта, выключили комп, решили продолжить, забили ID, который был последний, включили скрипт и продолжаем. Можно конечно и это всё автоматизировать, но у меня к сожалению столько времени нет.

6 минут назад, MasterGH сказал:

4. Можно использоваться функцию print('запись') для проверки происходящих действий в скрипте Lua. Т.е. пишет в файл ли, выполняются ли условия, что записал в файл и так далее...

да можно было  сделать, но я скрипт полностью протестил, на одной характеристики.

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

5. Можно использовать звуковое оповещение из Lua, в конце расчета

Об этом тоже думал, но опять же из-за не хватки времени не стал делать.

 

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

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

ЗЫ: Но сомневаюсь, что кто-нибудь захочет это делать Перебрать 4 байта инфы со скоростью даже 1 сек это 136 лет.;)

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

 

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

Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам.   (Часть 2)

Скрипт "16.1. Перебор брони":

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

{ Game   : TH.exe
  Version: 
  Date   : 2017-03-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]

{$LUA}
showMessage("Вас приветствует скрипт Garik66 для перебора в данном случае брони. Запишите последний проверенный ID предмета из файла ID_Item.txt, который находится в директории CE, измените характеристики, по которым проверяете бронь, если нужно, и активируйте скрипт Start. Перед завершением перебора, вначале отключите скрипт Start. Также посмотрите видео-инструкцию, активировав скрипт Видео-инструкция. Удачи в переборе! :)")
-- запись в файл Garik66.txt
function write_file()
if readInteger('WriteID') == 1 then
file=io.open('ID_Item.txt','a+')
file:write("newID - "..readInteger('IDItem66 '.."\n")..";  ")
file:close()
writeInteger('WriteID', 0)
end
end
-- таймер для проверки
t=createTimer(nil)
timer_setInterval(t, 5)
timer_onTimer(t, write_file)
timer_setEnabled(t, true)

{$ASM}
aobscanmodule(IDItemG66,TH.exe,8B 02 89 06 66 8B 42 04) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(Value_DFE)
registersymbol(Value_DFE)
label(PlusArmor)
registersymbol(PlusArmor)
label(Armor)
registersymbol(Armor)
label(WriteID)
registersymbol(WriteID)
label(IDItem666)
registersymbol(IDItem666)
label(IDItem66)
registersymbol(IDItem66)
label(Start)
registersymbol(Start)
registersymbol(IDItemG66)

newmem:
  mov [IDItem666],edx
  cmp [Start],0
  je code
  cmp ebx,1
  jne code

  mov eax,0
  sub eax,[edx+128]
  cmp eax,[Value_DFE]
  jb @f
  mov eax,[PlusArmor]
  cmp [edx+FC],eax
  jb @f
  mov eax,[Armor]
  cmp [edx+d4],eax
  jb @f
  mov eax,[edx]
  mov [IDItem66],eax
  mov [WriteID],1

@@:
  inc [edx]

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

WriteID:
  dd 0
IDItem66:
  dd 0
IDItem666:
  dd 0
Value_DFE:
  dd #33
PlusArmor:
  dd #30
Armor:
  dd #190
Start:
  dd 0

IDItemG66:
  jmp newmem
  db 90 90 90
return:

[DISABLE]

{$LUA}
-- отключение таймера
timer_setEnabled(t, false)
{$ASM}

IDItemG66:
  db 8B 02 89 06 66 8B 42 04

unregistersymbol(Start)
unregistersymbol(Value_DFE)
unregistersymbol(PlusArmor)
unregistersymbol(Armor)
unregistersymbol(IDItem66)
unregistersymbol(IDItem666)
unregistersymbol(WriteID)
unregistersymbol(IDItemG66)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "TH.exe"+54D7C

"TH.exe"+54D63: 0B C1                 -  or eax,ecx
"TH.exe"+54D65: 0F BE 4A 52           -  movsx ecx,byte ptr [edx+52]
"TH.exe"+54D69: C1 E0 08              -  shl eax,08
"TH.exe"+54D6C: 0B C1                 -  or eax,ecx
"TH.exe"+54D6E: 0F BE 4A 53           -  movsx ecx,byte ptr [edx+53]
"TH.exe"+54D72: C1 E0 08              -  shl eax,08
"TH.exe"+54D75: 0B C1                 -  or eax,ecx
"TH.exe"+54D77: 89 46 0F              -  mov [esi+0F],eax
"TH.exe"+54D7A: 5E                    -  pop esi
"TH.exe"+54D7B: C3                    -  ret 
// ---------- INJECTING HERE ----------
"TH.exe"+54D7C: 8B 02                 -  mov eax,[edx]
"TH.exe"+54D7E: 89 06                 -  mov [esi],eax
"TH.exe"+54D80: 66 8B 42 04           -  mov ax,[edx+04]
// ---------- DONE INJECTING  ----------
"TH.exe"+54D84: 66 89 46 04           -  mov [esi+04],ax
"TH.exe"+54D88: 8A 42 3C              -  mov al,[edx+3C]
"TH.exe"+54D8B: 8A 4A 38              -  mov cl,[edx+38]
"TH.exe"+54D8E: D0 E0                 -  shl al,1
"TH.exe"+54D90: 02 C8                 -  add cl,al
"TH.exe"+54D92: 88 4E 08              -  mov [esi+08],cl
"TH.exe"+54D95: 8A 82 EC 00 00 00     -  mov al,[edx+000000EC]
"TH.exe"+54D9B: 88 46 09              -  mov [esi+09],al
"TH.exe"+54D9E: 8A 82 F0 00 00 00     -  mov al,[edx+000000F0]
"TH.exe"+54DA4: 88 46 0A              -  mov [esi+0A],al
}

 

Видео:

 

Табличка:

Здесь

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

В 19.03.2017в14:44, Garik66 сказал:

Скрипт "16.1. Перебор брони":

и двухдневная работа самого заказчика lilker принесли результаты - получена самая крутая броня в Моде:

13343885.jpg

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

  • 1 месяц спустя...

Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам.   (Часть 3)

Скрипт "16.1. Перебор предмета по заданным характеристикам":

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

{ Game   : TH.exe
  Version: 
  Date   : 2017-03-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]

{$LUA}
--showMessage("Вас приветствует скрипт Garik66 для перебора в данном случае брони. Запишите последний проверенный ID предмета из файла ID_Item.txt, который находится в директории CE, измените характеристики, по которым проверяете бронь, если нужно, и активируйте скрипт Start. Перед завершением перебора, вначале отключите скрипт Start. Также посмотрите видео-инструкцию, активировав скрипт Видео-инструкция. Удачи в переборе! :)")
-- запись в файл Garik66.txt
function write_file()
if readInteger('WriteID') == 1 then
file=io.open('ID_Item.txt','a+')
file:write("newID - "..readInteger('IDItem66 '.."\n")..";  ")
file:close()
writeInteger('WriteID', 0)
end
end
-- таймер для проверки
t=createTimer(nil)
timer_setInterval(t, 5)
timer_onTimer(t, write_file)
timer_setEnabled(t, true)

{$ASM}
aobscanmodule(IDItemG66,TH.exe,8B 02 89 06 66 8B 42 04) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(Value_DFE)
registersymbol(Value_DFE)
label(PlusArmor)
registersymbol(PlusArmor)
label(Armor)
registersymbol(Armor)
label(WriteID)
registersymbol(WriteID)
label(IDItem666)
registersymbol(IDItem666)
label(DamageMin)
registersymbol(DamageMin)
label(DamageMax)
registersymbol(DamageMax)
label(DamagePlus)
registersymbol(DamagePlus)
label(IDItem66)
registersymbol(IDItem66)
label(Start)
registersymbol(Start)
registersymbol(IDItemG66)

newmem:
  mov [IDItem666],edx
  cmp [Start],0
  je code
  cmp ebx,1
  jne code

  mov eax,0
  sub eax,[edx+128]
  cmp eax,[Value_DFE]
  jb @f
  mov eax,[PlusArmor]
  cmp [edx+FC],eax
  jb @f
  mov eax,[Armor]
  cmp [edx+D4],eax
  jb @f
  mov eax,[DamageMin]
  cmp [edx+CC],eax
  jb @f
  mov eax,[DamageMax]
  cmp [edx+D0],eax
  jb @f
  mov eax,[DamagePlus]
  cmp [edx+F4],eax
  jb @f
  mov eax,[edx]
  mov [IDItem66],eax
  mov [WriteID],1

@@:
  inc [edx]

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

WriteID:
  dd 0
IDItem66:
  dd 0
IDItem666:
  dd 0
Value_DFE:
  dd 0
PlusArmor:
  dd 0
Armor:
  dd 0
Start:
  dd 0
DamageMin:
  dd 0
DamageMax:
  dd 0
DamagePlus:
  dd 0

IDItemG66:
  jmp newmem
  db 90 90 90
return:

[DISABLE]

{$LUA}
-- отключение таймера
timer_setEnabled(t, false)
{$ASM}

IDItemG66:
  db 8B 02 89 06 66 8B 42 04

unregistersymbol(Start)
unregistersymbol(Value_DFE)
unregistersymbol(PlusArmor)
unregistersymbol(Armor)
unregistersymbol(IDItem66)
unregistersymbol(IDItem666)
unregistersymbol(WriteID)
unregistersymbol(DamageMin)
unregistersymbol(DamageMax)
unregistersymbol(DamagePlus)
unregistersymbol(IDItemG66)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "TH.exe"+54D7C

"TH.exe"+54D63: 0B C1                 -  or eax,ecx
"TH.exe"+54D65: 0F BE 4A 52           -  movsx ecx,byte ptr [edx+52]
"TH.exe"+54D69: C1 E0 08              -  shl eax,08
"TH.exe"+54D6C: 0B C1                 -  or eax,ecx
"TH.exe"+54D6E: 0F BE 4A 53           -  movsx ecx,byte ptr [edx+53]
"TH.exe"+54D72: C1 E0 08              -  shl eax,08
"TH.exe"+54D75: 0B C1                 -  or eax,ecx
"TH.exe"+54D77: 89 46 0F              -  mov [esi+0F],eax
"TH.exe"+54D7A: 5E                    -  pop esi
"TH.exe"+54D7B: C3                    -  ret 
// ---------- INJECTING HERE ----------
"TH.exe"+54D7C: 8B 02                 -  mov eax,[edx]
"TH.exe"+54D7E: 89 06                 -  mov [esi],eax
"TH.exe"+54D80: 66 8B 42 04           -  mov ax,[edx+04]
// ---------- DONE INJECTING  ----------
"TH.exe"+54D84: 66 89 46 04           -  mov [esi+04],ax
"TH.exe"+54D88: 8A 42 3C              -  mov al,[edx+3C]
"TH.exe"+54D8B: 8A 4A 38              -  mov cl,[edx+38]
"TH.exe"+54D8E: D0 E0                 -  shl al,1
"TH.exe"+54D90: 02 C8                 -  add cl,al
"TH.exe"+54D92: 88 4E 08              -  mov [esi+08],cl
"TH.exe"+54D95: 8A 82 EC 00 00 00     -  mov al,[edx+000000EC]
"TH.exe"+54D9B: 88 46 09              -  mov [esi+09],al
"TH.exe"+54D9E: 8A 82 F0 00 00 00     -  mov al,[edx+000000F0]
"TH.exe"+54DA4: 88 46 0A              -  mov [esi+0A],al
}

 

Видео:

 

Табличка:

Здесь.

 

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

Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам.   (Часть 4)

Скрипт "16.1. Перебор предмета по заданным характеристикам":

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

{ Game   : TH.exe
  Version: 
  Date   : 2017-03-18
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]

{$LUA}
--showMessage("Вас приветствует скрипт Garik66 для перебора в данном случае брони. Запишите последний проверенный ID предмета из файла ID_Item.txt, который находится в директории CE, измените характеристики, по которым проверяете бронь, если нужно, и активируйте скрипт Start. Перед завершением перебора, вначале отключите скрипт Start. Также посмотрите видео-инструкцию, активировав скрипт Видео-инструкция. Удачи в переборе! :)")
-- запись в файл Garik66.txt
function write_file()
if readInteger('WriteID') == 1 then
file=io.open('ID_Item.txt','a+')
file:write("newID - "..readInteger('IDItem66 '.."\n")..";  ")
file:close()
writeInteger('WriteID', 0)
end
end
-- таймер для проверки
t=createTimer(nil)
timer_setInterval(t, 5)
timer_onTimer(t, write_file)
timer_setEnabled(t, true)

{$ASM}
aobscanmodule(IDItemG66,TH.exe,8B 02 89 06 66 8B 42 04) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(Value_DFE)
registersymbol(Value_DFE)
label(PlusArmor)
registersymbol(PlusArmor)
label(Armor)
registersymbol(Armor)
label(WriteID)
registersymbol(WriteID)
label(IDItem666)
registersymbol(IDItem666)
label(DamageMin)
registersymbol(DamageMin)
label(DamageMax)
registersymbol(DamageMax)
label(DamagePlus)
registersymbol(DamagePlus)
label(DamagePlus1)
registersymbol(DamagePlus1)
label(IDItem66)
registersymbol(IDItem66)
label(Start)
registersymbol(Start)
registersymbol(IDItemG66)

newmem:
  mov [IDItem666],edx
  cmp [Start],0
  je code
  cmp ebx,1
  jne code

  mov eax,0
  sub eax,[edx+128]
  cmp eax,[Value_DFE]
  jb @f
  mov eax,[PlusArmor]
  cmp [edx+FC],eax
  jb @f
  mov eax,[Armor]
  cmp [edx+D4],eax
  jb @f
  mov eax,[DamageMin]
  cmp [edx+CC],eax
  jb @f
  mov eax,[DamageMax]
  cmp [edx+D0],eax
  jb @f
  mov eax,[DamagePlus]
  cmp [edx+F4],eax
  jb @f
  mov eax,[DamagePlus1]
  cmp [edx+124],eax
  jb @f
  mov eax,[edx]
  mov [IDItem66],eax
  mov [WriteID],1

@@:
  inc [edx]

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

WriteID:
  dd 0
IDItem66:
  dd 0
IDItem666:
  dd 0
Value_DFE:
  dd 0
PlusArmor:
  dd 0
Armor:
  dd 0
Start:
  dd 0
DamageMin:
  dd 0
DamageMax:
  dd 0
DamagePlus:
  dd 0
DamagePlus1:
  dd 0

IDItemG66:
  jmp newmem
  db 90 90 90
return:

[DISABLE]

{$LUA}
-- отключение таймера
timer_setEnabled(t, false)
{$ASM}

IDItemG66:
  db 8B 02 89 06 66 8B 42 04

unregistersymbol(Start)
unregistersymbol(Value_DFE)
unregistersymbol(PlusArmor)
unregistersymbol(Armor)
unregistersymbol(IDItem66)
unregistersymbol(IDItem666)
unregistersymbol(WriteID)
unregistersymbol(DamageMin)
unregistersymbol(DamageMax)
unregistersymbol(DamagePlus)
unregistersymbol(DamagePlus1)
unregistersymbol(IDItemG66)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "TH.exe"+54D7C

"TH.exe"+54D63: 0B C1                 -  or eax,ecx
"TH.exe"+54D65: 0F BE 4A 52           -  movsx ecx,byte ptr [edx+52]
"TH.exe"+54D69: C1 E0 08              -  shl eax,08
"TH.exe"+54D6C: 0B C1                 -  or eax,ecx
"TH.exe"+54D6E: 0F BE 4A 53           -  movsx ecx,byte ptr [edx+53]
"TH.exe"+54D72: C1 E0 08              -  shl eax,08
"TH.exe"+54D75: 0B C1                 -  or eax,ecx
"TH.exe"+54D77: 89 46 0F              -  mov [esi+0F],eax
"TH.exe"+54D7A: 5E                    -  pop esi
"TH.exe"+54D7B: C3                    -  ret 
// ---------- INJECTING HERE ----------
"TH.exe"+54D7C: 8B 02                 -  mov eax,[edx]
"TH.exe"+54D7E: 89 06                 -  mov [esi],eax
"TH.exe"+54D80: 66 8B 42 04           -  mov ax,[edx+04]
// ---------- DONE INJECTING  ----------
"TH.exe"+54D84: 66 89 46 04           -  mov [esi+04],ax
"TH.exe"+54D88: 8A 42 3C              -  mov al,[edx+3C]
"TH.exe"+54D8B: 8A 4A 38              -  mov cl,[edx+38]
"TH.exe"+54D8E: D0 E0                 -  shl al,1
"TH.exe"+54D90: 02 C8                 -  add cl,al
"TH.exe"+54D92: 88 4E 08              -  mov [esi+08],cl
"TH.exe"+54D95: 8A 82 EC 00 00 00     -  mov al,[edx+000000EC]
"TH.exe"+54D9B: 88 46 09              -  mov [esi+09],al
"TH.exe"+54D9E: 8A 82 F0 00 00 00     -  mov al,[edx+000000F0]
"TH.exe"+54DA4: 88 46 0A              -  mov [esi+0A],al
}

 

Видео:

Табличка:

Здесь.

 

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

Diablo The Hell v1 209 Бонусная серия.

Скрипты:

"17. Отключение некоторых проверок Мордора":

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

{
  Game   : TH.exe
  Version: 1.0
  Date   : 05-02-17
  Author : [open aamaker.lua and pastle Author]
  Version CE: 6.5  Make by aamaker Lua plagin Version 2.4.0.G66.1 :)
  [EN] Technical support: http://forum.cheatengine.org/viewtopic.php?p=5645967
  [RU] Техническая поддержка: https://forum.gamehacklab.ru/index.php?/topic/1415-plugin-aa-maker-создание-аа-скриптов
}

[ENABLE]
aobscanmodule(INJECT0,TH.exe+3182C6,e8xxxxxxxxxxxxxxxxxxxxxxe8xxxxxxxx8bxxxxxxxxxx83xxxx89xx81)
registersymbol(INJECT0)

INJECT0:
  db 90 90 90 90 90

[DISABLE]
INJECT0:
  db E8 0B CD D3 FF

unregistersymbol(INJECT0)

{
// ORIGINAL CODE - INJECTION POINT: TH.exe+3182C6

TH.exe+3182AA: 00 00                         - add [eax],al
TH.exe+3182AC: 00 00                         - add [eax],al
TH.exe+3182AE: 00 00                         - add [eax],al
TH.exe+3182B0: 56                            - push esi
TH.exe+3182B1: 89 CE                         - mov esi,ecx
TH.exe+3182B3: B9 B060A300                   - mov ecx,00A360B0
TH.exe+3182B8: 89 F2                         - mov edx,esi
TH.exe+3182BA: E8 00CAD3FF                   - call 00454CBF
TH.exe+3182BF: B9 B060A300                   - mov ecx,00A360B0
TH.exe+3182C4: 89 F2                         - mov edx,esi
// ---------- INJECTING HERE -----------
TH.exe+3182C6: E8 0BCDD3FF                   - call 00454FD6
// ---------- DONE INJECTING  ----------
TH.exe+3182CB: 5E                            - pop esi
TH.exe+3182CC: C3                            - ret 
TH.exe+3182CD: 90                            - nop 
TH.exe+3182CE: 90                            - nop 
TH.exe+3182CF: 90                            - nop 
TH.exe+3182D0: 57                            - push edi
TH.exe+3182D1: 53                            - push ebx
TH.exe+3182D2: E8 F91EFFFF                   - call 0070A1D0
TH.exe+3182D7: 8B 98 D8470000                - mov ebx,[eax+000047D8]
TH.exe+3182DD: 83 C3 07                      - add ebx,07
}

 

"18. Бонус от Garik66":

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

[ENABLE]
aobscan(address37,8D XX XX XX XX XX XX F3 A5 E8 XX XX XX XX FF XX XX XX XX XX XX 8D XX XX XX XX XX XX)
alloc(newMem37,4000)
label(returnHere37)
registersymbol(address37)

newMem37:
lea esi,[eax+edx+00000DB8]
repe movsd
mov [eax+53dc],1
mov [eax+5421],6564614D
mov [eax+5425],20796220
mov [eax+5429],69726147
mov [eax+542D],0036366B
mov [eax+5431],00000000
mov [eax+5435],00000000
mov [eax+5478],#66
mov [eax+5498],#6666
mov [eax+54A4],#66
mov [eax+54A8],#66
mov [eax+54AC],#66
mov [eax+54B0],#66
mov [eax+54B4],#66
mov [eax+54B8],#66
mov [eax+54BC],#66
mov [eax+54F0],00001B0B
mov [eax+5504],00000000
mov [eax+5508],1
mov [eax+5528],#66
jmp returnHere37

address37:
jmp newMem37
db 90 90 90 90
returnHere37:

[DISABLE]
address37: {TH.exe+20CB5:}
lea esi,[eax+edx+00000DB8]
repe movsd

unregistersymbol(address37)
dealloc(newMem37

 

"19. DFE -66":

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

{ Game   : TH.exe
  Version: 
  Date   : 2017-05-02
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(INJECT38,TH.exe,89 8C 30 44 55 00 00) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(INJECT38)

newmem:
  mov ecx,#-66
  mov [eax+esi+00005544],#-66

code:
  mov [eax+esi+00005544],ecx
  jmp return

INJECT38:
  jmp newmem
  db 90 90
return:

[DISABLE]
INJECT38:
  db 89 8C 30 44 55 00 00

unregistersymbol(INJECT38)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "TH.exe"+23C56

"TH.exe"+23C26: 8B 4D CC              -  mov ecx,[ebp-34]
"TH.exe"+23C29: 89 8C 30 40 55 00 00  -  mov [eax+esi+00005540],ecx
"TH.exe"+23C30: A1 14 AE 6E 00        -  mov eax,[TH.exe+2EAE14]
"TH.exe"+23C35: 8B 4D B0              -  mov ecx,[ebp-50]
"TH.exe"+23C38: 89 8C 30 88 55 00 00  -  mov [eax+esi+00005588],ecx
"TH.exe"+23C3F: A1 14 AE 6E 00        -  mov eax,[TH.exe+2EAE14]
"TH.exe"+23C44: 8B 4D AC              -  mov ecx,[ebp-54]
"TH.exe"+23C47: 89 8C 30 30 55 00 00  -  mov [eax+esi+00005530],ecx
"TH.exe"+23C4E: 8B 4D A8              -  mov ecx,[ebp-58]
"TH.exe"+23C51: E9 7A 39 2E 00        -  jmp TH.exe+3075D0
// ---------- INJECTING HERE ----------
"TH.exe"+23C56: 89 8C 30 44 55 00 00  -  mov [eax+esi+00005544],ecx
// ---------- DONE INJECTING  ----------
"TH.exe"+23C5D: 58                    -  pop eax
"TH.exe"+23C5E: 39 45 F0              -  cmp [ebp-10],eax
"TH.exe"+23C61: 7D 03                 -  jnl TH.exe+23C66
"TH.exe"+23C63: 89 45 F0              -  mov [ebp-10],eax
"TH.exe"+23C66: 6A 0F                 -  push 0F
"TH.exe"+23C68: 58                    -  pop eax
"TH.exe"+23C69: 39 45 F0              -  cmp [ebp-10],eax
"TH.exe"+23C6C: 7E 03                 -  jle TH.exe+23C71
"TH.exe"+23C6E: 89 45 F0              -  mov [ebp-10],eax
"TH.exe"+23C71: A1 14 AE 6E 00        -  mov eax,[TH.exe+2EAE14]
}

 

Видео:

Табличка:

выложил здесь.

 

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

В 01.05.2017 в 22:48, Garik66 сказал:

Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам.   (Часть 4)

В этой серии, в скрипте и таблице мною допущена ошибка:

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

  mov eax,[DamagePlus]
  cmp [edx+F4],eax
  jb @f
  mov eax,[DamagePlus1]
  cmp [edx+F4],eax            // нужно cmp [edx+124],eax
  jb @f

 

хотя смещение я посчитал на 21.30 минуте видео.

Обнаружил ошибку lilker (Спасибо за внимательный просмотр видео).

Скрипт поправил, табличку перезалил.

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

  • 3 недели спустя...

Добавлен скрипт:

"17.1 Отключение некоторых проверок Мордора":

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

{ Game   : TH.exe
  Version: 
  Date   : 2017-05-21
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(INJECTION_POINT,TH.exe,56 8B F1 57 8B FA 66) // should be unique
registersymbol(INJECTION_POINT)

INJECTION_POINT:
  db C3


[DISABLE]
INJECTION_POINT:
  db 56

unregistersymbol(INJECTION_POINT)

{
// ORIGINAL CODE - INJECTION POINT: "TH.exe"+54FD6

"TH.exe"+54FB3: 89 86 D2 04 00 00     -  mov [esi+000004D2],eax
"TH.exe"+54FB9: 8B 87 84 55 00 00     -  mov eax,[edi+00005584]
"TH.exe"+54FBF: 89 86 D6 04 00 00     -  mov [esi+000004D6],eax
"TH.exe"+54FC5: 8B 87 88 55 00 00     -  mov eax,[edi+00005588]
"TH.exe"+54FCB: 89 86 DA 04 00 00     -  mov [esi+000004DA],eax
"TH.exe"+54FD1: 5F                    -  pop edi
"TH.exe"+54FD2: 5E                    -  pop esi
"TH.exe"+54FD3: 5B                    -  pop ebx
"TH.exe"+54FD4: C9                    -  leave 
"TH.exe"+54FD5: C3                    -  ret 
// ---------- INJECTING HERE ----------
"TH.exe"+54FD6: 56                    -  push esi
"TH.exe"+54FD7: 8B F1                 -  mov esi,ecx
"TH.exe"+54FD9: 57                    -  push edi
"TH.exe"+54FDA: 8B FA                 -  mov edi,edx
// ---------- DONE INJECTING  ----------
"TH.exe"+54FDC: 66 8B 46 06           -  mov ax,[esi+06]
"TH.exe"+54FE0: 66 3D FF FF           -  cmp ax,FFFF
"TH.exe"+54FE4: 75 09                 -  jne TH.exe+54FEF
"TH.exe"+54FE6: 83 4F 08 FF           -  or dword ptr [edi+08],-01
"TH.exe"+54FEA: E9 91 00 00 00        -  jmp TH.exe+55080
"TH.exe"+54FEF: 66 3D 17 00           -  cmp ax,0017
"TH.exe"+54FF3: 75 31                 -  jne TH.exe+55026
"TH.exe"+54FF5: 0F B7 46 0D           -  movzx eax,word ptr [esi+0D]
"TH.exe"+54FF9: FF 76 0F              -  push [esi+0F]
"TH.exe"+54FFC: 66 8B 56 04           -  mov dx,[esi+04]
}

 

 

TH.CT

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

  • 1 месяц спустя...

Здравствуйте Гарик

 

Играю неделю с Вашими таблицами. (ускорение, дроп, снятие ограничений дропа на уровень). большое спасибо.

Игрок я бывалый, периодический стаж в эту игру 6+ лет.

Следил за темой. Возник вопрос по скриптам.

 

Как работает скрипт 14. Скрипт Шанс и качество дропа.

1) - как я понимаю, там идет подстановка для обычного монстра как с босса. Если я прав, то все правила дропа для обычных мобов такие же как у боссов (монстрлвл/3 + 0(2) * 20 в зависимости от сложности + 3 +4.

 

В игре самые топовые аффиксы и суффиксы не могут быть выбиты с боссов, соответственно используя скрипт такое чудо не выбить, вопрос как можно сделать дроп синьки для мобов (вероятность выпадения как обычно нереальное 0,12512501%) постоянным, т.е. вместо дпропа как с босса, дропало как с моба, но только постоянно синьку (без белых предметов, уники можно).

следовательно формула дропа с моба должна стать (монстрлвл/3 + 0(2) * 20 в зависимости от сложности + 3)

 

2) 

Порядок формирования предмета:
1. Игра генерит шмотку в виде неких первичных половых признаков - "тяжесть" аффиксов, сочетание аф/преф и тд
2. Игра рандомно генерит базу для новой шмотки. (id. предмета). 

 

3. Игра с определенной вероятностью делает его синим. (для мобов около 0,12%, для боссов 100%) 

4. Игра с определенной вероятностью делает СИНИЙ ПРЕДМЕТ уникальным (12%).

 

Как сделать скрипт (и можно ли его вообще сделать) по подстановки базы предмета (id) при дропе. Чтобы существенно сократить рандом. К примеру в первой фазе генерация происходит автоматически игрой, а во второй фазе скрипт подсовывает базу амулета.

 

3)

шанс того, что синий предмет станет уником по стандарту 12%, в скрипте он как то увеличивается? по наблюдению нет). или я ошибаюсь.

 

Заранее благодарю за уделенное время.

 

*В ассамблере полный ноль, однако есть опыт работы в дельфи.

**С Cheat Engine познакомился только в рамках данного обсуждения)

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

9 часов назад, Redear сказал:

Как работает скрипт 14. Скрипт Шанс и качество дропа.

Я уже и не помню ("Винт" и "Оперативка" с возрастом "сыпятся" - память стала "Девечья" :wacko:), что и как делал, но судя по игровому коду в скрипте:

TH.exe+27506: 74 04 - je 0042750C                    // занопив эту инструкцию в скрипте
// ---------- DONE INJECTING  ----------
TH.exe+27508: 6A 0F - push 0F                        // мы попадаем сюдым и соответственно в стек грузим 15 
TH.exe+2750A: EB 02 - jmp 0042750E                   // так что скорее всего ты прав, это максимальный уровень монстра, т.е. боссы. 
TH.exe+2750C: 6A 01 - push 01
TH.exe+2750E: E9 4D272F00 - jmp 00719C60

Со временем у меня сейчас очень плохо, так что на вряд ли смогу помочь. Может кто-нить, из Ваших фанатов игры, знает ассемблер и покопается ещё в игровом коде?

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

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

Я уже и не помню ("Винт" и "Оперативка" с возрастом "сыпятся" - память стала "Девечья" :wacko:), что и как делал, но судя по игровому коду в скрипте:


TH.exe+27506: 74 04 - je 0042750C                    // занопив эту инструкцию в скрипте
// ---------- DONE INJECTING  ----------
TH.exe+27508: 6A 0F - push 0F                        // мы попадаем сюдым и соответственно в стек грузим 15 
TH.exe+2750A: EB 02 - jmp 0042750E                   // так что скорее всего ты прав, это максимальный уровень монстра, т.е. боссы. 
TH.exe+2750C: 6A 01 - push 01
TH.exe+2750E: E9 4D272F00 - jmp 00719C60

Со временем у меня сейчас очень плохо, так что на вряд ли смогу помочь. Может кто-нить, из Ваших фанатов игры, знает ассемблер и покопается ещё в игровом коде?

Наше игровое сообщество крайне скудно) Попробую потыкаться самостоятельно

Как я понимаю, моя задача найти адрес, когда с простого моба дропается синька

и заменить, в доне инжектион

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

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

Как я понимаю, моя задача найти адрес, когда с простого моба дропается синька

и заменить, в доне инжектион

Ну да. Собственно нужно перейти на адрес:

jmp 00719C60 // мы сюда попадаем

и изучить игровой код, что и как там делается. Так как в игре, качество дропа зависит по-моему от уровня монстра, от уровня подземелья, от уровня ГГ и т.д. 

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

  • 3 месяца спустя...
21 минуту назад, Celsior сказал:

Заменил файл, игра перестала запускаться. 

Ух...Очень информативно. Не знаю даже что и ответить.

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

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

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

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