NameBasedClassFactory и обфускация занулением строк вн. стру

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

NameBasedClassFactory и обфускация занулением строк вн. стру

Сообщение djalex777 » 24.05.2011 (Вт) 13:20

[Хакер] :: Отделено по просьбе автора темы и из соображений здравого смысла из темы о кирпиче «NameBasedObjectFactory».

Хакер, скажи мне пожалуйста, VB при компиляции всегда располагает классы (ну и заодно методы классов) в той же последовательности, что и в исходнике? Я собственно к чему - у меня скомпилированный файл обфусцируется и все названия обращаются в пустые строки, поэтому я доделал твой кирпич с целью создания объектов по их индексу.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 24.05.2011 (Вт) 13:24

А в какой последовательности классы идут в исходнике? :shock:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 13:32

Код: Выделить всё
...
Form=Form1.frm
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\Windows\SysWOW64\stdole2.tlb#OLE Automation
UserControl=UserControl1.ctl
Form=Form2.frm
Class=Class1; Class1.cls
Class=Class2; Class2.cls
Class=Class3; Class3.cls
Startup="Form1"
Command32=""
...

Сверху вниз. Или даже больше похоже что группами, с сортировкой внутри каждой группы - так как отображает IDE.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 24.05.2011 (Вт) 13:38

А, это ты vbp-файл исходником считаешь.
Интересует порядок следования чего? Дескрипторов в таблице или блоков кода, соответствующих процедурам класса?

Вообще, в топку обфускаторы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 13:53

Дескрипторов в таблице.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 24.05.2011 (Вт) 13:57

По какому принципу работает твой обфускатор?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 14:41

Вкратце - открываем exe, считываем оттуда заголовок VB, что-то типа:
Код: Выделить всё
Type CBOBF_VBHeader
   sSignature      As String * 4
   iRuntimeBuild      As Integer
       sLanguageDLL      As String * 14
   sBackupLanguageDLL   As String * 14
   iRuntimeDLLVersion   As Integer
   lLanguageID      As Long
   lBackupLanguageID   As Long
   lSubMain      As Long
   lProjectInfo      As Long
   lMDLIntObjs      As Long
   lMDLIntObjs2      As Long
   lThreadFlags      As Long
   lThreadCount      As Long
   iFormCount      As Integer
   iExternalComponentCount   As Integer
   lThunkCount      As Long
   lGUITable      As Long
   lExternalComponentTable   As Long
   lComRegisterData   As Long
   lProjectExename      As Long
   lProjectTitle      As Long
   lHelpFile      As Long
   lProjectName      As Long
End Type

Далее счтаем смещения для нужных нам параметров, типа lProjectName и т.д. По ним записываем 0x0, вместо имеющихся значений. Ту же самую процедуру проделываем для всех объектов (объявление есть у тебя в данном кирпиче, поэтому приводить не буду). Плюс проводим ещё некие операции, о которых нет смысла говорить.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 24.05.2011 (Вт) 15:26

1) То есть это VB-специфичный обфускатор?
2) Не приходило в голову мысли, что такая обфускация может привести к неопределённому поведению, а проще говоря, к спонтанным ошибкам в формально правильном коде?
3) Почему бы вместо того, чтобы триммировать строчки, заменять их на бессмысленные, и их же заменять в коде?

Вообще, я не понимаю. Смысл кирпича — создание объекта по строковому имени класса. Если ты лишаешь класс имени, ты лишаешь кирпич смысла.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 15:43

1) Да.
2) Ошибкам неоткуда взяться.
3) Не помню уже почему я от этого варианта отказался (или не доделал или ещё что-то).

Смысла пока можешь не искать. А вот на мой вопрос ты так и не ответил.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 24.05.2011 (Вт) 15:51

djalex777 писал(а):2) Ошибкам неоткуда взяться.

Наивно. Есть.
Допустим, кто-то вместо
If TypeOf myobj is CTestClass
написал
If TypeName(myobj) = "CTestClass".
Тогда у него изначально истинное условие станет ложным. Потому что TypeName для всех объектов будет возвращать вместо имени типа пустую строчку.

Или наоборот, кто-то решил сравнить тип двух объектов. Но поскольку вот так писать нельзя:
If TypeOf a Is TypeOf b Then
написал так:
If TypeName(a) = TypeName(b) Then.
Условие вдруг станет истинным даже для объектов разных классов.

djalex777 писал(а):А вот на мой вопрос ты так и не ответил.

У меня нет гарантии того, что они там окажутся в нужном порядке. Поэтому, чем полагаться на спорные вещи, лучше переделать обфускатор так, чтобы полагания на такие вещи попросту не было.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 16:06

Наивно. Есть. Допустим, кто-то вместо

В моём случае "кого-то" нет, поэтому и ошибок нет. Ответ понял. Спасибо.

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

Re: Создание объектов по имени класса/формы

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

djalex777 писал(а):В моём случае "кого-то" нет

Есть. Как минимум — я.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 16:17

Есть. Как минимум — я.

:) Да я имел ввиду тех, кто использует мой обфускатор.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 24.05.2011 (Вт) 16:22

Причём тут пользователи обфускатора. Речь о том, что у тебя в проекте может быть код, не обязательно твой, который сломается от обфускатора. Примеры такого кода были приведены. Код может быть, к примеру, в dll, так что внешне ты даже не определишь, где именно и что сломается.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 16:29

Да я понял минусы такого обфусцирования. Написал же тебе - в моём случае ошибок быть не может.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 24.05.2011 (Вт) 16:32

djalex777 писал(а):Написал же тебе - в моём случае ошибок быть не может.

Тогда ответь мне: для каких целей внутри исполняемого файла хранится вся эта информация. Конкретные случаи.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 17:52

Нечего мне тебе ответить. Обфускатором занимался 1,5 года назад и ничего уже не помню (да и не нужно оно мне - помнить это). Знаю одно - ни разу за это время не столкнулся ни с какими ошибками и уверен, что нигде (в каких-то значимых местах) имена объектов не используются. Обфускатор применяю только к Standart EXE.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 24.05.2011 (Вт) 18:44

djalex777 писал(а):Нечего мне тебе ответить.

Вот именно.
Ты судишь по своим наблюдением, а я — по знаниям.

Все эти данные, которые ты затираешь, хранятся в исполняемом файле не как мусор, не для дополнительной справочной информации. Они там необходимы самым непосредственным образом для правильной работы некоторых стандартных COM-интерфейсов, поддерживаемых классами. В частности: ITypeInfo и IDispatch. Это стандартные интерфейсы, их поведение строго регламентировано и отступление от правил не допускается. Ты их делаешь просто неработоспособными. Если ITypeInfo ещё как-то не так важен — им, если задуматься, кроме TypeName ничто в рамках чистого VB не пользуется, то IDispatch архи-важен. Любая ссылочная переменная, объявленная как As Object, и ты получишь
---------------------------
Project1
---------------------------
Run-time error '0':

Automation error
Application-defined or object-defined error
---------------------------
ОК
---------------------------

Проверено только сейчас.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 18:47

Кинь пример того, что ты имеешь ввиду.

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

Re: Создание объектов по имени класса/формы

Сообщение Хакер » 24.05.2011 (Вт) 18:55

Создавай новый проект с формой со следующим кодом и обфусцируй своим чудо-агрегатом:
Код: Выделить всё
Private Sub Form_Load()
    Dim x As Object: Set x = Me:
    x.SuperShow
End Sub

Public Sub SuperShow()
    Me.Show vbModal
End Sub
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: Создание объектов по имени класса/формы

Сообщение djalex777 » 24.05.2011 (Вт) 19:02

И что должно произойти по-твоему? Ты что-то не там меняешь. Вот обфусцированный файл. Ничего нет, кроме твоего кода выше.

Добавлено. Я понял, ты наверное думал, что я и public методы объектов обфусцирую?
Вложения
Project1.rar
(2.37 Кб) Скачиваний: 368

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

Re: NameBasedClassFactory и обфускация занулением строк вн.

Сообщение Хакер » 25.05.2011 (Ср) 5:44

djalex777 писал(а):Вот обфусцированный файл. Ничего нет, кроме твоего кода выше.

Ты, что, и сигнатуру в нём убил? Не могу найти EPI, а значит, ничего не могу посмотреть в нём.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: NameBasedClassFactory и обфускация занулением строк вн.

Сообщение Antonariy » 25.05.2011 (Ср) 6:59

Чего и требовалось достичь :)
Лучший способ понять что-то самому — объяснить это другому.

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

Re: NameBasedClassFactory и обфускация занулением строк вн.

Сообщение Хакер » 25.05.2011 (Ср) 7:36

Antonariy писал(а):Чего и требовалось достичь :)

В общем-то нет.

Потому что найти её, если хотеть, всё равно легко. Адрес EPI передаётся первым параметром в ThunRTMain. Так что обфускация ничего полезного не дала. Какая-нибудь PE-Identifier уже не сможет сказать, что программа написана на VB6, а хакеру вроде меня всё равно всё видно, если отсутствует лень хоть чуть-чуть что-то поковырять.

Я искал EPI бинарным поиском по последовательности «VB5!». Не обнаружив её в его файле, я просто закрыл отладчик. Но, как видишь, если действительно иметь цель найти EPI — это более чем просто. И тут хоть весь исполняемый файл трижды перешифруй — ThunRTMain как ни крути будет вызываться, а значит перехватываем её и обнаруживаем EPI. А дальше идём по указателями на любые интересующие структуры.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: NameBasedClassFactory и обфускация занулением строк вн.

Сообщение Хакер » 25.05.2011 (Ср) 7:42

А мой код у тебя, djalex777, продолжает работать, потому что строчку «SuperShow» твой обфускатор не затирает, вопреки сказанному тобою.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: NameBasedClassFactory и обфускация занулением строк вн.

Сообщение djalex777 » 25.05.2011 (Ср) 10:40

Да, сигнатура тоже затирается.

Хакер писал(а):А мой код у тебя, djalex777, продолжает работать, потому что строчку «SuperShow» твой обфускатор не затирает, вопреки сказанному тобою.

Неправда - я нигде не писал, что затираю названия методов объектов. Что этого делать нельзя, поверь, я знаю :)

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

Re: NameBasedClassFactory и обфускация занулением строк вн.

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

djalex777 писал(а):Неправда - я нигде не писал, что затираю названия методов объектов.

djalex777 писал(а):Я собственно к чему - у меня скомпилированный файл обфусцируется и все названия обращаются в пустые строки
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: NameBasedClassFactory и обфускация занулением строк вн.

Сообщение djalex777 » 25.05.2011 (Ср) 11:33

Ты что только это сообщение читал? Невозможно улавливать суть разговора прочитав одно предложение. А суть в раскрытии сказанного мной:
...
Далее счтаем смещения для нужных нам параметров, типа lProjectName и т.д. По ним записываем 0x0, вместо имеющихся значений. Ту же самую процедуру проделываем для всех объектов (объявление есть у тебя в данном кирпиче, поэтому приводить не буду). Плюс проводим ещё некие операции, о которых нет смысла говорить.

Или ты через предложение читаешь текст?

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

Re: NameBasedClassFactory и обфускация занулением строк вн.

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

В этом фрагменте нет никаких выражений, из которых можно судить, что имена модулей затираются, а имена членов модулей — нет. Зато есть предложение, в котором сказано, что все имена затираются.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Раздел для Профессионалов

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

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

    TopList