Русский / Russian English / Английский

Сейчас на форуме: shadow_user (+8 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Вопросы новичков —› Укажите путь в борьбе с HASP HL Envelope
Посл.ответ Сообщение

Ранг: 0.4 (гость)
Статус: Участник

Создано: 6 июня 2013 23:00 New!
Цитата · Личное сообщение · #1

Доброго дня всем!
Я - упорный чайник. Бился 2 ночи с HASP HL Envelope, думаю, что есть способ проще, до которого я не догадался.
Что сейчас имею: exe-шник запускается / отлаживается Олькой, знаю OEP, IAT. Под Олькой даже работает пока HASP воткнут. Нашел условный переход в страшном цикле, в котором конверт восстанавливает таблицу импорта и на каждой итерации цикла в зависимости от значения бита в определенной области памяти решает, ставить адрес функции конверта или настоящей (в kernel32.dll и т.п.). Могу заставить этот цикл сделать все адреса в область конверта (типа чтобы всё эмулировал, правда так программа падает где-то в защите). Если в этом цикле пытаться заставить конверт сделать правильный импорт на ту функцию, которую он должен на себя ставить - он убивается с MessageBox что-то типа Envelope error ... Если одну из функций IAT подменить чтобы конверт её сам отрезолвил в WinAPI (за счет того, что есть одинаковые импортируемые функции типа LocalAlloc) то под конец цикла восстановления IAT конверт тоже ругается. Выяснил, что конверт неохотно пользуется GetProcAddress, а охотно сам роется по таблице экспорта kernel32.dll и т.п.
Нашел и место, откуда конверт побайтно читает "скремблированные" (сложение по модулю 2 с 8-битным словом которое я не стал разбираться как получается) названия импортируемых функций, перед передачей их в GetProcAddress.
Пока любое мое вмешательство в последовательность действий при забивании конвертом IAT приводит к срабатыванию защиты.
Подскажите, куда дальше копать? Может я делаю всё через жопу? Есть ли вообще возможность именно на этапе создания IAT поправить весь импорт сразу или копать по тому адресу, что конверт в IAT забивает (они разные, но всё время ведут в одну функцию)?
Может хоть есть способ избавиться от бесполезных инструкций типа push edi; pop edi; xchg al, cl; xchg cl, al; мешаются, боюсь что-то важное пропустить (хотя важного там 5% от объема кода)?
Спасибо!


Ранг: 528.5 (!)
Статус: Участник
5KRT

Создано: 7 июня 2013 01:45 New!
Цитата · Личное сообщение · #2

Mishka1234 пишет:
Если в этом цикле пытаться заставить конверт сделать правильный импорт на ту функцию, которую он должен на себя ставить - он убивается с MessageBox что-то типа Envelope error ...


Точно не помню, но воде после того как импорт построился, ты должен вернуть код в девственное состояние.
И тебе повезло - у тебя старая версия конверта

Ранг: 617.3 (!)
Статус: Участник

Создано: 7 июня 2013 02:02 New!
Цитата · Личное сообщение · #3

daFix пишет:
Точно не помню, но воде после того как импорт построился, ты должен вернуть код в девственное состояние.

Либо скопировать исправленный импорт и на OEP вставить его.

была давно тема, там кто-то скрипт выкладывал для нахождения оеп и правки импорта.


Ранг: 528.5 (!)
Статус: Участник
5KRT

Создано: 7 июня 2013 02:27 New!
Цитата · Личное сообщение · #4

Vovan666 пишет:
была давно тема, там кто-то скрипт выкладывал для нахождения оеп и правки импорта.


Их конверт часто меняется, поэтому вероятность того что он подойдёт очень мала

Vovan666 пишет:
Либо скопировать исправленный импорт и на OEP вставить его.

+1

Ранг: 10.6 (новичок)
Статус: Участник

Создано: 7 июня 2013 08:16 New!
Цитата · Личное сообщение · #5

daFix, мне нужно с Вами переговорить через личку, а не могу, т.к. У Вас исчерпан лимит входящих сообщений.


Ранг: 334.2 (мудрец)
Статус: Участник
born to be evil

Создано: 7 июня 2013 08:51 New!
Цитата · Личное сообщение · #6

daFix пишет:
Их конверт часто меняется

сумлеваюсь

Ранг: 0.4 (гость)
Статус: Участник

Создано: 7 июня 2013 09:49 New!
Цитата · Личное сообщение · #7

Скрипт с форума не заработал, это было первое что я попробовал.
daFix пишет:
Точно не помню, но воде после того как импорт построился, ты должен вернуть код в девственное состояние.

Экспериментировал с модификацией регистров, код не трогал. При модификации кода или регистров в том цикле конверт не дойдя до вставки правильного адреса в IAT завершает работу приложения...

Как мне показалось (точнее я это даже проверил), после расшифровке в IAT содержится такое:
FFFFFFFF <- вот это будет заменено на код конверта (0)
004XX1X <- вот это указатель на функцию в kernel32.dll (1)
...
004XX2X <- вот это указатель на функцию в kernel32.dll (2)
FFFFFFFF
...

Если перед началом цикла конверта поменять (1) и (2) местами то и функции будут поменяны местами (правда конверт потом всё-равно убъет программу). В принципе можно порыть запутанный код по вычислению адреса (1), но что-то мне подсказывает, что имя функции, куда должен указывать адрес (0) где-то среди зашифрованных данных.
Правильное направление?
Насчет того, что envelope старое я не уверен (ибо других не видел), софт 2013 года, хотя точно знаю, что с версий 2010-2011 годов снимали. С другой стороны, инсталлятор ставит runtime aladdin, что намекает на более-менее старый софт.
 eXeL@B —› Вопросы новичков —› Укажите путь в борьбе с HASP HL Envelope

Видеокурс ВЗЛОМ