Исследование E-Book Html Compiler 2.12

Previous  Top  Next

    
 

 

Автор: Wersion

WEB сайт: http://expwinprg.cjb.net/

 

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

 

Достались мне замечательные туторы 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).Давайте напишем программу, которая вытащит нам его. Вот она:

 

 

Code:

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 Аналогично вытащим первую часть.

 

Code:

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:

 

Code:

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 определяет длительность висения формы. Внесём необходимые изменения :-)).

 

 

Code:

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.

 

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

 

Code:

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/

Вопросы/Пожелания/Угрозы/Комментарии -- приветствуются.

©Drkb::04552

       

Взято с http://delphiworld.narod.ru