Сейчас на форуме: Slinger, Rio (+5 невидимых)

 eXeL@B —› Основной форум —› Защита от анализа delphi програм
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 3.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 августа 2006 10:19
· Личное сообщение · #1

После компиляции в среде delphi/builder и последующей декомпиляции программами аля DeDe,
в файле многое становится понятно - название используемых компонентов, переменных и т.д.
Существую ли средства, которые изменяют эти имена на неосмысленный мусор сохраняя
работоспособность программы?




Ранг: 199.9 (ветеран), 4thx
Активность: 0.120.02
Статус: Участник

Создано: 18 августа 2006 10:24
· Личное сообщение · #2

Проты




Ранг: 104.1 (ветеран)
Активность: 0.070
Статус: Участник
искатель истЕны

Создано: 18 августа 2006 10:53
· Личное сообщение · #3

попробуй поищи обфускаторы для дельфи, скорее всего есть



Ранг: 3.3 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 августа 2006 12:18
· Личное сообщение · #4

А кто из протов именно имена переделывает в нечитаемые? Имхо после снятия прота все имена как на ладони..?




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 18 августа 2006 12:47
· Личное сообщение · #5

nope пишет:
после снятия прота все имена как на ладони

Вроде как на ладони
Лучше кодить на C++, и вставлять в компилированный код антиотладку на асм (например, основываясь на командах переменной длины и т.п). А на Делфи код легко анализировать после распаковки.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 23.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 18 августа 2006 13:09
· Личное сообщение · #6

Crawler
Это ещё спорно, что легче анализировать, Delphi или С++ код после распаковки, преимущество анализа кода делфи программ только в том, что там проще найти обработчики, но зато делфи так засоряет код своими процедурами, иногда полсотни ret'ов пройдёшь и всё равно никуда не выйдешь... так что спорно это, спорно...




Ранг: 103.3 (ветеран), 8thx
Активность: 0.060
Статус: Участник

Создано: 19 августа 2006 05:20
· Личное сообщение · #7

@Paxan
какие могут быть обфускаторы для дельфи то? что обфусцировать? имена переменных / классов / методов не хранятся (разве что только РТТИ за счет которого и выезжает ДеДе, но его, имхо, не обфусцировать).




Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 19 августа 2006 06:48
· Личное сообщение · #8

nope пишет:
Существую ли средства, которые изменяют эти имена на неосмысленный мусор сохраняя
работоспособность программы

Виртуализация процедур тебе поможет.




Ранг: 104.1 (ветеран)
Активность: 0.070
Статус: Участник
искатель истЕны

Создано: 19 августа 2006 07:29 · Поправил: Paxan
· Личное сообщение · #9

NaumLeNet
ты уверен? возмём кусок дампа из dede

rbNotEqu: TRadioButton;
rbMoreEqu: TRadioButton;
rbLessEqu: TRadioButton;
Splitter3: TSplitter;
paVisible: TPanel;
btVisPanel: TSpeedButton;
acAddDisk: TAction;
Adddiskwizard1: TMenuItem;
gbActors: TGroupBox;
JvEnterAsTab: TJvEnterAsTab;
ppGetInfo: TPopupMenu;
Scanneddisk1: TMenuItem;
FromInternet1: TMenuItem;
Cancel1: TMenuItem;
acGetInfoNet: TAction;
fromfile1: TMenuItem;
FromInternet2: TMenuItem;
paPictureMain: TPanel;
acFormRegister: TAction;
Register1: TMenuItem;
miNew: TMenuItem;
N4: TMenuItem;
miOpen: TMenuItem;
acNewBase: TAction;
procedure acFormFirmExecute(Sender : TObject);
procedure acFormFamilyExecute(Sender : TObject);
procedure acFormJanreExecute(Sender : TObject);
procedure acFormCodecExecute(Sender : TObject);
procedure miExitClick(Sender : TObject);
procedure acFormCategoryExecute(Sender : TObject);
procedure FormShow(Sender : TObject);
procedure cbCategoryChange(Sender : TObject);
procedure grDisksExit(Sender : TObject);
procedure grDisksEnter(Sender : TObject);
procedure grMoviesEnter(Sender : TObject);
procedure grMoviesKeyDown(Sender : TObject);
procedure acSortJanreExecute(Sender : TObject);
procedure PageControlChange(Sender : TObject);
procedure cbJanreChange(Sender : TObject);
procedure grDisksTitleClick(Sender : TObject);
procedure grMoviesTitleClick(Sender : TObject);





Ранг: 104.1 (ветеран)
Активность: 0.070
Статус: Участник
искатель истЕны

Создано: 19 августа 2006 07:30
· Личное сообщение · #10

dermatolog
всю программу в ВМ тоже не загонишь, будет тормозить




Ранг: 116.6 (ветеран), 8thx
Активность: 0.050
Статус: Участник

Создано: 19 августа 2006 08:35
· Личное сообщение · #11

Paxan пишет:
всю программу в ВМ тоже не загонишь, будет тормозить

Как правило этого и не требуется )




Ранг: 104.1 (ветеран)
Активность: 0.070
Статус: Участник
искатель истЕны

Создано: 19 августа 2006 08:43
· Личное сообщение · #12

dermatolog это смотря что хочет топег стартер. видимо не просто защитить программу от взлома, а спрятать некие алго. тут надо смотреть на месте




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 19 августа 2006 11:52
· Личное сообщение · #13

Paxan пишет:
спрятать некие алго

Надо разрабатывать защиту так, чтобы знание алгоритма не уменьшало безопасности,(- например, аппаратная привязка). Это справедливо не только для криптографии, но и для кодинга.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 104.1 (ветеран)
Активность: 0.070
Статус: Участник
искатель истЕны

Создано: 19 августа 2006 13:40
· Личное сообщение · #14

Crawler прятанье алго это прятанье некой идеи, новшества и тд. необязательно всё сводить к безопастности.



Ранг: 54.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 19 августа 2006 18:56
· Личное сообщение · #15

типа такого ?



535b_19.08.2006_CRACKLAB.rU.tgz - dda3.gif




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 19 августа 2006 19:10
· Личное сообщение · #16

DDA пишет:
типа такого ?


прикольно но честно я очень редко пользуюсь ДеДе и таким не остановишь...

а по вопросу, во многих протах есть такая фишка как "маркеры" - crypt и clear, попробуй

-----
[nice coder and reverser]





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 24 августа 2006 16:34
· Личное сообщение · #17

Paxan пишет:
алго это прятанье некой идеи, новшества

Я всегда утверждал, что основной принцип надежной защиты - это безопасность при известном алгоритме. Просто я свожу все к безопасности в силу специализации.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 7.7 (гость)
Активность: 0=0
Статус: Участник

Создано: 31 августа 2006 08:58
· Личное сообщение · #18

Да мало что дает знание обработчиков. Если нормально проектировть программу, не писать в лоб проверку в обработчиках, то такая декомпиляция почти не повлияет на надежнось.



Ранг: 117.5 (ветеран), 5thx
Активность: 0.080.01
Статус: Участник

Создано: 02 октября 2006 02:18
· Личное сообщение · #19

вполне возможно что используется отдельная процедура шифрования, для delphi например antistring. а возможно обращение к файлу в котором ставится соотвествие мнимой и действенной процедуре




Ранг: 469.0 (мудрец), 100thx
Активность: 0.250
Статус: Участник
[www.AHTeam.org]

Создано: 02 октября 2006 02:42 · Поправил: KingSise
· Личное сообщение · #20

Вот еще одна методика строки шифровать, на мой взгляд, довольно удачная реализвция.

Цитата:

Delphi String Protect осуществляет защиту строк в исходниках, что после компиляции защитит программу от крэкеров. Строки в исходниках превращаются в зашифрованный массив байт, который расшифровывается по мере необходимости во время работы скомпилированной программы, таким образом, сам исполянемый файл не содержит строк в открытом виде и тем самым сильно противодействует взлому программ путем дизассемблирования и анализа кода программы.


"расшифровывается по мере необходимости" - вот это мне больше всего понравилось в Delphi String Protect


--> СКАЧАТЬ (541 Кб, Версия 1.1) <-- http://bgsopt.com/dsp10.zip

-----
-=истина где-то рядом=-




Ранг: 47.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 02 октября 2006 04:17
· Личное сообщение · #21

При сохранении возможности декомпиляции, скрытие строк бесполезно. Единственный выход - шифрование важных функций, причём желательно с привязкой к ID и ключевому файлу. Других надежных способов защиты для Delphi прог я пока не вижу.



Ранг: 117.5 (ветеран), 5thx
Активность: 0.080.01
Статус: Участник

Создано: 02 октября 2006 06:04
· Личное сообщение · #22

я про этот Delphi String Protect и говорил, попалась прога-лажа-2003годаб10;стоит ,а мучался дня 3. вот кстати ссылка http://exelab.ru/f/action=vthread&topic=6198&forum=5&page= -1




Ранг: 469.0 (мудрец), 100thx
Активность: 0.250
Статус: Участник
[www.AHTeam.org]

Создано: 03 октября 2006 02:13
· Личное сообщение · #23

sats, тоже ее есследовал, только вот сложного там ничего не нашол. Шифрование строк там впринцепе и не нужно, процедура проверки находится очень легко...

MiHaN пишет:
Единственный выход - шифрование важных функций, причём желательно с привязкой к ID


Сильно сказано (!), только вот грамотных реализаций я пока еще не встречал. Возможно все сведется к тому, что просто понадобится один(!) валедный ключ.

_________________________

Незнаю насколько ниже написанное будет по теме, вобщем встретил вот электронную книжку, защищенную протектором с COINSOFT.RU

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

Если кому интересно - могу залить книгу с ключами...

-----
-=истина где-то рядом=-





Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 03 октября 2006 21:02
· Личное сообщение · #24

MiHaN пишет:
При сохранении возможности декомпиляции, скрытие строк бесполезно

Угу. Пишется простенький скрипт для IDA (или отдельный дешифровщик - код выдирается прямо из проги). После чего все 'шифрование' превращается в бесполезное украшение.



Ранг: 117.5 (ветеран), 5thx
Активность: 0.080.01
Статус: Участник

Создано: 03 октября 2006 21:11
· Личное сообщение · #25

to gazlan хмммюююкак я понимаю для дешифрования необходимо знать алгоритм шифрования, или как? или ты имел в виду, что выдирание происходит тогда,когда шифрованный текст дешифруется для вывода пользователю или ёще для чего-нибудь?




Ранг: 266.8 (наставник), 5thx
Активность: 0.220.03
Статус: Участник
very WELL :)

Создано: 03 октября 2006 21:57
· Личное сообщение · #26

Помню конкретно от DeDe как то помогла такая фича.
Открываем ехе-шник, ищем по тексту "TObject" и меняем на "TОbject" (во втором случае "О" русская).
После этого DeDe обломался.




Ранг: 170.1 (ветеран), 96thx
Активность: 0.090.01
Статус: Участник

Создано: 03 октября 2006 22:25
· Личное сообщение · #27

sats пишет:
как я понимаю для дешифрования необходимо знать алгоритм шифрования

Этот алгоритм будет 'привязан' к каждой зашифрованной строке. Обычно, это код вида:

PUSH Encrypted_String
CALL Decoder
// Do smth with EAX here

Другой частый трюк - вызов декодера в начале функции и энкодера - в конце. При вызове зашифрованная функция расшифровывает себя в памяти, выполняется - и снова зашифровывает (обычно, через ROL/ROR).

В любом случае, зашифрованные куски видны в дампе даже невооруженным глазом - они просто КРИЧАТ о том, что зашифрованы, а так как дешифровщик чаще всего один на все строки (с кодом, обычно, не так), то пройдясь по перекрестным ссылкам моментально обнаруживаешь все статические вызовы. Дополнительный брэйк на вход в дешифровщик позволит отловить и динамические ссылки.

Понимать сам алгоритм (де)шифрования обычно нет необходимости - либо RIP кода в собственный дешифровщик, либо брэйк на выходе - и хватвем дешифрованную строку 'тепленькой'.

Стойкость алгоритма не имеет значения - ключ всегда 'под ковриком'.



Ранг: 45.1 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 04 октября 2006 01:49
· Личное сообщение · #28

А что-то про KOL никто не вспомнил ?
После неё в DeDe бесполезен.



Ранг: 47.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 04 октября 2006 02:30
· Личное сообщение · #29

xDriver пишет:
А что-то про KOL никто не вспомнил ?
После неё в DeDe бесполезен.

В KOL API юзаются стандартно (почти как в VC++) и бряк на GetWindowText тебе поможет



Ранг: 45.1 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 04 октября 2006 04:41
· Личное сообщение · #30

MiHaN
Для танкистов ...... вопрос был поставлен так:
nope пишет:
После компиляции в среде delphi/builder и последующей декомпиляции программами аля DeDe,
в файле многое становится понятно - название используемых компонентов, переменных и т.д.
Существую ли средства, которые изменяют эти имена на неосмысленный мусор сохраняя
работоспособность программы?


какие API ? какой GetWindowText ?


. 1 . 2 . >>
 eXeL@B —› Основной форум —› Защита от анализа delphi програм
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати