Shareware и Delphi 2010
От: wellwell Австралия https://www.softperfect.com
Дата: 12.01.10 09:54
Оценка: 22 (5)
Тем кто выпускает, или планирует выпускать программы скомпиленные в Delphi 2010, будет интересно. Тама есть новая фича, которая по умолчанию включена — RTTI. Проблема в том, что в EXE-шник идет куча лишней информации, включая имена и типы переменных, что может очень помочь взлому программы. Отключается это директивой:
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
Posted via RSDN NNTP Server 2.1 beta
Re: Shareware и Delphi 2010
От: pva  
Дата: 12.01.10 10:28
Оценка:
Здравствуйте, wellwell, Вы писали:

W>Тем кто выпускает, или планирует выпускать программы скомпиленные в Delphi 2010, будет интересно. Тама есть новая фича, которая по умолчанию включена — RTTI. Проблема в том, что в EXE-шник идет куча лишней информации, включая имена и типы переменных, что может очень помочь взлому программы.

Ага, а без RTTI не будет работать dynamic_cast и все что с ним связано.
newbie
Re: Shareware и Delphi 2010
От: Nonmanual Worker  
Дата: 12.01.10 10:38
Оценка:
Здравствуйте, wellwell, Вы писали:

W>Тем кто выпускает, или планирует выпускать программы скомпиленные в Delphi 2010, будет интересно. Тама есть новая фича, которая по умолчанию включена — RTTI. Проблема в том, что в EXE-шник идет куча лишней информации, включая имена и типы переменных, что может очень помочь взлому программы. Отключается это директивой:

W>
W>{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
W>


RTTI — это старая фича всех делфи, которые я помню. Служит для получения информации о типах (классах).
Включается\выключается {$M+} or {$M-} {$TYPEINFO ON} or {$TYPEINFO OFF}
По умолчанию отключена (покрайней мере до Delphi 2007 включительно точно).
Взлому то это слабо поможет ИМХО.
Re: Shareware и Delphi 2010
От: PolyTech Россия https://vmpsoft.com
Дата: 12.01.10 10:44
Оценка:
Здравствуйте, wellwell, Вы писали:

W>Тем кто выпускает, или планирует выпускать программы скомпиленные в Delphi 2010, будет интересно. Тама есть новая фича, которая по умолчанию включена — RTTI. Проблема в том, что в EXE-шник идет куча лишней информации, включая имена и типы переменных, что может очень помочь взлому программы. Отключается это директивой:


Если я ничего не путаю, то в RTTI включается только инфа о published свойствах/методах/типах и я боюсь что при отключении этой кухни перестанут грузиться DFM-ы.
Re[2]: Shareware и Delphi 2010
От: Nonmanual Worker  
Дата: 12.01.10 10:53
Оценка:
Здравствуйте, PolyTech, Вы писали:

PT>Если я ничего не путаю, то в RTTI включается только инфа о published свойствах/методах/типах и я боюсь что при отключении этой кухни перестанут грузиться DFM-ы.

По умолчанию RTTI отключено, что не мешает грузиться dfm-кам из ресурсов.
Re[2]: Shareware и Delphi 2010
От: wellwell Австралия https://www.softperfect.com
Дата: 12.01.10 10:59
Оценка:
"PolyTech" <71243@users.rsdn.ru> wrote in message news:3665329@news.rsdn.ru...
> Если я ничего не путаю, то в RTTI включается только инфа о published свойствах/методах/типах и я боюсь что при отключении этой кухни перестанут грузиться DFM-ы.

Именно так все и было, вплоть до D2010. Теперь же, берем такой пример:
type
  TMyClass = class
  private
   FMyVeryPrivateVariable: Integer;
  end;

implementation

procedure TForm1.FormCreate(Sender: TObject);
var
 MyObj: TMyClass;
begin
 MyObj := TMyClass.Create;
 MyObj.FMyVeryPrivateVariable := 1;
end;


В Exe-шник угодило FMyVeryPrivateVariable (можно найти поиском подстроки "FMyVeryPrivateVariable") и ее тип как минимум.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Shareware и Delphi 2010
От: wellwell Австралия https://www.softperfect.com
Дата: 12.01.10 11:03
Оценка: +1
"Nonmanual Worker" <69786@users.rsdn.ru> wrote in message news:3665312@news.rsdn.ru...
> RTTI — это старая фича всех делфи, которые я помню. Служит для получения информации о типах (классах).

Фича-то старая, но в сабже значительно переработаная и за каким-то фигом включающая приватные переменные и их типы. Нашел я это совершенно случайно, завел переменную FTrialHasBeenUsedDays, из названия которой понятно что она делает. Раньше имена таких переменных не попадали в бинарник, а теперь попадают, и ее легко найти по слову Trial в Exe-файле. Можно, конечно, называть переменные Jopa123, но все таки удобнее когда у них нормальные имена, и до сих пор это никак не влияло на взломо-устойчивость.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Shareware и Delphi 2010
От: PolyTech Россия https://vmpsoft.com
Дата: 12.01.10 11:10
Оценка:
Здравствуйте, wellwell, Вы писали:

W>"PolyTech" <71243@users.rsdn.ru> wrote in message news:3665329@news.rsdn.ru...

>> Если я ничего не путаю, то в RTTI включается только инфа о published свойствах/методах/типах и я боюсь что при отключении этой кухни перестанут грузиться DFM-ы.

W>В Exe-шник угодило FMyVeryPrivateVariable (можно найти поиском подстроки "FMyVeryPrivateVariable") и ее тип как минимум.


Хм. Действительно имена private свойств теперь попадают в RTTI. Это пипец.
Re[3]: Shareware и Delphi 2010
От: AWSVladimir  
Дата: 12.01.10 11:14
Оценка:
W>Фича-то старая, но в сабже значительно переработаная и за каким-то фигом включающая приватные переменные и их типы. Нашел я это совершенно случайно, завел переменную FTrialHasBeenUsedDays, из названия которой понятно что она делает. Раньше имена таких переменных не попадали в бинарник, а теперь попадают, и ее легко найти по слову Trial в Exe-файле. Можно, конечно, называть переменные Jopa123, но все таки удобнее когда у них нормальные имена, и до сих пор это никак не влияло на взломо-устойчивость.

Они там наверно офигели, вконец хотят интерпритатор сделать, ну или это подготовка комунити, прежде чем паковать исходники сразу в эксешник?

PS:
Любые имена дают ключ к взлому и анализу программы.
Если раньше можно определить было только тип внутренней переменной, то теперь еще имя внутренне переменной пишется.
Ждемс декомпилятор делфи в нормальный исходник, без асма.
Re[4]: Shareware и Delphi 2010
От: Nonmanual Worker  
Дата: 12.01.10 11:32
Оценка:
Здравствуйте, AWSVladimir, Вы писали:

AWS>Ждемс декомпилятор делфи в нормальный исходник, без асма.

Ага, у нас лет как 10 есть продукт, который все dfm-ки восстанавливает из exe-шника.
Допишем и восстановление кода, если спрос будет Будет как для .net
Re[5]: Shareware и Delphi 2010
От: PolyTech Россия https://vmpsoft.com
Дата: 12.01.10 11:46
Оценка:
Здравствуйте, Nonmanual Worker, Вы писали:

AWS>>Ждемс декомпилятор делфи в нормальный исходник, без асма.

NW>Ага, у нас лет как 10 есть продукт, который все dfm-ки восстанавливает из exe-шника.

А RTTI тоже умеет разбирать?
Re[5]: Shareware и Delphi 2010
От: AWSVladimir  
Дата: 12.01.10 11:53
Оценка:
Здравствуйте, Nonmanual Worker, Вы писали:

NW>Ага, у нас лет как 10 есть продукт, который все dfm-ки восстанавливает из exe-шника.

NW>Допишем и восстановление кода, если спрос будет Будет как для .net

Ну допустим все dfm хранятся в ресурсах, достать их нет проблем.

Dede,De Decompiller вроде выкидывали в эксешник, но там много асма было.
Думаю это нововведение поможет его существенно сократить.
Re[6]: Shareware и Delphi 2010
От: AWSVladimir  
Дата: 12.01.10 11:54
Оценка:
Dede,De Decompiller вроде выкидывали в PAS файлы .
Re[6]: Shareware и Delphi 2010
От: PolyTech Россия https://vmpsoft.com
Дата: 12.01.10 11:57
Оценка:
Здравствуйте, AWSVladimir, Вы писали:

AWS>Ну допустим все dfm хранятся в ресурсах, достать их нет проблем.


DFM-ки при желании можно спрятать так, что их вообще никто не найдет
Если интересно — могу рассказать как.
Re[7]: Shareware и Delphi 2010
От: AWSVladimir  
Дата: 12.01.10 12:36
Оценка:
PT>DFM-ки при желании можно спрятать так, что их вообще никто не найдет
PT>Если интересно — могу рассказать как.

1. WriteComponent
2. Пропатчить Writer/Reader
3. RunTime Create
Re[8]: Shareware и Delphi 2010
От: AWSVladimir  
Дата: 12.01.10 12:38
Оценка:
AWS>1. WriteComponent
AWS>2. Пропатчить Writer/Reader
AWS>3. RunTime Create

// Блин жаль нельзя дописывать
Но при запущеной програмке DFM-ки все равно можно сдернуть и пропатчить эксешник, если конечно ты опять что нить не придумал.
Re[8]: Shareware и Delphi 2010
От: PolyTech Россия https://vmpsoft.com
Дата: 12.01.10 12:45
Оценка:
Здравствуйте, AWSVladimir, Вы писали:

AWS>1. WriteComponent

AWS>2. Пропатчить Writer/Reader
AWS>3. RunTime Create

Можно "проще" — через перехват API, работающих с ресурсами программы (FindResource/LockResource etc), с помощью которых грузятся DFM-ки. Для этого достаточно будет написать DLL-ку, которая будет перехватывать необходимые API на уровне IAT программы (у рихтера есть примеры) и написать простейший "менеджер" ресурсов, который будет выделять память и декриптовать ресурсы по запросу программы. При этом в самой VCL ничего не нужно переделывать.
Re[4]: Shareware и Delphi 2010
От: mdaii http://delphifeeds.ru
Дата: 16.01.10 11:17
Оценка:
Здравствуйте, PolyTech, Вы писали:

PT>Здравствуйте, wellwell, Вы писали:


W>>"PolyTech" <71243@users.rsdn.ru> wrote in message news:3665329@news.rsdn.ru...

>>> Если я ничего не путаю, то в RTTI включается только инфа о published свойствах/методах/типах и я боюсь что при отключении этой кухни перестанут грузиться DFM-ы.

W>>В Exe-шник угодило FMyVeryPrivateVariable (можно найти поиском подстроки "FMyVeryPrivateVariable") и ее тип как минимум.


PT>Хм. Действительно имена private свойств теперь попадают в RTTI. Это пипец.


В Delphi 2009 как и в предыдущих версиях, RTTI был ограничен элементами, размещенными в Published секции.

У вас был доступ к указателям на свойства, поля и методы объекта. Если потратить немного времени на обучение, то старая версия RTTI превращалась в довольно мощный механизм. Однако, мощь RTTI предыдущих версий смотрится весьма скромно по сравнению с тем, что стало возможным в Delphi 2010.

В Delphi 2010 вы можете извлекать RTTI информацию практически отовсюду. Выбор, какая информация должна быть доступна, остается за вами, этим управляет новая директива $RTTI. Поведение по умолчанию определено в System.pas, фрагмент которого приведен ниже, свойства и методы теперь доступны посредствам RTTI как в Published, так и в Public секциях, а поля доступны во всех секциях.


Section of System.pas:
{ RTTI Visibility }
type
  TVisibilityClasses = set of (vcPrivate, vcProtected, vcPublic, vcPublished);

const
  { Эти константы отображают текущие установки, встроенные в компилятор.
    Обычно для классов они наследуются от TObject.
    }
  DefaultMethodRttiVisibility = [vcPublic, vcPublished];
  DefaultFieldRttiVisibility = [vcPrivate..vcPublished];
  DefaultPropertyRttiVisibility = [vcPublic, vcPublished];

type
  { Настройки RTTI по-умолчанию}
  {$RTTI INHERIT
      METHODS(DefaultMethodRttiVisibility)
      FIELDS(DefaultFieldRttiVisibility)
      PROPERTIES(DefaultPropertyRttiVisibility)}

здесь
Re: Shareware и Delphi 2010
От: wallaby  
Дата: 16.01.10 11:20
Оценка:
Здравствуйте, wellwell, Вы писали:

W>Тем кто выпускает, или планирует выпускать программы скомпиленные в Delphi 2010, будет интересно. Тама есть новая фича, которая по умолчанию включена — RTTI.


Точнее — расширенный RTTI. Фактически это то что в других языках называется Reflection.
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Re[9]: Shareware и Delphi 2010
От: Jack128  
Дата: 17.01.10 18:29
Оценка:
Здравствуйте, PolyTech, Вы писали:

PT>Здравствуйте, AWSVladimir, Вы писали:


AWS>>1. WriteComponent

AWS>>2. Пропатчить Writer/Reader
AWS>>3. RunTime Create

PT>Можно "проще" — через перехват API, работающих с ресурсами программы (FindResource/LockResource etc), с помощью которых грузятся DFM-ки. Для этого достаточно будет написать DLL-ку, которая будет перехватывать необходимые API на уровне IAT программы (у рихтера есть примеры) и написать простейший "менеджер" ресурсов, который будет выделять память и декриптовать ресурсы по запросу программы. При этом в самой VCL ничего не нужно переделывать.


и что мешает злоумышленнику написать шлюз к твоей dll?? код который сидит в длл всегда можно подменить, так что это не защита.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.