Сейчас на форуме: tyns777 (+5 невидимых) |
eXeL@B —› Программирование —› Int 0x2B -> .. ? |
Посл.ответ | Сообщение |
|
Создано: 22 марта 2010 02:29 · Личное сообщение · #1 |
|
Создано: 22 марта 2010 09:18 · Личное сообщение · #2 Не знаю почему, но я попадаю сюда: это comctl32 Code:
что это за функция не смотрел, потом идет на завершение процесса, получается что обнаружение отладчика идет, поскольку без отладчика прога нормально запускается, где это происходит не знаю, возможно без оладчика int 2B и не вызывается, а прога выше делает переход в другую ветку. ----- Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше |
|
Создано: 22 марта 2010 10:28 · Личное сообщение · #3 |
|
Создано: 22 марта 2010 16:44 · Поправил: mak · Личное сообщение · #4 а куда нужно попасть ? Трюки с 2б , 2с , 2е весьма распостранены среди писателей малвари Code:
Code:
после Code:
попадаем на Code:
точнее на Code:
так как после 2е одна команда выполняется в пролете ; NTSTATUS ; NtCallbackReturn ( ; IN PVOID OutputBuffer OPTIONAL, ; IN ULONG OutputLength, ; IN NTSTATUS Status ; ) Routine Description: This function returns from a user mode callout to the kernel mode caller of the user mode callback function. 2B отвечает за возврат из прерывания , многое зависит от сервис пака в котором идет отладка в оледбг. Своеобразный метод перехода из ринг3 в ринг0 , можно много чего еще придумать. Типо подменять адрес возврата или чтонить в этом роде ... После еси идем на Code:
Когда переходим по инт 2е можно увидеть вот такую вещь Code:
----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 22 марта 2010 17:36 · Личное сообщение · #5 |
|
Создано: 22 марта 2010 19:04 · Личное сообщение · #6 |
|
Создано: 22 марта 2010 21:12 · Поправил: Clerk · Личное сообщение · #7 mak Code:
Тот код такой: Code:
|
|
Создано: 23 марта 2010 13:30 · Поправил: mak · Личное сообщение · #8 я так понял что ты используешь промежуточный выход в усермод при вызове определенного сервиса , когда случается Int 2EH , контекст должен сохраниться , когда же мы вернемся из прерывания то мы должны оказаться там где были , то есть после инт 2е Code:
Тут вызовется CALL DWORD PTR DS:[EAX+EDX*4] ; __ClientMonitorEnumProc Весь ее код Code:
После INT 2B в Code:
мы уже не вернемся сюда , а если и вернемся то произошла серьезная ошибка , если я правильно понял то при переходе в усермод , ты сам выполняешь недостающий участок кода типа Int 2BH После этого идем на KeUsermodeCallback , где получаем адрес стека в Р3 из сохраненного контекста р3, в KTRAP_FRAME структуре нашего потока. Получается всю информацию по возврату нужно искать где то в сохранном контексте , или же может что то типа Interrupt Stack Table , с которой я не имел дела Ни у кого больше мнений нет ?! ----- RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube |
|
Создано: 23 марта 2010 17:39 · Поправил: Clerk · Личное сообщение · #9 mak Верно, при вызове теневого калбэка трап-фрейм сохраняется, существует стек калбэков. При возврате в ядро трап-фрейм восстанавливается, в частности флажки, что позволяет сбросить TF. Тут юзермодный код перечисляющий фреймы в стеке и выводящий Ip каждого фрейма(в блоге это описал): Без доступа к ядерной памяти нельзя определить куда будет выполнен возврат |
|
Создано: 25 марта 2010 13:37 · Личное сообщение · #10 |
|
Создано: 25 марта 2010 18:32 · Личное сообщение · #11 |
eXeL@B —› Программирование —› Int 0x2B -> .. ? |
Эта тема закрыта. Ответы больше не принимаются. |