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

7 days to die GodMod


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

Только что, ZoraVl сказал:

Могу записать видео как сделать топор в начале игры, если хочешь)

Да не зачем.

Я в неё играть всё-равно не буду.

А видео по крафту и прохождение - думаю полный ТЮБ, т.е. куча.:D

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

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

Да не зачем.

Я в неё играть всё-равно не буду.

А видео по крафту и прохождение - думаю полный ТЮБ, т.е. куча.:D

Ну короче что-бы сделать первый инструмент тоесть топор, нужно подойти к дереву постучать по нему, подойти к камню постучать по нему и постучать по траве... лучше включить скрипт для ломания с одного удара... дальше нажимаешь ТАВ и там белым цветом будет Stone Axe это каменный топор, нажимаешь на него и нажимаешь Craft (собрать)... Вуаля:lol:

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

8 часов назад, Garik66 сказал:

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

Короче спасибо большое!!! Я разобрался как сделать фильтр!!! Урааа!=)))) 

P.S мой ник читается как ЗораВЛ  - ударение на О, а вл это Влад =) 

Спасибо за твои уроки!:rolleyes:

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

5 часов назад, ZoraVl сказал:

мой ник читается как ЗораВЛ

default_offtopic.gifА я подумал, что Зорро 6. :D

5 часов назад, ZoraVl сказал:

Короче спасибо большое!!! Я разобрался как сделать фильтр!!! Урааа!=)))) 

Молодца!!! Удачного дальнейшего взлома!!!;)

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

3 часа назад, Garik66 сказал:

default_offtopic.gifА я подумал, что Зорро 6. :D

Молодца!!! Удачного дальнейшего взлома!!!;)

Можешь рассказать что означают функции в твоем скриптке GodMod? Я в коде отмечу какие.

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

{ Game   : 7DaysToDie.exe
  Version: лицензия Steam Alpha 14.7 (64bit)
  Date   : 2016-07-10
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscan(Pointer,48 8B 46 18 F3 0F 10 45 CC) // should be unique
aobscan(GodMod,F3 0F 11 6E 24 48 8B CE)
alloc(newmem,$1000,2A0C488C)
label(code)
label(return)
label(Health)
label(Wilness)
label(Stamina)
label(code1)
label(return1)
label(newmem1)

registersymbol(Health)
registersymbol(Stamina)
registersymbol(Pointer)
registersymbol(Wilness)
registersymbol(GodMod)

newmem:
  mov ecx,[rsi+10]
  mov [Health],ecx

  mov ecx,[rsi+18]
  mov [Stamina],ecx

  mov ecx,[rsi+38]
  mov [Wilness],ecx

code:
  mov rax,[rsi+18]
  movss xmm0,[rbp-34]
  jmp return

Health:
dq (double)0
Stamina:
dq (double)0
Wilness:
dq (double)0

newmem1:
  mov rcx,[Health]
  cmp rcx,rsi
  je @f    // Что делает эта фукция?
  mov rcx,[Stamina]
  cmp rcx,rsi
  je @f   // Что делает эта фукция?
  mov rcx,[Wilness]
  cmp rcx,rsi
  je @f   // Что делает эта фукция?
  jmp return1

@@:
  fld [rsi+20]  // Что делает эта фукция?
  fstp [rsi+24]    // Что делает эта фукция?
  jmp return1

code1:
  movss [rsi+24],xmm5
  jmp return1
Pointer:
  jmp newmem
  db 90 90 90 90
return:

GodMod:
  jmp newmem1
return1:
[DISABLE]
Pointer:
  db 48 8B 46 18 F3 0F 10 45 CC
GodMod:
  db F3 0F 11 6E 24

unregistersymbol(Health)
unregistersymbol(Stamina)
unregistersymbol(Pointer)
unregistersymbol(GodMod)
unregistersymbol(Wilness)
dealloc(newmem)

 

Код я переделал немного, добавил Wilness, это отвечает за максимальное здоровье и стамину...:)

Еще мне интересно почему ты записал db 90 90 90 90 где Pointer, ну тоесть зачем это? и чем отличается db от dq и почему ты написал dq (bouble) а не dq (float):-P

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

24 минуты назад, ZoraVl сказал:

je @f // Что делает эта фукция?

je - если в предыдущем сравнение значения в регистре и адресе равны то прыгаем на .....

@f - короткий прыжок (условный переход) вперёд (от английского forward - вперёд)  на ближайшую безымянную метку @@, может быть  ещё @b - короткий прыжок назад (от английского back - назад).

В чём преимущество использования безымянных меток @@: их ненужно объявлять, и их может быть сколько угодно в скрипте.

 

30 минуты назад, ZoraVl сказал:

fld [rsi+20] // Что делает эта фукция? fstp [rsi+24] // Что делает эта фукция?

fld - загружает в верхний регистр FPU значение из адреса (в нашем случае [rsi+20]) сдвигая значения в регистрах.

fst - выгружает из регистра в память без сдвига.

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

Т.е. код:

  fld [rsi+20]  
  fstp [rsi+24]    

нам позволил передать значение из памяти в память, т.к. напрямую этого делать нельзя. 

Подробнее по работе с вещественными числами - погугли и почитай, больше поймёшь.

37 минуты назад, ZoraVl сказал:

Еще мне интересно почему ты записал db 90 90 90 90 где Pointer, ну тоесть зачем это?

90 - это  тот же опкод nop, в нашем случае служит для выравнивания, т.е. 5 байт (jmp newmem) + 4 байта (4 nop или 90 90 90 90) = 9 байт (48 8B 46 18 F3 0F 10 45 CC - смотри ниже это байты оригинальной инструкции игры, с которой мы делаем прыжок (переход) на нашу инъекцию.)

40 минуты назад, ZoraVl сказал:

и чем отличается db от dq и почему ты написал dq (bouble) а не dq (float):-P

db - от английского define byte (определить байт)

dw - word (слово - два байта)

dd - double word (двойное слово - 4 байта) - если значение вещественное то пишем float в скобках.

dq - quadr worrd (учетверённое слово - 8 байт) ставим double, т.е. получаем удвоенное двойное слово.

Об этом всём тоже лучше погуглить и почитать поподробнее.

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

ЗЫ:

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

Можешь рассказать что означают функции в твоем скриптке GodMod? Я в коде отмечу какие.

Молодец!!!

Я тебе об этом как раз и говорил во втором видео, что нужно апгрейдить скрипт, так как максимальное (скорее всего это не максимальное значение, я имею ввиду, которое по смещению +20, а предыдущее значение)  значение здоровья падает.

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

2 часа назад, Garik66 сказал:

ЗЫ1: ZoraVl, а с голодом и жаждой разобрался?

Нет, я значение найти не как не могу.... Пробовал и отнимать и прибавлять, и в структуре капался... Без толку... 

Вот скрипты котоорые я сделал:

•качество оружия бесконечное

•бесконечные патроны

•очки улучшения скиллов

•всегда день

•быстрый крафт

Ну и остальные твои, год мод и дамаг... 

2 часа назад, Garik66 сказал:

je - если в предыдущем сравнение значения в регистре и адресе равны то прыгаем на .....

@f - короткий прыжок (условный переход) вперёд (от английского forward - вперёд)  на ближайшую безымянную метку @@, может быть  ещё @b - короткий прыжок назад (от английского back - назад).

В чём преимущество использования безымянных меток @@: их ненужно объявлять, и их может быть сколько угодно в скрипте.

 

fld - загружает в верхний регистр FPU значение из адреса (в нашем случае [rsi+20]) сдвигая значения в регистрах.

fst - выгружает из регистра в память без сдвига.

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

Т.е. код:


  fld [rsi+20]  
  fstp [rsi+24]    

нам позволил передать значение из памяти в память, т.к. напрямую этого делать нельзя. 

Подробнее по работе с вещественными числами - погугли и почитай, больше поймёшь.

90 - это  тот же опкод nop, в нашем случае служит для выравнивания, т.е. 5 байт (jmp newmem) + 4 байта (4 nop или 90 90 90 90) = 9 байт (48 8B 46 18 F3 0F 10 45 CC - смотри ниже это байты оригинальной инструкции игры, с которой мы делаем прыжок (переход) на нашу инъекцию.)

db - от английского define byte (определить байт)

dw - word (слово - два байта)

dd - double word (двойное слово - 4 байта) - если значение вещественное то пишем float в скобках.

dq - quadr worrd (учетверённое слово - 8 байт) ставим double, т.е. получаем удвоенное двойное слово.

Об этом всём тоже лучше погуглить и почитать поподробнее.

Спасибо большое за объяснения! Теперь намного понятнее что да как!:)

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

2 часа назад, ZoraVl сказал:

Нет, я значение найти не как не могу.... Пробовал и отнимать и прибавлять, и в структуре капался... Без толку... 

Да разрабы хитрые ребята. :D

А в 4 байтах поискать не пробовал? (Ну не во float т .е.)

Скрипт "Hunger and thirst (Голод и жажда)":

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

{ Game   : 7DaysToDie.exe
  Version: 
  Date   : 2016-07-15
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscan(WATER,89 47 10 48 63 4F 14) // should be unique
alloc(newmem,$1000,2E86DC17)
label(code)
label(return)
registersymbol(WATER)

newmem:
  mov eax,[rdi+14] // проверь может лучше поставить [rdi+18]

code:
  mov [rdi+10],eax
  movsxd  rcx,dword ptr [rdi+14]
  jmp return

WATER:
  jmp newmem
  DB 90 90
return:

[DISABLE]
WATER:
  db 89 47 10 48 63 4F 14

unregistersymbol(WATER)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 2E86DC17

2E86DBFC: 00 00                          -  add [rax],al
2E86DBFE: 00 00                          -  add [rax],al
2E86DC00: 55                             -  push rbp
2E86DC01: 48 8B EC                       -  mov rbp,rsp
2E86DC04: 57                             -  push rdi
2E86DC05: 48 83 EC 18                    -  sub rsp,18
2E86DC09: 48 8B F9                       -  mov rdi,rcx
2E86DC0C: 48 89 55 E8                    -  mov [rbp-18],rdx
2E86DC10: 48 63 47 10                    -  movsxd  rax,dword ptr [rdi+10]
2E86DC14: 03 45 E8                       -  add eax,[rbp-18]
// ---------- INJECTING HERE ----------
2E86DC17: 89 47 10                       -  mov [rdi+10],eax
2E86DC1A: 48 63 4F 14                    -  movsxd  rcx,dword ptr [rdi+14]
// ---------- DONE INJECTING  ----------
2E86DC1E: 3B C1                          -  cmp eax,ecx
2E86DC20: 0F 8E 75 00 00 00              -  jng 2E86DC9B
2E86DC26: B8 01 00 00 00                 -  mov eax,00000001
2E86DC2B: 83 F8 01                       -  cmp eax,01
2E86DC2E: B8 01 00 00 00                 -  mov eax,00000001
2E86DC33: 85 C0                          -  test eax,eax
2E86DC35: F3 0F 10 47 1C                 -  movss xmm0,[rdi+1C]
2E86DC3A: F3 0F 5A C0                    -  cvtss2sd xmm0,xmm0
2E86DC3E: 48 63 47 10                    -  movsxd  rax,dword ptr [rdi+10]
2E86DC42: 48 63 4F 14                    -  movsxd  rcx,dword ptr [rdi+14]
}

 

MAX значение не равно 100, а равно 72. 

В структуре этой инструкции:

[rdi+10] - текущее значение голода (жажды).

[rdi+14] - я выбрал это значение за MAX, но нужно тестить скрипт в игре, может лучше следующее смещение взять.

[rdi+18] - вот это.

Потесть. Видео записывать не буду, вроде ничего сложного.

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

ЗЫ:

ZoraVl, игрушку я сношу (надоел мне этот английский, ни хрена не понимаю ни что делать, никак делать, а без понимания весь интерес к игре теряется:wacko:), но, если сделают поддержку на русском разрабы, либо фанаты опять начнут переводить, то может и поиграю (вроде интересно должно быть повыживать, но конечно же без читов).

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

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

ЗЫ:

ZoraVl, игрушку я сношу (надоел мне этот английский, ни хрена не понимаю ни что делать, никак делать, а без понимания весь интерес к игре теряется:wacko:), но, если сделают поддержку на русском разрабы, либо фанаты опять начнут переводить, то может и поиграю (вроде интересно должно быть повыживать, но конечно же без читов).

На лицензии которая в стиме продается, там есть русификатор от фанатов, в руководствах... Можешь глянуть вот тут

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

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

Да разрабы хитрые ребята. :D

А в 4 байтах поискать не пробовал? (Ну не во float т .е.)

Скрипт "Hunger and thirst (Голод и жажда)":

  Показать содержимое


{ Game   : 7DaysToDie.exe
  Version: 
  Date   : 2016-07-15
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscan(WATER,89 47 10 48 63 4F 14) // should be unique
alloc(newmem,$1000,2E86DC17)
label(code)
label(return)
registersymbol(WATER)

newmem:
  mov eax,[rdi+14] // проверь может лучше поставить [rdi+18]

code:
  mov [rdi+10],eax
  movsxd  rcx,dword ptr [rdi+14]
  jmp return

WATER:
  jmp newmem
  DB 90 90
return:

[DISABLE]
WATER:
  db 89 47 10 48 63 4F 14

unregistersymbol(WATER)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 2E86DC17

2E86DBFC: 00 00                          -  add [rax],al
2E86DBFE: 00 00                          -  add [rax],al
2E86DC00: 55                             -  push rbp
2E86DC01: 48 8B EC                       -  mov rbp,rsp
2E86DC04: 57                             -  push rdi
2E86DC05: 48 83 EC 18                    -  sub rsp,18
2E86DC09: 48 8B F9                       -  mov rdi,rcx
2E86DC0C: 48 89 55 E8                    -  mov [rbp-18],rdx
2E86DC10: 48 63 47 10                    -  movsxd  rax,dword ptr [rdi+10]
2E86DC14: 03 45 E8                       -  add eax,[rbp-18]
// ---------- INJECTING HERE ----------
2E86DC17: 89 47 10                       -  mov [rdi+10],eax
2E86DC1A: 48 63 4F 14                    -  movsxd  rcx,dword ptr [rdi+14]
// ---------- DONE INJECTING  ----------
2E86DC1E: 3B C1                          -  cmp eax,ecx
2E86DC20: 0F 8E 75 00 00 00              -  jng 2E86DC9B
2E86DC26: B8 01 00 00 00                 -  mov eax,00000001
2E86DC2B: 83 F8 01                       -  cmp eax,01
2E86DC2E: B8 01 00 00 00                 -  mov eax,00000001
2E86DC33: 85 C0                          -  test eax,eax
2E86DC35: F3 0F 10 47 1C                 -  movss xmm0,[rdi+1C]
2E86DC3A: F3 0F 5A C0                    -  cvtss2sd xmm0,xmm0
2E86DC3E: 48 63 47 10                    -  movsxd  rax,dword ptr [rdi+10]
2E86DC42: 48 63 4F 14                    -  movsxd  rcx,dword ptr [rdi+14]
}

 

MAX значение не равно 100, а равно 72. 

В структуре этой инструкции:

[rdi+10] - текущее значение голода (жажды).

[rdi+14] - я выбрал это значение за MAX, но нужно тестить скрипт в игре, может лучше следующее смещение взять.

[rdi+18] - вот это.

Потесть. Видео записывать не буду, вроде ничего сложного.

Хорошо спасибо, я полазию посмотрю может что найду

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

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

Хорошо спасибо, я полазию посмотрю может что найду

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

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

К сожалению, трейнер делать нет желания.  Просто приведу исследование.

Все игры сделанные на Unity интересно ломать на высоком уровне.


 

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

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


using UnityEngine;

public class Cheat7DaysToDie : MonoBehaviour
{
	EntityPlayerLocal entityPlayerLocal;
	
	void Update()
	{
		if(entityPlayerLocal == null){
			entityPlayerLocal = GameObject.FindObjectOfType(typeof(EntityPlayerLocal)) as EntityPlayerLocal;
			return;
		}
		
		if(entityPlayerLocal == null){
			return;		
		}

		entityPlayerLocal.Health = entityPlayerLocal.GetMaxHealth();
		entityPlayerLocal.Stamina = entityPlayerLocal.GetMaxStamina();
	}
}

 

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

2.thumb.jpg.5e80b2b5a9785141895d83150b6c
 

1.thumb.jpg.c669544c509e6e35e16ff9ccd88e


Код dll инъекции в mono через AA

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


[ENABLE]
//mono_assembly_foreach
 //mono_assembly_getimage


 alloc(bla, 2048)
 alloc(testdllpath, 256);

 alloc(domain,4)
 alloc(image,4)
 alloc(classdef,4)
 alloc(classobject, 4)
 alloc(methodDesc,4)
 alloc(method,4)

 registersymbol(domain)
 registersymbol(image)
 registersymbol(classdef)
 registersymbol(classobject)
 registersymbol(methodDesc)
 registersymbol(method)

 alloc(result,4)
 registersymbol(result)
 alloc(result2,4)
 registersymbol(result2)

 alloc(strTestLib,64)
 alloc(strClass1,64)
 alloc(strSomething,64)

 alloc(params, 32)
 alloc(exception,4)

 registersymbol(exception)

 strTestLib:
 db 'NamespaceCheats',0

 strClass1:
 db 'Cheats',0

 strSomething:
 db '*:Main',0

 testdllpath:
 db 'D:\Cheat_32.dll',0



 bla:
 //foreach domain is useful too
 call mono.mono_get_root_domain
 mov [domain],eax

 push eax
 call mono.mono_thread_attach
 add esp,4

 push testdllpath
 push [domain]
 call mono.mono_domain_assembly_open
 add esp,8

 push eax
 call mono.mono_assembly_get_image
 add esp,4

 mov [image],eax

 push strClass1
 push strTestLib
 push eax
 call mono.mono_class_from_name
 add esp, c

 mov [classdef],eax

 //create a class
 push eax //classdef
 push [domain]
 call mono.mono_object_new
 add esp, 8

 mov [classobject],eax

 push eax
 call mono.mono_runtime_object_init //execute the nameless constructor (if there is one)
 add esp,4

 //find the method

 push 0
 push strSomething
 call mono.mono_method_desc_new
 add esp,8

 mov [methodDesc], eax

 push [classdef]
 push eax
 call mono.mono_method_desc_search_in_class
 add esp,8
 mov [method], eax

 mov [params],0

 push exception
 push params //no params
 push [classobject]
 push eax //[method]
 call mono.mono_runtime_invoke
 add esp,10

 mov [result],eax
 ret

 result:
 dd 0

 result2:
 dd 0

 createthread(bla)
 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat

 

Как я делал
1. Ставим игру 32 разрядную, т.к. у нас код АА для 32 разрядной инъекции. Может и рабочий на 64, не тестил

2. Отключаем античит, ищем в Интернете

3. Декомпилим через ILSpy файл игры Assembly-CSharp.dll ищем классы по определению

4. Ищем мой скрипт по просмотрю иерархии объектов на форуме.

5. Компилим dll, инжектим, смотрим объекты и компоненты прямо в игре. Находим  EntityPlayerLocal, смотрим его.

6. Открываем доки по Unity если надо и пишем скрипт в Update в новой dll-ке. Её инжектим. Ну и все. Играем с полным xp и здоровьем.

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

Garik66

Я понял, сейчас проверю


MasterGH

Ну для тебя это все просто) А мне до такого уровня еще далеко

 

Garik66

Короче скрипт проверил, активировал, еда стала 100% вода осталась так-же, но в консоли много ошибок и она не закрывается, даже если скрипт отключить, все-равно много ошибок

А если поставить rdi+18 то скрипт работает!):-P Спасибо за помощь!!!

 

А как ты нашел значение то? Как ты понял что оно максимально 72?

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

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

А как ты нашел значение то? Как ты понял что оно максимально 72?

Поиск:

1. Точное значение (float) -ничего :wacko:

1.1. Точное значение (4 байта) - ничего :wacko:

2. Неизвестно значение (на всякий случай поставил тип - 4 байта, если что в конце отсева готов был перевести значения во float), уменьшилось на 1/ не изменилось несколько раз, а потом скушал консервы - увеличилось на не помню сколько. - и вот нашлось в 4 байтах значение - УРРРЯЯЯ :D

 

Ну вообще-то это стандартный поиск.  Если бы и во 2 случае не сработало, пришлось бы делать очень долгий поиск:

3. Неизвестное значение, 4 байта, изменилось/не изменилось.

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

10 час назад, MasterGH сказал:

Код dll инъекции в mono через AA

MasterGH, класс!!!!!

Да наверное на таком уровне ломать, гораздо проще - все структуры на экране - суппперрр!!!:D

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

5789f4fdca0fd_.thumb.gif.beb96ebc8446895


 

В среде разработки работаем практически с исходниками игры. Можно сделать практически все.

*На лишний "return" можно не обращать внимание, забыл удалить.

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

В 12.07.2016в08:45, ZoraVl сказал:

Garik66, сделал скрипт на быстрый крафт (сборку) предметов, можешь в шапке темы закрепить, может понадобится кому-нибудь:

Добавил в шапку.

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

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

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

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