VB Static Linker - избавляемся от Msvbvm + протектор кода

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

Модератор: BV

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

VB Static Linker - избавляемся от Msvbvm + протектор кода

Сообщение jangle » 11.09.2007 (Вт) 10:59

Решил дописать таки свой статический линковщик DLL файлов для VB. И более того, сделать из него протектор. Программа, чем то напоминает Fusion, но в то же время имеет ряд преемуществ. Вот скрины интерфейса:

http://s1.imgdb.ru/2007-09/10/screen1-PNG_3x4yhnyc.png

http://s1.imgdb.ru/2007-09/10/screen2-PNG_ck577cf4.png

Хочется узнать мнение о внешнем виде, не слишком ли много серого цвета?

Основной упор хочется сделать на защиту VB программ от копирования и взлома. Планирую реализовать следующие функции:

1. Линковка всех Run-time DLL и OCX в единый EXE файл, с распаковкой во время запуска.
2. Возможность добавить в EXE любой файл, с сохранением на диск во время запуска программы.
3. Cоздание DEMO версий, ограничение на количество запусков, триал.
4. Привязка VB программ к USB флешке! Программа будет работать только с нужного вам носителя.
5. Защитка от отладки.
6. Защита от сдампливания.
7. Защита от дизассемблирования, обман PEiD
8. Защита от распаковки, от автоматических юнпакеров
9. Шифрование бинарного кода EXE, с расшифровкой "на лету"
10. Возможность добавления XP манифеста в EXE файлы
11. Задание свойств EXE файла, OS, Subsystem и т.д.
12. Возможность использования любого протектора или пакера для усиления защиты. По умолчанию используется UPX
13. Возможность писать свои плагины к ядру протектора.

Пока готов только первый релиз, в котором реализована функция слияни Msvbvm60.dll и VB EXE файла. Размер получаемого экзешника (при упаковке UPX) около 609 кбайт, что значительно меньше чем у Fusion. Поддерживаются операционный системы линейки NT4-NT5, Win9x пока нет (более интересует поддержка Vista). Cама программа написана на PowerBASIC 8.03

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 11.09.2007 (Вт) 11:29

ИМХО, интерфейс в этом деле наименее важная составляющая, т.к. юзаться будет (если вообще будет) в основном программерами. А для программера функциональность куда важнее внешнего вида.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.09.2007 (Вт) 11:47

+1

у UPX вообще нет гуя, но его популярности можно только позавидовать
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 11.09.2007 (Вт) 11:50

Вобщем выложу первую версию, на этой временной страничке:

http://vbsll.110mb.com/

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.09.2007 (Вт) 12:02

А что означает надпись "Ver 3 (Windows NT 3.x, 95, 98)" :?:
Если то, что в более поздних виндах такие бинарники не запускаются, то это гон.
Изображение

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 11.09.2007 (Вт) 12:05

Я думаю это определяет минимальную версию ОС, на которой запустится этот бинарник.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 11.09.2007 (Вт) 12:08

tyomitch писал(а):А что означает надпись "Ver 3 (Windows NT 3.x, 95, 98)" :?:
Если то, что в более поздних виндах такие бинарники не запускаются, то это гон.


Нет, они смогут загрузится только в Windows NT 3.x, 95, 98

Выложил первую версию тут: http://vbsll.110mb.com прямая ссылка на дистрибутив [удалено] размер 974 кбайт.

Заранее хочу извинится за глюки и баги, в первых версия они обязательно будут
Последний раз редактировалось jangle 19.09.2007 (Ср) 16:13, всего редактировалось 2 раз(а).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.09.2007 (Вт) 12:08

Тогда почему там и 95, и 98?
Из них максимум одна версия может быть минимальной.
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.09.2007 (Вт) 12:13

jangle писал(а):
tyomitch писал(а):А что означает надпись "Ver 3 (Windows NT 3.x, 95, 98)" :?:
Если то, что в более поздних виндах такие бинарники не запускаются, то это гон.


Нет, они смогут загрузится только в Windows NT 3.x, 95, 98

ORLY?

На тебе родные часики из NT 3.1. Проверял в WinXP SP2, работают :roll:
У вас нет доступа для просмотра вложений в этом сообщении.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 11.09.2007 (Вт) 13:33

Тогда почему там и 95, и 98?
Из них максимум одна версия может быть минимальной.


Это свойство задается в PE файле, там есть специальное поле, которое анализирует загрузчик Windows. Сделано, это для задания совместимости экзешника с определенной ОС. Например в программе, вызывается API функция которая есть только в Win2000/XP/2003, значит можно установить это поле в Ver5, и экзешник не запустится в более старой ОС.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.09.2007 (Вт) 13:40

Спасибо за просвещение.
Но никакой "верхней границы" совместимости Windows со своими старыми версиями нет.
В последних версиях отлично работают даже программы для Win30, не то что для NT 3.1.
Демонстрационный пример тебе приведён.
(И более того, об этом "специальном поле" я уже писал сам.)

Далее, программа, вызывающая API-функцию, которая есть только в Win2000/XP/2003, не запустится в более старой ОС независимо от того, что у неё выставлено в этом поле.

Мне немного стрёмно было бы юзать EXE-протектор, разработка и презентация которого начинается с GUI, и автор которого демонстрирует столь обширные познания механизмов работы виндового загрузчика :-?
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 11.09.2007 (Вт) 14:33

Спасибо за просвещение.
Но никакой "верхней границы" совместимости Windows со своими старыми версиями нет.
В последних версиях отлично работают даже программы для Win30, не то что для NT 3.1.
Демонстрационный пример тебе приведён.
(И более того, об этом "специальном поле" я уже писал сам.)


Наверное я неправильно описал это поле, но тем не менее, суть то не меняется. В PB есть директива #Option Version, которая позволяет задать совместимость EXE файла при компиляции, вот ее описание:

Set the minimum Windows version requirements for your program.
Syntax #OPTION {VERSION3 | VERSION4 | VERSION5}
Remarks The #OPTION metastatement controls the "minimum Windows version" tag that is written into your compiled code. If the version you select is equal or lower to the version of Windows that is running, the application will be executed. In turn, Windows will tailor the messages it sends to your program according to this version number, so your program will not need to handle messages from a later Windows version. The version tag may also affect the appearance and behavior of Windows common dialogs.

Conversely, if the version tag you select is higher than the version of Windows that is running, Windows will display an error message instead of running your application. For example, running a VERSION5 application on a VERSION4 platform would fail.
It is your responsibility to make sure that your program only uses the Windows features that are present in the specified version of Windows. For example, don’t call an API that’s present only in Windows XP, if you want your program to run under Windows 98.



Далее, программа, вызывающая API-функцию, которая есть только в Win2000/XP/2003, не запустится в более старой ОС независимо от того, что у неё выставлено в этом поле


Да разумеется, не запустится. Но если выставлена совместимость с Win2000/XP/2003 загрузчик Windows98 выдаст мессанджбокс с сообщение: "Эта программа требует более новой версии Windows".
А это более информативно.

Мне немного стрёмно было бы юзать EXE-протектор, разработка и презентация которого начинается с GUI, и автор которого демонстрирует столь обширные познания механизмов работы виндового загрузчика


Ядро протектора (механизм сборки EXE файла, линковка ресурсов и т.д.) был написан мной еще в 2005 году, по заказу Gentee Inc., для их новой линейки инсталляторов СreateInstall, ядро также используется в линковщике EXE файлов языка программирования Gentee. Там везде в диалоге About ссылки на мою старую страничку на narod.ru
Тот факт, что линковщик живет уже два года в популярном коммерческом приложении, доказывает что он достаточно надежен и стабилен.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 11.09.2007 (Вт) 14:33

jangle
А что, если я запакую dx8vb.dll, этого никто не сможет узнать ? :roll:

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 11.09.2007 (Вт) 14:34

jangle
А что, если я запакую dx8vb.dll, этого никто не сможет узнать ?


В этой версии, можно паковать только EXE файлы.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 11.09.2007 (Вт) 14:37

Я на будущее спрашиваю.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.09.2007 (Вт) 14:46

jangle писал(а):
Спасибо за просвещение.
Но никакой "верхней границы" совместимости Windows со своими старыми версиями нет.
В последних версиях отлично работают даже программы для Win30, не то что для NT 3.1.
Демонстрационный пример тебе приведён.
(И более того, об этом "специальном поле" я уже писал сам.)


Наверное я неправильно описал это поле, но тем не менее, суть то не меняется. В PB есть директива #Option Version, которая позволяет задать совместимость EXE файла при компиляции, вот ее описание:

Set the minimum Windows version requirements for your program.
Syntax #OPTION {VERSION3 | VERSION4 | VERSION5}
Remarks The #OPTION metastatement controls the "minimum Windows version" tag that is written into your compiled code. If the version you select is equal or lower to the version of Windows that is running, the application will be executed. In turn, Windows will tailor the messages it sends to your program according to this version number, so your program will not need to handle messages from a later Windows version. The version tag may also affect the appearance and behavior of Windows common dialogs.

Да, наверное неправильно описал. Причём суть меняется: проги с версией 3 отлично работают во всех без исключения релизах Win32.
И наверное, лучше было бы указать именно минимальные требуемые версии, как это предлагал VVitafresh.
Последний раз редактировалось tyomitch 11.09.2007 (Вт) 14:48, всего редактировалось 1 раз.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 11.09.2007 (Вт) 14:47

Я на будущее спрашиваю.


Да, если получится постараюсь реализовать упаковку DLL в следующих версиях.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.09.2007 (Ср) 9:30

Вопрос такой - как у него с совместимостью? Если у меня немного нестандартно сккомпилирован файл(точка входа другая, прилинкованы внешние .obj, есть импорты из виндовых библ, длл экспортирует символы, причём не только функции, но и данные) работоспособность не нарушится?

И ещё. По моему эффективнее юзать Dll2Lib и цеплять его стандартным линкером.
Так же хотелось бы узнать принцип действия данной программы.

Так же желательно сделать это в качестве плагина к VB.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 12.09.2007 (Ср) 9:57

Вопрос такой - как у него с совместимостью? Если у меня немного нестандартно сккомпилирован файл(точка входа другая, прилинкованы внешние .obj, есть импорты из виндовых библ, длл экспортирует символы, причём не только функции, но и данные) работоспособность не нарушится?


Каким образом компилируется твой файл? Скорее всего, все должно быть ОК, так-как на вход программе подается VBP файл.

И ещё. По моему эффективнее юзать Dll2Lib и цеплять его стандартным линкером.


Для vb экзешников обязательно наличие msvbvm60 на диске (секция импорта). Чтобы создать полностью автономный EXE нужно переписать компилятор.

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


В данной версии:

1. При запуске, stub проверяет наличие msvbvm60 на диске, если она не найдена, то извлекает ее из EXE файла и сохраняет папку system32.

2. Настраивает релоки прошитого внутри себя vb экзешника, пробегается по его секции импорта, загружает msvbvm60.dll, и передает управление на точку входа vb программы. Loader Windows из ntdll.dll при этом не используется, программа все делает сама.

При написании программы использовал эти статьи:

Загрузчик PE файлов: http://www.rsdn.ru/article/baseserv/peloader.xml


Об упаковщиках в последний раз, ч.1: http://www.wasm.ru/print.php?article=packlast01

Об упаковщиках в последний раз, ч.2: http://www.wasm.ru/print.php?article=packers2

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.09.2007 (Ср) 11:34

jangle писал(а):1. При запуске, stub проверяет наличие msvbvm60 на диске, если она не найдена, то извлекает ее из EXE файла и сохраняет папку system32.

Ага, значит без админских прав не запустится.
Чудно-необыкновенно.
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 12.09.2007 (Ср) 12:11

А если сначала проверить наличие отсутствия и возможность записи в system32, а потом писать в TEMP, если возможности нет?
Лучший способ понять что-то самому — объяснить это другому.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 12.09.2007 (Ср) 12:30

Antonariy - да конечно, это самый правильный выход. В Temp может писать любая прога. По моему Fusion 2 так и делает, когда запускается из под обычного юзера

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 12.09.2007 (Ср) 12:33

Для vb экзешников обязательно наличие msvbvm60 на диске (секция импорта). Чтобы создать полностью автономный EXE нужно переписать компилятор.

Не обязательно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 19.09.2007 (Ср) 16:12

Сделал следующую версию протектора - 1.1
Теперь доступна функция "привязывания" VB программ к USB флешке.
Механизм защиты работает так:

1. При сборке приложения, машинный код программы зашифровывается, потоковым криптографическим алгоритмом RC4, где в качестве ключа используется хэш HardwareID USB флешки.

2. Во время запуска зашифрованного exe, модуль расшифровки считывает хэш HardwareID того диска с которого он запущен, и расшифровывает кусок бинарного кода, снимая с него CRC32 и сравнивает его с прошитым в экзешник значением. Если оно совпадает, значит защита пологает, что запущена с оригинального диска, и начинает расшифровку бинарного кода "на лету", затем передавая на него управление.

3. Процедура расшифровки написана на ассемблере, и работает очень быстро.

Подобную защиту, без оригинальной USB флешки, невозможно сломать. Остатеся только прямая атака на шифротекст, в случае RC4 это тысячи лет работы компьютера.
Проще говоря, привязка программы к флешке может быть полезна в такой ситуации. Приносите готовую программу к заказчику на flash drive, даете потестить, оценить на пару дней. Прога работает только с флешки, и заказчик уже не может просто вас "кинуть", забрав программу и не заплатив. Нужно сломать защиту, отвязать прогу от "железа". Обычно дежурных кракеров в IT отделах нет, и программеры могут просто выложить прогу на рапидшару и написать запрос на взлом, на cracklab.ru:
http://cracklab.ru/f/index.php?action=v ... topic=8910
В нашем случае это бессмысленно, т.к. нельзя выложить на форум еще и флешку. А без ее параметров, взломщику не будет известен ключ которым зашифрован бинарник.
После того как заказчик оплатит вам работу, вы можете с чистой совестью отдать экзешник уже без навешанного протектора. Теперь пусть копируют сколько влезет...

Также добавлены следующие функции:

[+] Добавлена возможность использования MSVBVM60.DLL в общей DLL
[+] Добавление XP манифеста в компилируемый EXE файл
[!] Исправлен запуск скомпилированного EXE без прав администратора (баг описанный tyomitch`ем)

Cкачать программу можно тут: http://vbsll.110mb.com/

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 19.09.2007 (Ср) 16:14

Механизм защиты работает так

А можно ещё код этого механизма ну и, желательно, руководство по взлому?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.09.2007 (Ср) 16:55

Ломается очень просто, без модификации кода программы.
Алгоритм:
1) Запускаем с флагом CREATE_SUSPENDED
2) Подгружаем в АП свою DLL с перехватом некоторых системных функций
3) Dll перехватывает обращения к HardwareID диска, подставляя нужное
4) Прога считывает "правильный" ID и работает.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 19.09.2007 (Ср) 17:12

А можно ещё код этого механизма ну и, желательно, руководство по взлому?


Код возможно выложу, но только когда проект будет готов.


Ломается очень просто, без модификации кода программы.


Без флешки, не сломается никак. Это все равно, что угадать пароль к RAR архиву из 100 случайных символов.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.09.2007 (Ср) 17:56

При наличии 1-ой флешки прога начнёт запускаться везде.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 19.09.2007 (Ср) 20:21

keks-n писал(а):При наличии 1-ой флешки прога начнёт запускаться везде.


Еще нужно наличие одного опытного кракера с отладчиком. Который должен материализоваться в данной, конкретной организации. Это при условии, что руководитель организации знает, кто такие кракеры, и согласится оплатить его услуги по взлому.
У меня довольно большой опыт фрилансинга и общения с IT отделами разных организаций. Обычно кракеров с отладчиками там нет, но "кинуть" тебя могут другим способом. Вот характерный случай. В 2001 году, одна крупная компания (по секрету скажу, что это был "Быстров") заказала фирмочке где я работал, комплект тестов на умение работать с ПК. За месяц мы написали программу, отладили и передали заказчику. Они взяли на тестирование нашу систему и пропали. С менеджером с которым мы работали, перестали соеденять по телефону. А нашего руководителя, охрана перестала пускать на территорию компании-заказчика. Был один звонок от заказчика, девушка-секретарь сказал, что наша программа "плохая" и ее не будут использовать. Хотя потом, мы точно установили, что наша система внедрена и используется для тестирования соискателей работы в компании "Быстров"...
Вот так нас "кинули", причем скорее всего это была инициатива того менеджера с которым мы контактировали, он и систему внедрил и денежки наши прикарманил.
И так во многих организациях, если заказчики могут тебя кинуть, причем самым тупым методом, они обязательно это сделают, бизнес по-русски. Просто незаплатят за работу. Но любая, даже минимальная защита, поставит такого менеджера в тупик, и он все таки будет вынужден оплатить работу.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 19.09.2007 (Ср) 21:33

В нашем случае это бессмысленно, т.к. нельзя выложить на форум еще и флешку.
Зато можно выложить HardwareID. И его можно изменить на самой флешке.
Лучший способ понять что-то самому — объяснить это другому.

След.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron