| Посл.ответ | Сообщение | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 07 декабря 2011 21:16 · Личное сообщение ·  #1
 
Есть ли какие то методы или техники,перехвата функций? Универсальные как сплайсинг.Но ПОТОКОБЕЗОПАСНЫЕ.
  | Сообщение посчитали полезным: | 
|  | 
| 
  Ранг: 127.3 (ветеран), 44thx Активность: 0.09↘0
 Статус: Участник
 
 | Создано: 07 декабря 2011 21:46 · Поправил: zeppe1in · Личное сообщение ·  #2
 
Yotsiвсё зависит от ваших задач и условий, я сплайсил, и всё было ПОТОКОБЕЗОПАСНО)
----- zzz
  | Сообщение посчитали полезным: | 
| 
 Ранг: 301.4 (мудрец), 194thx Активность: 0.17↘0.01
 Статус: Участник
 
 | Создано: 07 декабря 2011 21:59 · Поправил: Veliant · Личное сообщение ·  #3
 
Использовать например InterlockedExchange при патче или lock rep movsb
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 07 декабря 2011 22:00 · Личное сообщение ·  #4
 
У меня спецефическая задача - нада перехватывать начало создания потока ,и его завершение до деинициализации лоадером.
  | Сообщение посчитали полезным: | 
| 
  Ранг: 2014.5 (!!!!), 1278thx Активность: 1.34↘0.25
 Статус: Модератор
 retired
 
 | Создано: 07 декабря 2011 22:12 · Личное сообщение ·  #5
 
Veliant пишет:lock rep movsb
 Protected Mode Exceptions: ... #UD If the LOCK prefix is used. З.Ы. InterlockedExchange64 есть ещё, 8 байтов должно хватить.
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 08 декабря 2011 00:16 · Поправил: Yotsi · Личное сообщение ·  #6
 
Archer пишет:З.Ы. InterlockedExchange64 есть ещё, 8 байтов должно хватить.
 А так что б еще и на win2k работало возможно?
  | Сообщение посчитали полезным: | 
| 
  Ранг: 2014.5 (!!!!), 1278thx Активность: 1.34↘0.25
 Статус: Модератор
 retired
 
 | Создано: 08 декабря 2011 12:13 · Личное сообщение ·  #7
 
А чем винда то смущает, если оно при возможности на интринзиках делается. Я не проверял, но полагаю, что на CMPXCHG8B.
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 10 декабря 2011 21:07 · Поправил: Yotsi · Личное сообщение ·  #8
 
Что то я непонимаю    ,каким образом CMPXCHG8B может помочь в таком случае
 Когда любой поток в момент выполнения кода между А и Б.Может вызвать оригинальную функцию.
  | Сообщение посчитали полезным: | 
| 
 Ранг: 301.4 (мудрец), 194thx Активность: 0.17↘0.01
 Статус: Участник
 
 | Создано: 10 декабря 2011 22:37 · Поправил: Veliant · Личное сообщение ·  #9
 
А в чем смысл убирать хук, выполнять и ставить на место? Обычно для этого и воруют команды или имея в наличии оригинальный адрес, обращаемся непосредственно через него. Все кроме нас при этом будут ходить через хук
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 10 декабря 2011 23:26 · Личное сообщение ·  #10
 
А как тогда оригинальную ф-цию вызывать,если первые 5 байт "пропатчены"?
  | Сообщение посчитали полезным: | 
| 
  Ранг: 527.7 (!), 381thx Активность: 0.16↘0.09
 Статус: Участник
 Победитель турнира 2010
 
 | Создано: 10 декабря 2011 23:30 · Поправил: OKOB · Личное сообщение ·  #11
 
Yotsi пишет:А как тогда оригинальную ф-цию вызывать,если первые 5 байт "пропатчены"?
 у себя в теле хука краденые байты исполнять и передовать управление на остальное тело функции. Только не 5, а от пяти кратно длине команды.
----- 127.0.0.1, sweet 127.0.0.1
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 11 декабря 2011 03:09 · Поправил: Yotsi · Личное сообщение ·  #12
 
Что то я опять до конца непонимаю    Нада из оригинальных 5 байт сформировать "шеллкод" с джампом на телом функции,которое находиться после той 5 байтной заглушки?
  | Сообщение посчитали полезным: | 
| 
 Ранг: 301.4 (мудрец), 194thx Активность: 0.17↘0.01
 Статус: Участник
 
 | Создано: 11 декабря 2011 10:01 · Поправил: Veliant · Личное сообщение ·  #13
 
Копируешь 5 байт из оригинального кода. Если последние байты попадают на середину команды, то копируешь еще несколько, чтоб было выровнено на команду. Для этого обычно используется дизассемблер длин. После них у себя в буфере генерируешь jmp в оригинальный код. Вот собственно и все
  | Сообщение посчитали полезным: | 
| 
  Ранг: 2014.5 (!!!!), 1278thx Активность: 1.34↘0.25
 Статус: Модератор
 retired
 
 | Создано: 11 декабря 2011 10:03 · Личное сообщение ·  #14
 
Почитал бы статьи лучше, как хук делается, а? Было: 1 байт: push ebp 2 байта: mov ebp,esp другие_команды_на_Н_байтов func_next: ... Стало: 5 байтов: jmp/call allocked_mem возможно_пара_байтов_от_старых_инструкций func_next: ... allocked_mem (сначала все затёртые инструкции, потом переход обратно): 1 байт: push ebp 2 байта: mov ebp,esp другие_команды_которые_затёрты_5_байтами_перехода jmp func_next
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 11 декабря 2011 15:46 · Личное сообщение ·  #15
 
Все что мне удавалось найти было с восстановлением тех 5 байт
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 11 декабря 2011 23:25 · Личное сообщение ·  #16
 
То ли у меня адрес посчитать не получаеться,то ли еще что то 
  | Сообщение посчитали полезным: | 
| 
 Ранг: 162.4 (ветеран), 11thx Активность: 0.06↘0
 Статус: Участник
 
 | Создано: 12 декабря 2011 12:31 · Поправил: SWR · Личное сообщение ·  #17
 
я для записи использовал mmx регистр (сразу 8 байт писал)
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 12 декабря 2011 23:49 · Личное сообщение ·  #18
 
SWR пишет:я для записи использовал mmx регистр (сразу 8 байт писал)
 Записи чего?Адреса для джампа?
  | Сообщение посчитали полезным: | 
| 
 Ранг: 162.4 (ветеран), 11thx Активность: 0.06↘0
 Статус: Участник
 
 | Создано: 13 декабря 2011 13:06 · Личное сообщение ·  #19
 
всей инструкции. +остаток из оригинала.
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 14 декабря 2011 00:28 · Личное сообщение ·  #20
 
Что то я совсем запуталься(( Как назад прыгнуть то
  | Сообщение посчитали полезным: | 
| 
 Ранг: 301.4 (мудрец), 194thx Активность: 0.17↘0.01
 Статус: Участник
 
 | Создано: 14 декабря 2011 08:58 · Личное сообщение ·  #21
 
заменяешь на
 в своем буфере
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 14 декабря 2011 12:58 · Поправил: Yotsi · Личное сообщение ·  #22
 
Есть не условный а абсолютный джамп?Какой его опкод?
  | Сообщение посчитали полезным: | 
| 
  Ранг: 793.4 (! !), 568thx Активность: 0.74↘0
 Статус: Участник
 Шаман
 
 | Создано: 14 декабря 2011 13:10 · Личное сообщение ·  #23
 
Yotsi пишет:Есть не условный а абсолютный джамп?
 ЕстьYotsi пишет: Какой его опкод?
 SHORT: EB LONG: E9
----- Yann Tiersen best and do not fuck
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 14 декабря 2011 15:28 · Личное сообщение ·  #24
 
Уточню вопрос - если такой вид джампа когда для перехода указываеться четко определенный адрес а не разница между адресами?
  | Сообщение посчитали полезным: | 
| 
  Ранг: 2014.5 (!!!!), 1278thx Активность: 1.34↘0.25
 Статус: Модератор
 retired
 
 | Создано: 14 декабря 2011 16:06 · Личное сообщение ·  #25
 
Простого перехода нет, можно аналоги делать, типа push imm32; ret А вообще почитал бы уже ман, поотлаживал свой софт, что там не работает, и разобрался, чем про каждый опкод спрашивать.
  | Сообщение посчитали полезным: tomac, GoldenJoe | 
| 
 Ранг: 50.0 (постоянный), 31thx Активность: 0.09↗0.1
 Статус: Участник
 
 | Создано: 14 декабря 2011 19:46 · Личное сообщение ·  #26
 
Yotsi пишет:Уточню вопрос - если такой вид джампа когда для перехода указываеться четко определенный адрес а не разница между адресами?
 
 Переход есть, опкод EA, правда это дальний переход. Впрочем ничто не мешает использовать в качестве целевого селектора тот же селектор, что и текущий. Тогда вся разница между ближиним и дальним переходом будет только в стеке.
  | Сообщение посчитали полезным: | 
| 
 Ранг: 31.0 (посетитель) Активность: 0.01↘0
 Статус: Участник
 
 | Создано: 18 декабря 2011 21:19 · Поправил: Yotsi · Личное сообщение ·  #27
 
У кого нибудь есть версия детуров посвежее чем здесь http://pastebin.com/RCJ896TM ? ЗЫ: я правильно понимаю что детуры используют выше описанную технику с выполнением затертого кода и прыжком ы тело ф-ции?
  | Сообщение посчитали полезным: |