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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 часов назад, Alex2411 сказал:

смотрел  много ваших видео уроков

Вроде у @Garik66 есть урок на эту тему. Если нет - скажи, я сниму.

  • Понравилось 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
20 часов назад, Alex2411 сказал:

думаю наверно я путаю метки  или прыжки

Да хотя бы так... 

Спойлер

[ENABLE]

aobscanmodule(baseplayer_1,opera.exe,00 8B C3 48 8B 5C 24 40)
aobscanmodule(baseplayer_2,opera.exe,41 8D 50 02 33 C9)

alloc(newmem,$1000)

label(exit_1) 
label(function_1)
label(baseplayer_1back)
label(exit_2) 
label(function_2)
label(baseplayer_2back) 

newmem:

function_1:

  exit_1:
  mov rbx,[rsp+40]
  jmp baseplayer_1back

function_2:

  exit_2:
  lea edx,[r8+02]
  xor ecx,ecx
  jmp baseplayer_2back

baseplayer_1:
  jmp function_1
baseplayer_1back:

baseplayer_2:
  jmp function_2
  db 90
baseplayer_2back:

registersymbol(baseplayer_1)
registersymbol(baseplayer_2)

[DISABLE]

baseplayer_1:
  db 48 8B 5C 24 40
baseplayer_2:
  db 41 8D 50 02 33 C9

unregistersymbol(baseplayer_1)
unregistersymbol(baseplayer_2)

dealloc(newmem)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
12 часов назад, Xipho сказал:

Вроде у @Garik66 есть урок на эту тему. Если нет - скажи, я сниму.

 

не нашел . моежт плохо  поискал не знаю. если можешь сделай пожалуйста  видео урок  как  правильно соединить  несколько скриптов . если получиться  на сложном примере  что бы все  особенности показать .
скйчас  я делаю годмод на  одну космическую леталку  там  получилось 5 скриптов . один скрипт  для  поиска фильтра и  другие для разных  повреждений  с фильтром  из первого скрипта. пробовал их  соединить и чего то не так делаю . игра то зависает  то годмод на половину  не работает  то фильтры на  чужих не правильно работают . запутался .  хочу разобраться  что бы  понять  как  надо.

 

еще хотел попросить . продолжи  пожалуйста  уроки  про команды  ассемблера . очень полезно . там  вроде дальше  про команды xmm . давно жду  продолжения .

 

 

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

Да хотя бы так... 

 

спасибо . не большие скрипты я тоже  примерно так  делаю , но не все понятно .  объясни пожалуйта
почему  ты прыгаешь baseplayer_1 на function_1 , а не newmem ?
 почему нет label на function_1 ?
baseplayer_1back надо  обязательно ставить  после  прыжка baseplayer_1 , а не в самом низу ?
можно  сделать один  return в низу для всех или  делать так  нельзя  нужно  отдельный return  каждому скрипту ?
почему registersymbol  у тебя  стоят в конце , а не после label ?
 в  каком месте  правильно поставить  метки от  разных  скриптов  типа
aaa:
 dd 0
bbb:
 dd 0
?
важно в  каком порядке  записать  разные скрипты ? у тебя  с начала baseplayer_1 потом baseplayer_2 , а если  все наоброт будет работать ?

 

заодно  хотел спросить . инструкция  типа [eax+14]  и [eax+00000014] они всегда  одинаковые ? видел в играх так  и так , а чем  отличается не понятно .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 минут назад, Alex2411 сказал:

почему  ты прыгаешь baseplayer_1 на function_1 , а не newmem ?

Потому что кусок выделенной памяти один, а не два...  Прыгаю на начало каждой функции. 

 

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

важно в  каком порядке  записать  разные скрипты ?

Нет.. Это просто различие такое _1 _2 все функции одинаковые, писать быстрее меняя всего лишь цифру.  Можешь хоть с 0 начинать :) выше писать baseplayer_5 а ниже baseplayer_1 этого всего лишь отличия.

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

почему нет label на function_1 ?

Потому что забыл в спешке  :rolleyes: 

 

16 минут назад, Alex2411 сказал:

в  каком месте  правильно поставить  метки от  разных  скриптов  типа

смотря что туда загружаешь по размеру... Хотя мне кажется СЕ само размер выставит и в dd засунет даже qw 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
37 минут назад, LIRW сказал:

Потому что кусок выделенной памяти один, а не два...  Прыгаю на начало каждой функции.

 

а когда скрипт  один  почему тогда  можно  прыгать  jmp newmem , а не делать отдельную метку function после newmem  что бы прыгать на function? мне не  очень понятно .

 

38 минут назад, LIRW сказал:

смотря что туда загружаешь по размеру..

 

не , я про другое . попробую объяснить. допустим  есть скрипт поиск  фильтра игрока. нашел число игрока  записал в метку  filter . есть другой скрипт умножение  скорости игрока . умножает на метку  speed , а свой чужой фильтрует через метку filter  из первого  срипта. я хочу  эти скрипты соединить . мне нужно  записать где то в новом скрипте
filter:
 dd 0 //с начала ноль в фильтр
speed:
 dd 1 //с начала умножать скорость на 1
в каком  месте скрипта  эти метки из  разных скриптов нужно  записать что бы скрипт правильно  работал?  когда скрипт один я записываю перед  прыжком на newmem , а если  скриптов несколько ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
17 минут назад, Alex2411 сказал:

а когда скрипт  один  почему тогда  можно  прыгать  jmp newmem

Наверное потому, что и function_1 vs function_2 писать не надо. Делить то не чего.. 

31 минуту назад, Alex2411 сказал:

опустим  есть скрипт поиск  фильтра игрока. нашел число игрока  записал в метку  filter

Если я правильно понял, то как то так наверное делается..  

Спойлер

newmem: 

qwe_1: 
mov eax,[ecx+4] 
mov [filter],eax
jmp ret_1

qwe_2:  
mov ebx,[ecx+4] 
cmp [filter],ebx 
jne exit 
imul ebx,[speed]

exit: 
jmp ret_2 

speed: 
dd 4 <---------- множ как угодно.

конечно такое на вряд ли будет, так как данные скорее всего с (.) тут зависит от ситуации и везде по разному делается...  
Но опять же, можно и почитать в интернете о множении тех же xmm... Способов реализовать подобное много. Это всего лишь пример.

 

 

  • Плюс 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
51 минуту назад, LIRW сказал:

Если я правильно понял, то как то так наверное делается.

 

спсибо  что помогаешь. форум  не дает плюсик поставить. 

умножать я вроде умею . тут мне не понятно  другое .  куда в твоем  примере скрипта будет правильно вписать метку
filter:
 dd 0
из первого  скрипта ?  сразу после jmp ret_1 или после jmp ret_2  рядом с меткой speed или  где то в другом месте ?
просто мне не понятно  в каком  месте скрипта записывать  такие метки из  разных скриптов, если  несколько скриптов надо объединить  в один.. то ли все метки  рядом  то ли  каждую рядом  с частью от ее скрипта

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
14 минут назад, Alex2411 сказал:

просто мне не понятно  в каком  месте скрипта записывать  такие метки из  разных скриптов,

Всё можно писать в самом конце последней функции.  

Или там же так же..   

Спойлер

qwe_1: 
mov eax,[ecx+4] 
mov [filter],eax
jmp ret_1
filter: 
dd 0 

qwe_2:  
mov ebx,[ecx+4] 
cmp [filter],ebx 
jne exit 
imul ebx,[speed]

 

Спойлер

originalcode: 
xxxxxxxx 
jmp return 

metka_1: // пиши сколько хочешь.. 
dd 
metka_2: 
dd  

function_1: 
jmp // нужная функция 
return:

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
11 минут назад, LIRW сказал:

Всё можно писать в самом конце последней функции.  

 

теперь понял . :)

спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, Alex2411 сказал:

не нашел . моежт плохо  поискал не знаю

я в очень многих видео останавливался на объединении скриптов (конечно об этом говорилось в конце видео). Ну и думаю ты понимаешь, что объединялись скрипты при написании более сложных опций.

Ну к примеру взял вот первое попавшееся видос: 

 

  • Плюс 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Garik66 сказал:

я в очень многих видео останавливался на объединении скриптов (конечно об этом говорилось в конце видео). Ну и думаю ты понимаешь, что объединялись скрипты при написании более сложных опций.

 

 я даже  не знал .  игры дарк соулс у меня нет , а по названию видео не понятно что там есть про объединение скриптов . скачал  буду смотреть . спасибо.
посоветуй еще пожалуйста  что посмотреть твоего видео по  моему вопросу . чем больше тем лучше . сложных опций это  очень хорошо . буду  изучать .  полезных  знаний  много не бывает )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, Alex2411 сказал:

посоветуй еще пожалуйста  что посмотреть твоего видео по  моему вопросу

шутишь что-ли..:D

У меня где-то 300 видео - ты думаешь я помню, где в каком о чем говорил.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 09.01.2019 в 22:22, Alex2411 сказал:

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

 

Просто покажи как ты объединяешь скрипты. Может быть там ошибка от простой до той, с которой надо сидеть и разбираться в отладке. CE иногда может с багами скрипты компилировать

Поделиться сообщением


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

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

call xxx1
fld qword ptr [eax+40]
call xxx2


мне нужно  инжекцию кода  на инструкцию fld qword ptr [eax+40] . она занимает 3 байт .  на  адреса call xxx1  и call xxx2  игра иногда прыгает.  поэтому  когда call  скрипт переносит  в выделеную память игра  не попадает  на call  и вылетает .
 что  можно сделать ?

Изменено пользователем Xipho
Правила публикации и использования тэгов отменили? Нет, не думаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Alex2411 сказал:

 что  можно сделать ?

инжект на другом куске памяти где-нибудь до выполнения этой инструкции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, partoftheworlD сказал:

инжект на другом куске памяти где-нибудь до выполнения этой инструкции.

 

 

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

00626966 - E8 29D8DDFF           - call 00404194
0062696B - DD 40 40              - fld qword ptr [eax+40]
0062696E - E8 A1C6DDFF           - call 00403014

мне  нужно записать  число  double в   [eax+40]  до срабатывания  инструкции   fld qword ptr [eax+40]
код игры  по  адресу  call 00404194

00404194 - 85 C0                 - test eax,eax
00404196 - 74 16                 - je 004041AE
00404198 - 89 C1                 - mov ecx,eax
0040419A - 8B 09                 - mov ecx,[ecx]
0040419C - 39 D1                 - cmp ecx,edx
0040419E - 74 0E                 - je 004041AE
004041A0 - 8B 49 DC              - mov ecx,[ecx-24]
004041A3 - 85 C9                 - test ecx,ecx
004041A5 - 75 F3                 - jne 0040419A
004041A7 - B0 0A                 - mov al,0A { 10 }
004041A9 - E9 9EEAFFFF           - jmp 00402C4C
004041AE - C3                    - ret 

нужные мне  eax остаються после  cmp ecx,edx если  регистры равны . но инжектить не получаеться потому  что на  инструкцию mov ecx,[ecx]  есть прыжки и  игра вылетает . на mov ecx,[ecx-24] вроде то же есть .
я не знаю что сделать . помогите пожалуйста

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
37 минут назад, Alex2411 сказал:

у меня  не получаеться

Получи адрес который работает с этой инструкцией 

fld qword ptr [eax+40]

А после ставь бряк на доступ по найденному адресу, должны появиться ещё инструкции работающие с этим адресом и пробуй делать инжект на них. Так же, можно найти откуда берется значение в адресе [eax+40] и использовать скрипт для записи в адрес, который будет писать значение в [eax+40].

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
48 минут назад, partoftheworlD сказал:

ставь бряк на доступ по найденному адресу, должны появиться ещё инструкции работающие с этим адресом и пробуй делать инжект на них. Так же, можно найти откуда берется значение в адресе [eax+40] и использовать скрипт для записи в адрес, который будет писать значение в [eax+40].

 

 я  так сразу пробовал сделать.. есть еще 2  инструкции , которые  работают с адресами  [eax+40] . одна  из них на  запись, но  они работают еще с  очень большим  числом адресов . с врагами с союзниками с стеком  потом еще какими то адресами когда  загружаеться другая локация. фильтр  не сделать .  а  в этой инструкции сами  отсеиваються  нужные регистры  eax  всего от 2 до  16 нужных .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, Alex2411 сказал:

мне  нужно записать  число  double в   [eax+40]  до срабатывания  инструкции   fld qword ptr [eax+40]

1. нужно посмотреть в самой функции call 00404194 и найти участок игрового кода, где можно сделать инъекцию, после записи указателя в регистр eax.

2. 

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

до срабатывания  инструкции

не обязательно "до", можно и после (нужно смотреть игровой код), т.е. в функции call 00403014 тоже можно найти участок кода.
нужно будет убрать из стека st(0) записать новое значение в  [eax+40] и по новой записать в стек  fld qword ptr [eax+40]

ЗЫ: если функции не большие сделай скрины их обоих и выложи сюда, чтобы можно было подсказать. Да и прячь их в спойлеры. Вот за этот твой пост уже можно выдавать пред, т.к. не соотвествует правилам форума.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
6 часов назад, Garik66 сказал:

нужно посмотреть в самой функции call 00404194 и найти участок игрового кода, где можно сделать инъекцию, после записи указателя в регистр eax.

 

функцию call 00404194 я  раньше  привел целиком . забыл  тег спойлер поставить извини .посмотри там  все от адреса 00404194  до выхода ret .
инжекцю  я не знаю где сделать . не получаеться . до инструкции  cmp ecx,edx  много лишних срабатываний . после  ecx = edx остаються только нужные мне eax , но видишь там  сразу  условный прыжок на выход из call.  посмотри на инструкцию  перед сравнением  регистров mov ecx,[ecx] туда  тоже прыжки . еще  на инструкцию по ниже mov ecx,[ecx-24] откуда то есть прыжок .

 

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

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

 

я понимаю . то же не нашел как сделать .
код в call 00403014

00403014 - 83 EC 08              - sub esp,08 { 8 }
00403017 - DF 3C 24              - fistp qword ptr [esp]
0040301A - 9B                    - wait 
0040301B - 58                    - pop eax
0040301C - 5A                    - pop edx
0040301D - C3                    - ret 

проблема  как я писал в начале что на call 00403014 игра  откуда то прыгает . в eax появляется много лишних . инжекция  на sub esp,08  крашит игру .

 

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

убрать из стека st(0)

 

хотел  спросить . мне бывает нужно  обнулить st(0) без выталкивание , а бывает  нужно  вытолкнуть как  не нужный . как  лучше это  делать ? я обычно  умножал на  метку = 0 или  выталкивал в не нужный участо памяти , но  так наверно не правильно . объясни пожалуйста

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 часов назад, Alex2411 сказал:

функцию call 00404194 я  раньше  привел целиком

ОК.

Не обратил внимание. Так как в том call три прыжка то неизвестно откуда приходит к нам значение твоего eax. (тут уже лучше делать трассировку и смотреть.)

Из второго call (нижнего) может получиться.

Сделай стандартный СЕ-ный скрипт с Логами из инструкции 

00403014 - 83 EC 08              - sub esp,08 { 8 }

и выложи сюда скрипт (не забудь про теги спойлера и кода), попробую написать тебе скрипт. Да и напиши какое число (само собой double) тебе нужно записать в адрес.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Garik66 сказал:

Из второго call (нижнего) может получиться.

 

 

на второй call  игра делает много  прыжков из других мест  поэтому  на интрукции sub esp,08  появляеться очень  много других  срабатываний . на  инструкции  fld qword ptr [eax+40]  срабатывает только  нужные мне  eax , а  на sub esp,08  уже  появляються другие eax . число double 100 .

это  скрипт как ты сказал  на sub esp,08, но с ним  игра  сразу крашится .

Спойлер

[ENABLE]

aobscanmodule(INJECT,Rangers.exe,83 EC 08 DF 3C 24 9B 58 5A C3) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

code:
  sub esp,08
  fistp qword ptr [esp]
  jmp return

INJECT:
  jmp newmem
  nop
return:
registersymbol(INJECT)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
INJECT:
  db 83 EC 08 DF 3C 24

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Rangers.exe"+3014

"Rangers.exe"+2FF8: D9 7C 24 02           -  fnstcw [esp+02]
"Rangers.exe"+2FFC: 9B                    -  wait 
"Rangers.exe"+2FFD: 66 81 4C 24 02 00 0F  -  or word ptr [esp+02],0F00
"Rangers.exe"+3004: D9 6C 24 02           -  fldcw [esp+02]
"Rangers.exe"+3008: D9 FC                 -  frndint 
"Rangers.exe"+300A: 9B                    -  wait 
"Rangers.exe"+300B: D9 2C 24              -  fldcw [esp]
"Rangers.exe"+300E: 83 C4 04              -  add esp,04
"Rangers.exe"+3011: DE E9                 -  fsubp st(1),st(0)
"Rangers.exe"+3013: C3                    -  ret 
// ---------- INJECTING HERE ----------
"Rangers.exe"+3014: 83 EC 08              -  sub esp,08
"Rangers.exe"+3017: DF 3C 24              -  fistp qword ptr [esp]
// ---------- DONE INJECTING  ----------
"Rangers.exe"+301A: 9B                    -  wait 
"Rangers.exe"+301B: 58                    -  pop eax
"Rangers.exe"+301C: 5A                    -  pop edx
"Rangers.exe"+301D: C3                    -  ret 
"Rangers.exe"+301E: 8B C0                 -  mov eax,eax
"Rangers.exe"+3020: 83 EC 0C              -  sub esp,0C
"Rangers.exe"+3023: D9 3C 24              -  fnstcw [esp]
"Rangers.exe"+3026: D9 7C 24 02           -  fnstcw [esp+02]
"Rangers.exe"+302A: 9B                    -  wait 
"Rangers.exe"+302B: 66 81 4C 24 02 00 0F  -  or word ptr [esp+02],0F00
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, Alex2411 сказал:

число double 100 .

Попробуй:

Спойлер

[ENABLE]
aobscanmodule(INJECT,Rangers.exe,83 EC 08 DF 3C 24 9B 58 5A C3)
alloc(newmem,$1000)
label(code)
label(return)
label(value)
registersymbol(INJECT)

newmem:
  fstp qword ptr [eax+40]
  fld qword ptr [value]
  fst qword ptr [eax+40]

code:
  sub esp,08
  fistp qword ptr [esp]
  jmp return

value:
  dq (double)100

INJECT:
  jmp newmem
  db 90
return:

[DISABLE]
INJECT:
  db 83 EC 08 DF 3C 24

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Rangers.exe"+3014

"Rangers.exe"+2FF8: D9 7C 24 02           -  fnstcw [esp+02]
"Rangers.exe"+2FFC: 9B                    -  wait
"Rangers.exe"+2FFD: 66 81 4C 24 02 00 0F  -  or word ptr [esp+02],0F00
"Rangers.exe"+3004: D9 6C 24 02           -  fldcw [esp+02]
"Rangers.exe"+3008: D9 FC                 -  frndint
"Rangers.exe"+300A: 9B                    -  wait
"Rangers.exe"+300B: D9 2C 24              -  fldcw [esp]
"Rangers.exe"+300E: 83 C4 04              -  add esp,04
"Rangers.exe"+3011: DE E9                 -  fsubp st(1),st(0)
"Rangers.exe"+3013: C3                    -  ret
// ---------- INJECTING HERE ----------
"Rangers.exe"+3014: 83 EC 08              -  sub esp,08
"Rangers.exe"+3017: DF 3C 24              -  fistp qword ptr [esp]
// ---------- DONE INJECTING  ----------
"Rangers.exe"+301A: 9B                    -  wait
"Rangers.exe"+301B: 58                    -  pop eax
"Rangers.exe"+301C: 5A                    -  pop edx
"Rangers.exe"+301D: C3                    -  ret
"Rangers.exe"+301E: 8B C0                 -  mov eax,eax
"Rangers.exe"+3020: 83 EC 0C              -  sub esp,0C
"Rangers.exe"+3023: D9 3C 24              -  fnstcw [esp]
"Rangers.exe"+3026: D9 7C 24 02           -  fnstcw [esp+02]
"Rangers.exe"+302A: 9B                    -  wait
"Rangers.exe"+302B: 66 81 4C 24 02 00 0F  -  or word ptr [esp+02],0F00
}

 

Отпишись о результатах.

ЗЫ: хотя это

13 минут назад, Alex2411 сказал:

на второй call  игра делает много  прыжков из других мест

может помешать - нужен будет фильтровать, как-то по адресу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
17 минут назад, Garik66 сказал:

Попробуй

 

включил . сразу краш игры.
 не получиться . там куча  других срабатываний . нельзя  писать в [eax+40] на втором call .

 

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

нужен будет фильтровать, как-то по адресу

 

я пробовал. не  получаеться сделать фильтр . обращений  из разных  мест игры больше  50 .

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

×

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

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