Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Исследование E-Book Html Compiler 2.12 (Не IE версия)
Автор: Wersion
WEB сайт: http://expwinprg.cjb.net/

Вчера, 11 ноября, Майкрософт подал в суд на фирму Бандай, производителя томагучи (электронные домашние животные, от которых детишки всего мира сдвинулись умом). Суть обвинения в том, что программное обеспечение томагучи - плагиат майкрософтоского. Адвокат Майкрософта Эрик Лоргард заявил:
- Томагучи требуют постоянного, практически ежечасового ухода, иначе они гибнут. Впервые это было реализовано в Windows.

Итак, как это было.

Достались мне замечательные туторы Iczelion’а по ассемблеру на русском и английском языках. Перевод был сделан немного в стиле Promt’а: с падежами, окончаниями и т.д. всё в порядке, а до смысла докопаться трудно. Я решил всё переделать и представить в культурном виде – в ‘Single Exe’ как обещают создатели E-Book Html Compiler 2.12. <-Закачал его с http://new-projects.com/booksoft/ (не ошибитесь версией) и запустил.

Что мы видим:

  • функциональные ограничения (Нет вкладки Security вообще)
  • Nag в производимом файле

Нехорошо. Начнём.

Что нужно: Tools (много):

  • ResHacker/Restorator/Exescope – обязательно
  • Windows Commander 32 – обязательно
  • UPX 1.07w – обязательно
  • HIEW 6.11 – обязательно (Ну куда же нам без него!)
  • Turbo Pascal for Windows 7.1 – Recommended
  • Ida Pro – optional
  • TRW 2000 – optional
  • Any File Analyzer – optional
  • Procdump32 - optional
  • The Customiser - Recommended
  • W32Dasm – optional
  • Brains: Среднее количество[x]

Исследование

Посмотрим Help. Есть, оказывается, 3 версии:

  • This is the FREEWARE Version of the HTML Compiler. This FREEWARE version is for personal use only. You are required to purchase a license for any use that results in the exchange of money or goods by using this software.
  • Versions available. This version - Stand-Alone HTML Compiler PRO Compiles HTML text and images (including frames) into a single stand-alone executable.
  • Stand-Alone HTML Compiler PRO + enables the creation of shareware ebooks and button/menu text editing.

Попытаемся сделать из Freeware -> PRO+.

Откроем программу в ResHacker'e. Ясное дело, повреждены все ресурсы. Нельзя же без того, чтобы запаковать.Если хотите, можете посмотреть на файл сквозь ваш File Analyzer. Я засунул его в Procdump32->PE Editor. Ну, это наш старый знакомый UPX.

Как полагается его распаковывать:

  • Засунуть в Ida Pro. Найти инструкцию popad. Посмотреть куда направляется следующий jmp xxxxxxxxx. Записать xxxxxxxxx - ImageBase как Original Entry Point. Поставить в TRW 2000 брейкпоинт на адрес инструкции popad. Пройти её и следующий jmp xxxxxxxxxx по F10. Сделать Suspend. Сдампить. Выставить OEP. (не помню, он портит Import Table или нет, если да, то восстановите)
  • Воспользоваться самим Upx
  • Проделать только в отладчике.

Я пробовал это. Только размер файла практически не увеличивается. И делает он такие нехорошие 'Single Exe',что быстро вешают систему. Автораспаковщики (e.g. GUW32) вообще производят неработоспособную бурду.

Что ж, я полез в Hiew 6.11 разбираться. Когда я указал ему пойти на адрес где-то в середине Exe'шника, он крайне удивил меня сообщением 'Section out of File'. Пришлось дойти до конца секции. Посмотрите:

Как видите, после секции начинается что-то интересное. А именно новый Exe-file. (Последовательность байт MZP).Давайте напишем программу, которая вытащит нам его. Вот она:


Program FileExtractor;

Uses WinCrt;

{Стандартные декларации}
Var  i:longint;
     FileExe,FileDump:file of byte;
     RV:byte;

begin
  Assign(FileExe,'htmlcomp.exe');
  {$I-}
  Reset(FileExe);
  {$I+}
  If IOResult<>0 then {И}
  begin
    Writeln('File not Found! Exiting...');
    Readkey;
    DoneWinCrt;
  end;
  Assign(FileDump, 'Part2.exe'); {Процедуры}
  Rewrite(FileDump);
  {Перейдём на FilePos=235520 =(39800 в шестнадцатиричной системе - см. выше}
  Seek(FileExe,235520);
  For i:=FilePos(FileExe) to (FileSize(FileExe)-1) do
  begin
    Read(FileExe,RV); {Ну и скатаем в другой файл}
    Write(FileDump,RV);
  end;
  Close(FileExe);
  Close(FileDump);
  Writeln('Done.');
  Readkey;
  DoneWinCrt;
end.

Осторожно запустите её(Windows как бы провалится в глубокую трясину и не будет реагировать на вас, но потом очнётся). Через ~15 секунд у вас будет Part2.exe Аналогично вытащим первую часть.


Program PrgExtractor;

Uses WinCrt;

Var  i:longint;
     FileExe,FileDump:file of byte;
     RV:byte;

begin
  Assign(FileExe,'htmlcomp.exe');
  {$I-}
  Reset(FileExe);
  {$I+}
  If IOResult<>0 then
  begin
    Writeln('File not Found! Exiting...');
    Readkey;
    DoneWinCrt;
  end;
  Assign(FileDump,'Part1.exe');
  Rewrite(FileDump);
  For i:=1 to 235520 do
  begin
    Read(FileExe,RV);
    Write(FileDump,RV);
  end;
  Close(FileExe);
  Close(FileDump);
  Writeln('Done.');
  Readkey;
  DoneWinCrt;
end.

У Part1.exe иконка как у исходной программы. У Part2.exe -- как у производимого программой 'Single Exe'.Теперь понятен принцип работы нашего приложения. Оно использует GetModuleFileName или ParamStr(0), выдирает из себя Part2.exe, кладёт куда надо и ещё дописывает к нему скрипт. Как это мог осуществить автор:

А1.) Как я(As File Extractor)
Б1.) Поискать последовательность байт (MZP).

Способ А1.) не подходит, потому что его нужно реализовывать, не имея готового, сжатого EXE, да и проблематично вносить изменения в программу. Остаётся способ Б1.).

Ну что, теперь оба файла распакуются нормально. Лучше всего воспользоваться способом В.). Смотрим Part2.exe в REsHaCkEr' e.

Вот наш Nag Splash Screen:


object Form3: TForm3
//................................................
  Caption = 'Free Splash'
  ClientHeight = 157
  ClientWidth = 392
//................................................
  FormStyle = fsStayOnTop
  Position = poScreenCenter
//................................................
  object Image1: TImage
//................................................
    Width = 392
    Height = 157
    Align = alClient
    Picture.Data = {много всего в хексе }
  end
  object URLLabel1: TURLLabel
    Width = 185
    Height = 16
    Caption = 'www.bigwig.net/softwaredesign'
//................................................
  end
  object URLLabel2: TURLLabel
//................................................
    Width = 205
    Height = 16
    Caption = 'www.new-projects.com/booksoft'
  end
  object Label1: TLabel
    Width = 9
    Height = 13
    Caption = 'or'
//................................................
  end
  object Timer1: TTimer
    Interval = 5000
    OnTimer = Timer1Timer
//................................................
  end
end

Легко догадаться, что Timer1 определяет длительность висения формы. Внесём необходимые изменения :-)).


object Form3: TForm3
  Caption = ''
  ClientHeight = 0
  ClientWidth = 0
  FormStyle = fsNormal
  Height = 0
  Width = 0
  object Image1: TImage
    Width = 0
    Height = 0
    Align = alNone
    Picture.Data = {убрать всё }
  end
  object URLLabel1: TURLLabel
   //................................................
   Width = 0
    Height =0
    end
  object URLLabel2: TURLLabel
    Width = 0
    Height = 0
    Caption = ''
 end
  object Label1: TLabel
    Width = 0
    Height = 0
    Caption = ''
  end
  object Timer1: TTimer
    Interval = 1
    OnTimer = Timer1Timer
  end
end

Вот и всё. Nag successfully removed! Пакуем файл через UPX. Клеим его к Part1.exe через Windows Commander 32. It works...

Теперь разберёмся с функциональными ограничениями в Part1.exe... Рассматривая скриншот из хелпа, можно заметить, что в Freeware кнопка для Securiry просто не видна.Возьмём The Customiser, исправим сиё недоразумение(для всех подобных кнопок). Тогда everything is fine. Но это надо не на один раз, а навсегда. Что-то в коде не хочется копаться..... Тем более, что тот скомпилен в Delphi 3. А Delphi кого угодно выведет своими вложенными call'ами. Давайте поюзаем ResHacker.

Вот скрытые кнопки:


object Button6: TButton
    Left = 432
    Top = 4
    Width = 33
    Height = 21
    Hint = 'Edit the E-Book Security options and Viewer Text and Graphics.'
    Caption = '>>'
    ParentShowHint = False
    ShowHint = True
    TabOrder = 30
    OnClick = Button6Click
  end
object Button7: TButton
    Left = 488
    Top = 144
    Width = 177
    Height = 25
    Hint = 'Bring up the Trial to Full Key Registration generator dialog.'
    Caption = 'Generate Registration Key'
    ParentShowHint = False
    ShowHint = True
    TabOrder = 35
    OnClick = Button7Click
  end
 object Button8: TButton
    Left = 476
    Top = 296
    Width = 201
    Height = 25
    Hint = 'Bring up the Viewer Button Graphic/Text and Menu Text editor.'
    Caption = 'Button Images/Text and Menu Text'
    ParentShowHint = False
    ShowHint = True
    TabOrder = 36
    OnClick = Button8Click
  end

Да, нехорошо. Кнопки деактивируются динамически. Раз автор(Steve Seymor) так к нам относится, то и мы отнесёмся к нему соответственно. Сделаем копии всех этих кнопок и изменим немного. e. g. object Button8: TButton->object Mutton8: TButton Можете зайти в TFORM2 и поменять там чего-нибудь :-)). Запустим программу. Wow! Никаких ограничений! Пакуем через UPX . Склеиваем с Part2.exe.... N.B. наш файл меньше исходного !!! N.B. Мы не использовали ни дизассемблер, ни отладчик!!!

OK, всё работает! Засуньте Cracked Exe в архив и добавьте *.nfo;

Greates to:авторам всех использованных инструментов, Dr. Golova.

TNT Team, которая распространяет свой тормознутый неработающий загрузчик для этого продукта, Must Die.

Файлы, использованные при исследовании:
fextract.zip
prgextract.zip

Created by Wersion
E-mail: wcrkgroup2002@mail.ru
Site: http://expwinprg.cjb.net/
Вопросы/Пожелания/Угрозы/Комментарии -- приветствуются.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay