Garik66

Всё тот же 8-байтный прыжок

6 сообщений в этой теме

Наконец-то и я столкнулся с этой проблемой, просмотрел наш форум, тем было несколько, но везде нету окончательного решения этого вопроса. Поэтому повторю её.

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

 

Пытаюсь помочь с решением пользователю Vuqar в этой теме (читайте моё сообщение).

Изначально полученный СЕ-ный АА-скрипт такой:

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

{ Game   : chrome.exe
  Version: 
  Date   : 2016-04-29
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscan(INJECT,E0 F2 0F 10 4D D8 F2 0F 11 41 20) // should be unique
alloc(newmem,$1000,551210111C0)
label(code)
label(return)
registersymbol(INJECT)

newmem:

code:
  movsd [rcx+20],xmm0
  jmp return

INJECT+06:
  jmp newmem
return:

[DISABLE]
INJECT+06:
  db F2 0F 11 41 20 

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 551210111C0

55121011189: 49 8B 48 00                    -  mov rcx,[r8+00]
5512101118D: F2 41 0F 10 40 08              -  movsd xmm0,[r8+08]
55121011193: F2 41 0F 10 60 10              -  movsd xmm4,[r8+10]
55121011199: F2 41 0F 10 58 18              -  movsd xmm3,[r8+18]
5512101119F: F2 41 0F 10 50 20              -  movsd xmm2,[r8+20]
551210111A5: F2 41 0F 10 48 28              -  movsd xmm1,[r8+28]
551210111AB: F2 0F 11 4D D8                 -  movsd [rbp-28],xmm1
551210111B0: F2 41 0F 10 48 30              -  movsd xmm1,[r8+30]
551210111B6: F2 0F 11 4D E0                 -  movsd [rbp-20],xmm1
551210111BB: F2 0F 10 4D D8                 -  movsd xmm1,[rbp-28]
// ---------- INJECTING HERE ----------
551210111C0: F2 0F 11 41 20                 -  movsd [rcx+20],xmm0
// ---------- DONE INJECTING  ----------
551210111C5: F2 0F 10 45 E0                 -  movsd xmm0,[rbp-20]
551210111CA: F2 0F 11 61 28                 -  movsd [rcx+28],xmm4
551210111CF: F2 0F 11 59 30                 -  movsd [rcx+30],xmm3
551210111D4: F2 0F 11 51 38                 -  movsd [rcx+38],xmm2
551210111D9: F2 0F 11 49 40                 -  movsd [rcx+40],xmm1
551210111DE: F2 0F 11 41 48                 -  movsd [rcx+48],xmm0
551210111E3: 48 8B 4D E8                    -  mov rcx,[rbp-18]
551210111E7: 48 89 4A 58                    -  mov [rdx+58],rcx
551210111EB: 48 8B E5                       -  mov rsp,rbp
551210111EE: 5D                             -  pop rbp
}

 

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

Пробовал несколько вариантов решения, последнее из них делал опираясь на это сообщение пользователя gmz.

Вот мой код:

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

{ Game   : chrome.exe
  Version: 
  Date   : 2016-04-29
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscan(INJECT,E0 F2 0F 10 4D D8 F2 0F 11 41 20) // should be unique
alloc(newmem,$1000,551210111C0)
label(code)
label(return)
registersymbol(INJECT)

newmem:

code:
  movsd [rcx+20],xmm0
  movsd xmm0,[rbp-20]
  movsd [rcx+28],xmm4
  mov rax,[return]
  jmp rax

INJECT+06:
  push rax
  mov rax,[newmem]
  jmp rax
  nop
return:
  pop rax

[DISABLE]
INJECT+06:
  db F2 0F 11 41 20 F2 0F 10 45 E0 F2 0F 11 61 28

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 551210111C0

55121011189: 49 8B 48 00                    -  mov rcx,[r8+00]
5512101118D: F2 41 0F 10 40 08              -  movsd xmm0,[r8+08]
55121011193: F2 41 0F 10 60 10              -  movsd xmm4,[r8+10]
55121011199: F2 41 0F 10 58 18              -  movsd xmm3,[r8+18]
5512101119F: F2 41 0F 10 50 20              -  movsd xmm2,[r8+20]
551210111A5: F2 41 0F 10 48 28              -  movsd xmm1,[r8+28]
551210111AB: F2 0F 11 4D D8                 -  movsd [rbp-28],xmm1
551210111B0: F2 41 0F 10 48 30              -  movsd xmm1,[r8+30]
551210111B6: F2 0F 11 4D E0                 -  movsd [rbp-20],xmm1
551210111BB: F2 0F 10 4D D8                 -  movsd xmm1,[rbp-28]
// ---------- INJECTING HERE ----------
551210111C0: F2 0F 11 41 20                 -  movsd [rcx+20],xmm0
// ---------- DONE INJECTING  ----------
551210111C5: F2 0F 10 45 E0                 -  movsd xmm0,[rbp-20]
551210111CA: F2 0F 11 61 28                 -  movsd [rcx+28],xmm4
551210111CF: F2 0F 11 59 30                 -  movsd [rcx+30],xmm3
551210111D4: F2 0F 11 51 38                 -  movsd [rcx+38],xmm2
551210111D9: F2 0F 11 49 40                 -  movsd [rcx+40],xmm1
551210111DE: F2 0F 11 41 48                 -  movsd [rcx+48],xmm0
551210111E3: 48 8B 4D E8                    -  mov rcx,[rbp-18]
551210111E7: 48 89 4A 58                    -  mov [rdx+58],rcx
551210111EB: 48 8B E5                       -  mov rsp,rbp
551210111EE: 5D                             -  pop rbp
}

 

 Но также вылет из игры. Подскажите, что делаю не правильно. Внизу скрипта сохранены логи инструкций для выравнивания.

0

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


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

До разобрался, переписал скрипт, 7 раз перезапустил игру - работает. И того решение:

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

{ Game   : chrome.exe
  Version: 
  Date   : 2016-04-29
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscan(INJECT,E0 F2 0F 10 4D D8 F2 0F 11 41 20) // should be unique
alloc(newmem,$1000,551210111C0)
label(code)
label(return)
registersymbol(INJECT)

newmem:
 
code:
  movsd [rcx+20],xmm0
  movsd xmm0,[rbp-20]                            // инструкция добавлена для выравнивания
  movsd [rcx+28],xmm4                            // инструкция добавлена для выравнивания
  mov rax,return                                 // загружаем в rax, адрес возврата
  jmp rax                                        // прыгаем на этот адрес.  
 
INJECT+06:
  push rax                                       // Сохраняем регистр, перед использованием                                    
  mov rax,newmem                                 // загружаем в rax, адрес прыжка на нашу инъекцию
  jmp rax                                        // прыгаем на этот адрес.
  nop                                            // nop добавлен для выравнивания 
return:                                          // Метка возврата в код игры
  pop rax                                        // Восстанавливаем регистр.

[DISABLE]
INJECT+06:
  db F2 0F 11 41 20 F2 0F 10 45 E0 F2 0F 11 61 28 // добавил две инструкции для выравнивания.

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 551210111C0

55121011189: 49 8B 48 00                    -  mov rcx,[r8+00]
5512101118D: F2 41 0F 10 40 08              -  movsd xmm0,[r8+08]
55121011193: F2 41 0F 10 60 10              -  movsd xmm4,[r8+10]
55121011199: F2 41 0F 10 58 18              -  movsd xmm3,[r8+18]
5512101119F: F2 41 0F 10 50 20              -  movsd xmm2,[r8+20]
551210111A5: F2 41 0F 10 48 28              -  movsd xmm1,[r8+28]
551210111AB: F2 0F 11 4D D8                 -  movsd [rbp-28],xmm1
551210111B0: F2 41 0F 10 48 30              -  movsd xmm1,[r8+30]
551210111B6: F2 0F 11 4D E0                 -  movsd [rbp-20],xmm1
551210111BB: F2 0F 10 4D D8                 -  movsd xmm1,[rbp-28]
// ---------- INJECTING HERE ----------
551210111C0: F2 0F 11 41 20                 -  movsd [rcx+20],xmm0
// ---------- DONE INJECTING  ----------
551210111C5: F2 0F 10 45 E0                 -  movsd xmm0,[rbp-20]
551210111CA: F2 0F 11 61 28                 -  movsd [rcx+28],xmm4
551210111CF: F2 0F 11 59 30                 -  movsd [rcx+30],xmm3
551210111D4: F2 0F 11 51 38                 -  movsd [rcx+38],xmm2
551210111D9: F2 0F 11 49 40                 -  movsd [rcx+40],xmm1
551210111DE: F2 0F 11 41 48                 -  movsd [rcx+48],xmm0
551210111E3: 48 8B 4D E8                    -  mov rcx,[rbp-18]
551210111E7: 48 89 4A 58                    -  mov [rdx+58],rcx
551210111EB: 48 8B E5                       -  mov rsp,rbp
551210111EE: 5D                             -  pop rbp
}

 

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

Для чего и как было сделано выравнивание:

Для чего - чтобы не нарушать дальнейшего кода игры.

Как:

у нас изначально прыжок jmp newmem и оригинальная инструкция movsd [rcx+20],xmm0 по 5 байт.

При изменении кода прыжка у нас в сумме 14 байт+ 1 байт nop и оригинальные инструкции  в сумме 3 штуки тоже 15 байт.

0

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


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

eto pravilno ? esli ne pravilno isprav eto ,ostalnie ya sam vsyo ponyal

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

{ Game   : chrome.exe
  Version: 
  Date   : 2016-04-30
  Author : Resul

  This script does blah blah blah
}

[ENABLE]

 
 
aobscan(POOL,F3 0F 7E 51 10 0F 28) // should be unique
alloc(newmem,$1000)

label(code)
label(return)
registersymbol(POOL)
newmem:

code:
  movq xmm2,[ecx+10]
  movaps xmm3,xmm7
  mulsd xmm3,xmm2
  mov eax,[return]
  jmp eax

POOL:
  push eax
  mov eax,[newmem]
  jmp eax
  nop
return:
  pop eax


[DISABLE]

POOL:
  db F3 0F 7E 51 10 0F 28 DF F2 0F 59 DA

unregistersymbol(POOL)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 09B1F4B2

09B1F48D: 73 08              -  jae 09B1F497
09B1F48F: E8 92 FB FF 4B     -  call pepflashplayer.dll+8F026
09B1F494: 8B 55 10           -  mov edx,[ebp+10]
09B1F497: 8B 42 04           -  mov eax,[edx+04]
09B1F49A: 8B 4A 08           -  mov ecx,[edx+08]
09B1F49D: 85 C0              -  test eax,eax
09B1F49F: 0F 84 29 01 00 00  -  je 09B1F5CE
09B1F4A5: F3 0F 7E 78 10     -  movq xmm7,[eax+10]
09B1F4AA: 85 C9              -  test ecx,ecx
09B1F4AC: 0F 84 1C 01 00 00  -  je 09B1F5CE
// ---------- INJECTING HERE ----------
09B1F4B2: F3 0F 7E 51 10     -  movq xmm2,[ecx+10]
// ---------- DONE INJECTING  ----------
09B1F4B7: 0F 28 DF           -  movaps xmm3,xmm7
09B1F4BA: F2 0F 59 DA        -  mulsd xmm3,xmm2
09B1F4BE: F3 0F 7E 40 20     -  movq xmm0,[eax+20]
09B1F4C3: F3 0F 7E 61 18     -  movq xmm4,[ecx+18]
09B1F4C8: 0F 28 C8           -  movaps xmm1,xmm0
09B1F4CB: F2 0F 59 CC        -  mulsd xmm1,xmm4
09B1F4CF: F2 0F 58 D9        -  addsd xmm3,xmm1
09B1F4D3: 66 0F D6 5D E0     -  movq [ebp-20],xmm3
09B1F4D8: F3 0F 7E 48 18     -  movq xmm1,[eax+18]
09B1F4DD: 0F 28 D9           -  movaps xmm3,xmm1
}

 

 

0

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


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

code:
  movsd [rcx+20],xmm0
  movsd xmm0,[rbp-20]
  movsd [rcx+28],xmm4
  mov rax,[return]
  jmp rax

INJECT+06:
  push rax
  mov rax,[newmem]
  jmp rax
  nop
return:
  pop rax

 

eto v tvayom sluchae ttak poluchilos i ti napisal tak

 

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

movq xmm2,[ecx+10]   //eti 3 znachene 12 bayt
movaps xmm3,xmm7
mulsd xmm3,xmm2     //kak budet v mayom sluchae?

 

 

 

 

 

0

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


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

Vuqar

1. Пользуйся тегами кода и спойлера.

2. Выложи свой АА-скрипт сюда.

Если не знаешь как, посмотри эту тему  

0

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


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

eto pravilno ? esli ne pravilno isprav eto ,ostalnie ya sam vsyo ponyal

Нет.

1. return и newmem - это не указатели, а сами адреса и поэтому квадратные скобки не нужны.

2. Не правильно выравнен код, вот это участок:

  push rax
  mov rax,[newmem]
  jmp rax
  pop rax

у меня в 64-битной системе  равен 14 байтам. твой же участок будет равным 10 байтам.

3. Тебе не нужно менять скрипт, так как у тебя прыжок на 4 байта. Т.е. воспользуйся СЕ-ным скриптом:

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

{ Game   : chrome.exe
  Version: 
  Date   : 2016-04-30
  Author : Resul

  This script does blah blah blah
}

[ENABLE]
aobscan(POOL,F3 0F 7E 51 10 0F 28) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
registersymbol(POOL)

newmem:

code:
  movq xmm2,[ecx+10]
  jmp return

POOL:
  jmp newmem
return:

[DISABLE]
POOL:
  db F3 0F 7E 51 10 

unregistersymbol(POOL)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 09B1F4B2

09B1F48D: 73 08              -  jae 09B1F497
09B1F48F: E8 92 FB FF 4B     -  call pepflashplayer.dll+8F026
09B1F494: 8B 55 10           -  mov edx,[ebp+10]
09B1F497: 8B 42 04           -  mov eax,[edx+04]
09B1F49A: 8B 4A 08           -  mov ecx,[edx+08]
09B1F49D: 85 C0              -  test eax,eax
09B1F49F: 0F 84 29 01 00 00  -  je 09B1F5CE
09B1F4A5: F3 0F 7E 78 10     -  movq xmm7,[eax+10]
09B1F4AA: 85 C9              -  test ecx,ecx
09B1F4AC: 0F 84 1C 01 00 00  -  je 09B1F5CE
// ---------- INJECTING HERE ----------
09B1F4B2: F3 0F 7E 51 10     -  movq xmm2,[ecx+10]
// ---------- DONE INJECTING  ----------
09B1F4B7: 0F 28 DF           -  movaps xmm3,xmm7
09B1F4BA: F2 0F 59 DA        -  mulsd xmm3,xmm2
09B1F4BE: F3 0F 7E 40 20     -  movq xmm0,[eax+20]
09B1F4C3: F3 0F 7E 61 18     -  movq xmm4,[ecx+18]
09B1F4C8: 0F 28 C8           -  movaps xmm1,xmm0
09B1F4CB: F2 0F 59 CC        -  mulsd xmm1,xmm4
09B1F4CF: F2 0F 58 D9        -  addsd xmm3,xmm1
09B1F4D3: 66 0F D6 5D E0     -  movq [ebp-20],xmm3
09B1F4D8: F3 0F 7E 48 18     -  movq xmm1,[eax+18]
09B1F4DD: 0F 28 D9           -  movaps xmm3,xmm1
}

 

 

0

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас