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

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


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

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

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

 

Пытаюсь помочь с решением пользователю 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
}

 

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

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

До разобрался, переписал скрипт, 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 байт.

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

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
}

 

 

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

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

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?

 

 

 

 

 

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

Vuqar

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

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

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

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

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
}

 

 

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

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

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

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