информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsSpanning Tree Protocol: недокументированное применениеЗа кого нас держат?
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] сварганил прогу вообще без импортов 17.11.01 08:59  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
общая идея такая:
pop eax
push eax
and eax,0fffff000h
search_for_kernel:
cmp word ptr [eax],'MZ'
je test_kernel_MZ_header
cmp word ptr [eax],'ZM'
je test_kernel_MZ_header
sub eax,000001000h
jmp search_for_kernel
test_kernel_MZ_header:
db 0cch
mov [kernel_MZ_header],eax
дальше идет обработка PE-header прямо в RAM поиск в экспортах LoadLibrary и вперед

вообще без импорта из kernel32.dll прога под NT не стартует - видимо ошибка в вытаскивании самого себя за волосы CreateProcess поэтому искусственно вводится какой-нибудь импорт из этой непростой длл - Beep() например

дизассемблирование такой проги доставит незабываемое удовольствие

а чтоб мало не показалось - при построении внутренней таблицы импортов используется метода вызова функции не с первой команды (поддерживаются правда не все команды а только push ebp sub esp imm32 etc но список растет) а со второй а первая внутри проги

вот что значит - пару свободных дней...
[Win32] сварганил прогу вообще без импортов 17.11.01 09:06  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
> вообще без импорта из kernel32.dll прога под NT не стартует
> - видимо ошибка в вытаскивании самого себя за волосы
> CreateProcess поэтому искусственно вводится какой-нибудь
> импорт из этой непростой длл - Beep() например

раз уж приходится импортировать что то, не проще ли за это что то взять GetModuleHandle() ? :)
[Win32] сварганил прогу вообще без импортов 17.11.01 16:47  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> раз уж приходится импортировать что то, не проще ли за это
> что то взять GetModuleHandle() ? :)

в целях маскировки под обычню прогу можно напихать дофига импортов и из кернел32 и из других либ - главное то что они на самом деле НЕ_БУДУТ_ИСПОЛЬЗОВАТЬСЯ
поэтому названия функций - все равно какие

есть еще одна классная задумка но до реализации еще руки не дошли
смотри: хочу например работать с кернел32.длл запасаюсь хипом охрененных размеров по информации из MZ/PE-хедера определяю размер модуля и rep movsd ее в хип себе дальше провожу руками релокейшины на новый адрес загрузки и работаю со второй копией кернел32
в результате даже те ф-ии которые вызываются изнутри этой копии кернел32 (например Ex-ы всякие) не будут ловиться ни софтайсом ни самодельными апи-трейсерами
все это уже не ново... 19.11.01 14:31  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> есть еще одна классная задумка но до реализации еще руки не
> дошли
> смотри: хочу например работать с кернел32.длл запасаюсь
> хипом охрененных размеров по информации из MZ/PE-хедера
> определяю размер модуля и rep movsd ее в хип себе дальше
> провожу руками релокейшины на новый адрес загрузки и
> работаю со второй копией кернел32
> в результате даже те ф-ии которые вызываются изнутри этой
> копии кернел32 (например Ex-ы всякие) не будут ловиться ни
> софтайсом ни самодельными апи-трейсерами

Это реализовано (правда,частично) в защите от копирования CD дисков
от StartForce. Правда, они переносили не весь kernel32, а только реально вызываемые функции, добавляли в их текст всякие NOP'ы, пересчитывая по ходу дела локальные переходы. Все это долго пишется, нудно отлаживается, а в итоге ломается довольно быстро.
все это уже не ново... 20.11.01 14:41  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> Это реализовано (правда,частично) в защите от копирования
> CD дисков
> от StartForce.

вот блин хотел ведь посмотреть его но поленился

> Правда, они переносили не весь kernel32, а
> только реально вызываемые функции, добавляли в их текст
> всякие NOP'ы,

зачем они так интересно? и труднее и смысл в чем

> пересчитывая по ходу дела локальные переходы.

ну если отдельные ф-ии копировать то да но опять же - зачем

> Все это долго пишется, нудно отлаживается, а в итоге
> ломается довольно быстро.

смотря на чем ловить
у меня довольно специфические проги - неинтерактивные - в основном патчики маленькие ;-) ф-ии вызываются - CreateFileA SetFilePointer WriteFile etc
т.е. ловить можно (если кернел32 свой) только низкоуровневое обращение к диску/кешу конкретной ОС
ИМХО должно ломаться не очень просто
все это уже не ново... 20.11.01 18:32  
Автор: ukv Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Смысл добавления NOP'ов, как я понял - сделать копию функции в чем-то отличной от оригинала. Но поскольку набор добавляемых инструкций был довольно ограничен, то должным образом написанный ассоциативный поиск по оригиналу kernel32 быстро находил использованный прототип.
[Win32] сварганил прогу вообще без импортов 19.11.01 12:14  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
1) про GetModuleHandle() я сказал потому что тогда не придётся искать imagebase kernel32.dll
прога без импортов конечно прикольно, но это не особо сильная защита - ещё спорный вопрос - кому больше проблем это доставит - тебе или взломщикам

2) вот с копией длл - это и правда может быть полезно
только я сомневаюсь что так всё просто пройдёт
имхо не достаточно переписать релокейшены
(особенно в 9х, где kernel32.dll мягко говоря не совсем обычная длл) :)
но даже в нт - там могут быть shared-области, какая то инициализация
а если будешь вызывать её entry point, то повторная инициализация тоже может каких-нить глюков наделать
хотя в нт скорее всего должно получится
но вот в 9х...

кстати если не лень, лучше попробуй часть кода засунуть например в explorer
или даже во все запущенные gui-приложения
только как это всё синхронизировать и учитывать когда закрывается одно из приложений :)
тогда кому то придётся трассировать сразу несколько процессов :)
[Win32] сварганил прогу вообще без импортов 20.11.01 15:13  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> 1) про GetModuleHandle() я сказал потому что тогда не
> придётся искать imagebase kernel32.dll
> прога без импортов конечно прикольно, но это не особо
> сильная защита - ещё спорный вопрос - кому больше проблем
> это доставит - тебе или взломщикам

да собственно столько же проблем сколько хорошо сделанный PE-packer
т.е. обычно не очень много
зависит от качества блока шифрования и характера работы проги
но согласись что можно сделать прогу ОЧЕНЬ трудно дизассемблируемой

>
> 2) вот с копией длл - это и правда может быть полезно
> только я сомневаюсь что так всё просто пройдёт
> имхо не достаточно переписать релокейшены
> (особенно в 9х, где kernel32.dll мягко говоря не совсем
> обычная длл) :)

да уж точно

> но даже в нт - там могут быть shared-области, какая то
> инициализация

инит уже прошел при загрузке длл
а шаред - есть конечно например TickCount
насколько они нужны в конкретном случае выясняется экспериментом

> а если будешь вызывать её entry point, то повторная
> инициализация тоже может каких-нить глюков наделать

это точно делать нельзя да и не нужно вроде

> хотя в нт скорее всего должно получится
> но вот в 9х...
>
> кстати если не лень, лучше попробуй часть кода засунуть
> например в explorer
> или даже во все запущенные gui-приложения
> только как это всё синхронизировать и учитывать когда
> закрывается одно из приложений :)
> тогда кому то придётся трассировать сразу несколько
> процессов :)

под 9х я засовывал код в область мессаг какого-нибудь драйвера
и там синхронизировать не надо конечно ничего
но под нт ни фига не пролезешь в ринг0 без патча ядра
по поводу синхронизации разных потоков/задач - это ловится легко на практике на ф-иях евентов (вот недавно совсем было - CreateTimer/KillTimer)
и вот тут кстати и вылезут те самые шаред о которых ты говорил
т.е. я еще не пробовал но убежден что при работе на своей копии кернел32 с ф-иями евентов глюки гарантированы
тогда уж лучше multi-step а в идеале real-time расшифровка кода
кстати тоже очень интересная тема но как-нибудь в другой раз
[Win32] сварганил прогу вообще без импортов 20.11.01 17:07  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
кстати насчёт дизассемблирования
когда я делаю FileAlignment 512 (а SectionAlignment остаётся 4096) то IDA виснет при анализе файла :)
это конечно частный случай
может быть даже для конкретной версии иды
но всё равно приятно :)

> инит уже прошел при загрузке длл
но инит может каким то образом зависеть от абсолютных адресов
т.е. скопированная длл может оказаться не совсем инициализированной
вобщем это нужно проверять экспериментом на каждой версии виндов

> тогда уж лучше multi-step а в идеале real-time расшифровка
> кода
я примерно это и имел в виду, когда говорил про код в нескольких процессах - он расшифровывает в нужные моменты куски основного кода
(+может сам некоторые фукнции выполнять)
A komy etot bred voobche nuzhen.Detskii sad kakoi to. 17.11.01 09:43  
Автор: + <Mikhail> Статус: Elderman
<"чистая" ссылка>
если ты называешь это бредом значит ты не понял ни хрена 17.11.01 16:50  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach