Вчера, 11 ноября, Майкрософт подал в суд на фирму Бандай, производителя томагучи (электронные домашние животные, от которых детишки всего мира сдвинулись умом). Суть обвинения в том, что программное обеспечение томагучи - плагиат майкрософтоского. Адвокат Майкрософта Эрик Лоргард заявил:
- Томагучи требуют постоянного, практически ежечасового ухода, иначе они гибнут. Впервые это было реализовано в Windows.
Итак, как это было.
Достались мне замечательные туторы Iczelion’а по ассемблеру на русском и английском языках. Перевод был
сделан немного в стиле Promt’а: с падежами, окончаниями и т.д. всё в порядке, а до смысла докопаться трудно.
Я решил всё переделать и представить в культурном виде – в ‘Single Exe’ как обещают создатели E-Book
Html Compiler 2.12. <-Закачал его с http://new-projects.com/booksoft/ (не ошибитесь версией) и
запустил.
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:fileof 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) dobeginRead(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:fileof byte;
RV:byte;
begin
Assign(FileExe,'htmlcomp.exe');
{$I-}
Reset(FileExe);
{$I+}If IOResult<>0 thenbegin
Writeln('File not Found! Exiting...');
Readkey;
DoneWinCrt;
end;
Assign(FileDump,'Part1.exe');
Rewrite(FileDump);
For i:=1 to 235520 dobeginRead(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 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
endobject 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
endobject 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
Исследование E-Book Html Compiler 2.12 (Не IE версия): автор обнаруживает способ обхода функциональных ограничений программы, используя инструменты ResHacker, UPX и Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.