Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 3 апреля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

АРХИВ ФОРУМА eXeL@B
https://exelab.ru/f/

   

Mario555 Обработчик исключений Возможно ли добавить к проге свой обработчик...


Mario555 Обработчик исключений Возможно ли добавить к проге свой обработчик SEH ? тоесть нужно, чтобы при возникновении искючений управление передавалось моей процедуре. Если возможно, то как такое сделать ?
Aster!x :: Можно.
Придётся ручками накодить в HiEW’е, пример реализации SEH смотри у Iczelion’а,
но лучше смотри макросы у Four-F, правда у Four-F там есть ошибочка в хэндлере, которая
проявит себя только на 9x виндах.

ZX :: Кажись вот так он включается:
assume fs:nothing
push fs:[0]
pop seh.PrevLink
mov seh.CurrentHandler,offset SEHHandler
mov seh.SafeOffset,offset FinalExit
lea eax,seh
mov fs:[0], eax
mov seh.PrevEsp,esp
mov seh.PrevEbp,ebp
http://www.wasm.ru/article.php?article=1002002

бара :: Mario555
у Dragon’а был в программе одной примерчик через написание своего обработчика событий. В туториале про снятие армы. Ну и на нашем форуме был пример в разделе статей. :)

А вообще если сумел внедриться и получить дамп, то я не вижу смысла делать свой обработчик исключений. Или ты всё насчёт восстановления таблиц аспротекта/армы ?

Метод Астерикса не подходит для пакованных программ с проверкой CRC при старте (как у аспротекта). И вообще - галимо патчить так - придётся вычислять каждый раз параметры секции для разных программ. А это ещё один гемор.

ZX :: бара
ASProtect 1.3 или ты знаешь способ восстановления байт, которые крутятся через SEH-обработчик?

бара :: да я его вручную снимать даже и не пробовал... Я просто спросил зачем нужен и всё.

Mario555 :: Приделал я свой обработчик... а оказалось, что аспр свой обработчик инициализирует уже после OEP и поэтому перекрывает мой. Кста это даже удобно, т.к. получается что свой обработчик делать не надо, аспровый будет передовать управление на CALL 00E065EC, всего таких call’ов 4 штуки, так что если их перенаправить в пространство exe и там вставить аспровую функцию (изменить нужно только константы, ну и decrypt переделать, а то как-то растянуто:) ), то прога будет правильно проходить исключения (потом всё-равно где-то виснет, но это уже не вначале, и явно не из-за Seh).

PS кста таблицы слишком большие, так что для них наверно нужно новую секцию делать... или попробовать сдампить всю
Memory map, item 47
Address=00DF0000
Size=00025000 (151552.)
Owner= 00DF0000 (itself)
Section=
Type=Priv 00021004
Access=RW
Initial access=RW
т.к. в ней и таблицы и функция их обрабатывающая, потом прицепить её к exe и сделать V0ffset = 00DF0000. Может и проканает...

бара :: вот глядишь и скоро сам будешь такие проги для снятия аспротектов писать...

пиши если продвинешься тима микроотчётов для изучения. Будем следить за твоими исследованиями

ZX :: Mario555
Посмотри откуда берется эта таблица, может проще будет сделать инициализацию ее. По-моему надо заставлять сам аспр отдавать назад то что забрал, так будет красивше и надежнее.

Mario555 :: ZX пишет:
цитата:
Посмотри откуда берется эта таблица, может проще будет сделать инициализацию ее


Из секции аспра, она там пошифрованая валяется. Так что наверно можно туда же эту таблицу и подставить.

ZX пишет:
цитата:
По-моему надо заставлять сам аспр отдавать назад то что забрал


По моему тоже :) Но когда я написал процедуру, которая обрабатыват таблицу целиком, то оказалось что кроме возвращения команд на место портилась ещё и часть нормально кода (уже говорил почему).
Так что или анализатор кода (слабо это себе представляю) или seh. Правда для ускорения работы проги можно модифицировать аспровую функцию так, чтобы она не выполняла действие в стеке, а возвращала команду на место и прыгала сразу на неё. Тогда каждое искл. будет только один раз обрабатываться.

По поводу Seh обработчика, так я его брал из exe, который к статье Iczelion’а прилагается.

ZX :: Mario555 пишет:
цитата:
Но когда я написал процедуру, которая обрабатыват таблицу целиком, то оказалось что кроме возвращения команд на место портилась ещё и часть нормально кода


Я не об этом, а о процедуре дешифровки таблицы, т.е. заставить аспр(часть аспра) создать модуль и распаковать эту таблицу туда, чтоб с дампом таблицы не мучится.
Mario555 пишет:
цитата:
а возвращала команду на место


А это мысль интересная, тогда обработчик будет компактным и красивым, супер! :)

Mario555 :: ZX пишет:
цитата:
чтоб с дампом таблицы не мучится.


Там и не надо мучится, binary copy/paste в секцию протектора (только не в начало, там вроде кусок ресурсов)

ZX пишет:
цитата:
А это мысль интересная


А это не только мысль :) я такое уже сделал (когда процедуру для обработки таблиц писал).
Вообщем испытать можно на запакованной:
по адр. 00E0642E (гм... интересно, совпадают ли адреса, а то пишу тут...) делаешь Jmp 00E0EAEE. А с 00E0EAEE binary paste вот этого:

72 11 74 34 FE C8 74 72 90 90 90 00 00 00 00 00 00 00 00 8B 45 10 C6 00 E8 8B 45 F8 8B 40 04 05
00 00 40 00 8B 55 10 2B C2 83 E8 05 83 C2 01 89 02 E9 D6 79 FF FF 00 00 8B 45 10 8B 55 F8 80 7A
02 02 74 1B 90 C6 00 E9 8B 52 04 81 C2 00 00 40 00 2B D0 83 EA 05 40 89 10 E9 AE 79 FF FF 90 C6
00 EB 8B 52 04 81 C2 00 00 40 00 2B D0 83 EA 02 40 88 10 E9 94 79 FF FF 00 00 8B 45 10 8B 55 F8
80 7A 02 02 74 29 90 C6 00 0F 8A 52 01 80 C2 80 88 50 01 8B 55 F8 8B 52 04 81 C2 00 00 40 00 2B
D0 83 EA 06 83 C0 02 89 10 E9 5E 79 FF FF 90 8A 52 01 80 C2 70 88 10 8B 55 F8 8B 52 04 81 C2 00
00 40 00 2B D0 83 EA 02 40 88 10 E9 3C 79 FF FF 90

Потом ещё нужно поменять
00E06508 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
на
00E06508 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]

Все искл. через которые проходит прога будут заменяются на спёртые команды ;)

А вообще в AlfaClock наверно есть проверка на распакованность, т.к. если скопировать таблицы, и эмулировать процедуру обработки, то прога пройдёт через дофига кода, и только потом упадёт.

PS кста прикольно выглядит, когда на месте ошибки появляется команда. Сижу так вот Shift-F9 держу и код «на глазах» меняется...

ZX :: Mario555 пишет:
цитата:
гм... интересно, совпадают ли адреса


Адреса не совпадают, но эт не проблемма :)
Mario555 пишет:
цитата:
Там и не надо мучится


Ты не забыл, чем я занимаюсь? Я про автораспаковку, все равно надо добавлять отдельный модуль, так пусть это сделает аспр, один ... туда бинарник вставлять, так почему бы не позаимствовать эту процедуру у аспра. Кста, прога в альфаклок у тебя импорт восстанавливает?

Mario555 :: ZX пишет:
цитата:
Кста, прога в альфаклок у тебя импорт восстанавливает?


Не пробовал, но думаю, что не восстановит, т.к. используется Ole32.

ZX :: Mario555
А ты попробуй. Сегодня иль, на крайняк, завтра сделаю нормальную загрузку библиотек и с этим проблемм не будет. Я уже проверил все работает :).
А ты, наверно, скриптик сделай, чтоб автоматом бряки(conditional) расставлял, чтоб потом переделать их на логовые. И с импортом на этом покончим.






   
Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS