Сейчас на форуме: _MBK_, Adler (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Как заменить cmp?
Посл.ответ Сообщение

Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 августа 2011 13:12
· Личное сообщение · #1

Вот кусок кода из IDA:

Code:
  1. .text:004C47DF 028                 inc     ebx             ; default
  2. .text:004C47DF                                             ; jumptable 004C478B cases 0-2
  3. .text:004C47E0 028                 add     ebp, 38h
  4. .text:004C47E3 028                 cmp     ebx, 4Bh        ; edx < 4Bh (markers)
  5. .text:004C47E6 028                 fldz
  6. .text:004C47E8 028                 fldz
  7. .text:004C47EA 028                 fldz
  8. .text:004C47EC 028                 jl      loc_4C49F0


беда в том что в это сравнивание больше байта не запишешь .text:004C47E3 028 cmp ebx, 4Bh
как мне пачнуть его чтобы можно было записывать 2 байта туда,
писал такую функцию:

Code:
  1. void injectFunction (DWORD address, DWORD function)
  2. {
  3. DWORD Old;
  4. VirtualProtect( PVOID(address), 16, PAGE_READWRITE, &Old);
  5. BYTE * patch = (BYTE *)address;
  6. *patch = 0xE9; // JMP
  7. *(DWORD *)(patch+1) = (function-(address+5));
  8. VirtualProtect( PVOID(address), 16, Old, &Old);
  9. }


Пытался кусок кода заменить, но все равно ошибка!

Code:
  1. injectFunction(0x04C47E3, (DWORD)Code_1);
  2.  
  3. void  Code_1()
  4. {
  5.  _asm cmp  ebx, 10h
  6.  _asm fldz
  7.  return;
  8. }


Сделал и так, все ровно вылет:

Code:
  1. __declspec(naked) void  Code_1()
  2. {
  3.  _asm inc     ebx            
  4.  _asm add     ebp, 38h
  5.  _asm cmp     ebx, 4Bh
  6.  _asm retn
  7. }


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




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 13 августа 2011 13:21 · Поправил: daFix
· Личное сообщение · #2

CMP EBX,4B (83 FB 4B)
Тут в вашем распоряжении целых 3 байта. Но приведённый выше код больше похож на мусор.
Можете рассказать о жертве и какова конечная цель?
Если вы просто хотите через инжект записать туда нужные байты, тогда сделайте так:
asm
{
mov [addr + 00], 01
mov [addr + 01], 02
mov [addr + 02], 03
}
Вместо addr + 00 просто запишите нужный адрес. Если аттрибуты секции не позволяют туда писать, тогда
надо установить нужные спомощью VirtualProtect, как вы это и делали в приведённом выше посте

-----
Research For Food





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 13 августа 2011 13:22
· Личное сообщение · #3

Ты на функцию передаешь управление через JUMP, а возвращаешься через RET. Откуда в стеке возьмется адрес возврата??

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 13 августа 2011 14:00
· Личное сообщение · #4

ТС походу вообще не понимает что делает

-----
Yann Tiersen best and do not fuck


| Сообщение посчитали полезным: MasterSoft

Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 августа 2011 16:28
· Личное сообщение · #5

блин так что делать то?



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 13 августа 2011 16:32
· Личное сообщение · #6

а что надо-то?



Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 13 августа 2011 17:20
· Личное сообщение · #7

надо увеличить cmp:
Code:
  1. cmp     ebx, 1100h





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 13 августа 2011 17:26 · Поправил: reversecode
· Личное сообщение · #8

E9-1 вам в помощь

ннда http://www.gamedev.ru/code/forum/?id=151056




Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 13 августа 2011 17:42
· Личное сообщение · #9

jmp на свободное место
cmp ebx, 12345678h
jmp обратно

-----
Don_t hate the cracker - hate the code.





Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 13 августа 2011 21:14
· Личное сообщение · #10

Если выше по коду есть место, то можно задействовать неиспользуемый регистр:

push 1100h
pop reg
...
cmp ebx, reg

-----
EnJoy!





Ранг: 328.7 (мудрец), 73thx
Активность: 0.170.01
Статус: Участник

Создано: 13 августа 2011 21:15
· Личное сообщение · #11

cmp bh,11h не подходит?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 13 августа 2011 21:25
· Личное сообщение · #12

r99
По-моему, замена неэквивалентна. Вдруг в ebx 33441122h, а надо 00001100h.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 328.7 (мудрец), 73thx
Активность: 0.170.01
Статус: Участник

Создано: 13 августа 2011 21:30
· Личное сообщение · #13

по контексту должно подходить



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 13 августа 2011 22:46 · Поправил: MasterSoft
· Личное сообщение · #14

видимо ТС не может сформулировать и внятно изложить то, чего он хочет.

VintProg
OKOB пишет:
Ты на функцию передаешь управление через JUMP, а возвращаешься через RET. Откуда в стеке возьмется адрес возврата??

я думаю OKOB как бэ намекал тебе, что нужно делать через CALL

это меня ваще убило:
VintProg пишет:
надо увеличить cmp:

Code:
  1. cmp     ebx, 1100h


увеличить? легко!

Code:
  1. cmp     ebx, 00ABCDEFh


или может я не так понял? тогда вот ТУТ глянь
сойдёт?



Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 14 августа 2011 06:24
· Личное сообщение · #15

Было столько
Code:
  1. cmp     ebx, 4Bh


Надо сделать во столько
Code:
  1. cmp     ebx, 1100h


Беда в том что туда больше байта нельзя писать, теперь понятно?




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 14 августа 2011 06:31 · Поправил: Isaev
· Личное сообщение · #16

найди пустое место, прыгни туда, сравни (и ещё пару команд перетяни, которые закроет call) и вернись назад

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 14 августа 2011 10:49 · Поправил: Veliant
· Личное сообщение · #17

Покажу наглядно
было
Code:
  1. ...
  2. cmp ebx, 1100h
  3. nextcommand
  4. ...
  5. m:

станет
Code:
  1. ...
  2. jmp patch
  3. out:
  4. ...
  5. m:
  6. ...
  7.  
  8.  
  9. patch:
  10.          cmp ebx, 1100h
  11.          nextcommand
  12.          jmp out
  13.  


Если повезет, то JMP patch будет локальным и поместится в 2 байта, и тогда nextcommand не надо будет перемещать. Если же дальний, то займет 5 байт, 3 из них попадут на следующие команды, вот их и надо копировать (только не 3 байта, а столько, сколько занимают команды)



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 14 августа 2011 10:53 · Поправил: MasterSoft
· Личное сообщение · #18

VintProg пишет:
Беда в том что туда больше байта нельзя писать, теперь понятно?

теперь вполне.

Code:
  1. 004C47DF                 inc     ebx // оставляем как есть
  2. 004C47E0                 jmp     00900000 // джамп в свободное место где находится твой код
  3. 004C47E5                 nop
  4. 004C47E6                 fldz
  5. 004C47E8                 fldz
  6. 004C47EA                 fldz
  7. ...
  8.  
  9. // тут твой код
  10. 00900000:
  11. add     ebp, 38h
  12. cmp     ebx, 1100h
  13. jmp 004C47E6 // возвращаемся назад




Ранг: 5.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 14 августа 2011 14:38
· Личное сообщение · #19

Code:
  1. // тут твой код
  2. 00900000:
  3. add     ebp, 38h
  4. cmp     ebx, 1100h
  5. jmp 004C47E6 // возвращаемся назад


а где свой код хранить???



Ранг: 49.6 (посетитель), 9thx
Активность: 0.030
Статус: Участник

Создано: 14 августа 2011 14:43
· Личное сообщение · #20

VintProg
А не проще пропатчить эту команду ?

Code:
  1. .text:004C47EC 028                 jl      loc_4C49F0





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 14 августа 2011 15:14
· Личное сообщение · #21

Да хоть в дополнительную секцию свой код дорисуй. У тебя что ни топик-то цирк, утомил уже, иди статьи читай.


 eXeL@B —› Вопросы новичков —› Как заменить cmp?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати