Якщо немає інсталятора переносимо додатки windows без дистрибутива

Часто виникають ситуації, коли програма, встановлена ​​на одному комп'ютері, повинна неодмінно виявитися на іншій машині. Причому інсталятора немає, простого копіювання файлів не вистачає, а людина, яка ставила програму, кудись пропав разом з дистрибутивом.

Отже, найголовніше питання: що переносити крім папки з програмою? Умовно все необхідне можна розбити на три пункти:

  1. Файли, до яких звертається програма.
  2. Гілки реєстру, до яких звертається програма.
  3. Середовище виконання.

Якщо з розумінням перших двох пунктів проблем немає, то щодо третього варто зробити уточнення. Під середовищем виконання тут розуміються бази даних, драйвера пристроїв (псевдопристроїв), іменовані канали (Named Pipes), мейлслоти, COM / ActiveX компоненти і так далі. Тобто, все, з чим працює програма (і що надано стороннім софтом, а не операційною системою) через стандартні інтерфейси Windows - будь то мережа, IPC чи щось таке.

Середовище є найпроблемнішим компонентом при перенесенні, і саме через середовища доводиться морочитися, щоб ОС на обох машинах збігалися.

Які файли і гілки реєстру переносити?

Панове, давайте дружно піднімемо келихи з кавою, вип'ємо і вшануємо пам'ять передчасно пішли утиліт-моніторів NT Filemon і NT Regmon, які відстежували звернення будь-якого процесу до файлів і ключів реєстру відповідно. Злий геній Марка Руссиновича безжально анігілював їх ... а потім відтворив з попелу в одному потужному і корисному інструменті. Зустрічайте, Process Monitor. Саме ця тулза буде основною зброєю перенесення і допоможе нам розібратися, які файли використовує програма і до яких ключам в реєстрі звертається. Для цього нам знадобляться дві функції: Show Registry Activity і Show File System Activity.

Розібратися в цій смітнику без допомоги парсеру складно. Щоб спростити завдання, я, коли сам займався подібним перенесенням, накидав два Perl-скрипта (шукай їх на диску). Поклади ці скрипти в папку, де був збережений Logfile.csv (або відразу зберігай лог в папку до скриптів). Тепер запускай parse.pl. Цей скрипт отпарсіт log-файл і створить ще два лога: file.log буде містити унікальні звернення до файлів і папок, reg.log Унікальні звернення до гілок реєстру.

Відокремлюємо мух від котлет

  • Потрібен програмі;
  • Чи не потрібен програмі;
  • На додаткове вивчення.

Сортуючи файли, не забувай редагувати абсолютні (повні) шляху до компонентів (DLL-бібліотек, файлів налаштувань та іншого), якщо знайдеш. Так ми отримаємо REG-файли, які необхідно імпортувати на цільовій машині. Тепер з приводу файлів. В папці subdir скрипт відтворив дерево звернень до файлів таким чином:

subdir
C (буква диска)
Program Files

... і так далі, до файлів включно.

безпосередній перенесення

Якщо про захист системних бібліотек Windows хоч якось подбає SFC (System File Checker), то в разі реєстру такої допомоги чекати не доводиться. Тому при імпортуванні гілок реєстру з робочої машини потрібно бути подвійно обережним. Причому, як і у випадку з файлами налаштувань, доведеться коригувати шляху в строкових параметрах. Зареєструй COM-компоненти - їх легко визначити за наявністю декількох експортованих функцій (DllRegisterServer, наприклад).

Тим, хто забув: реєстрація проводиться командою regsvr32 component.dll, де component.dll є COM-сервером (до речі, COM-сервер може знаходитися і всередині exe-файлу). Цінителям Total Commander буде приємно, що для їхнього улюбленця є listerплагін, який на раз визначає COM / ActiveX. Якщо програма використовує якісь специфічні технології, необхідна додаткова настройка. Скажімо, у випадку з використанням BDE (Borland Database Engine) необхідно внести відповідні зміни у DataSource'ов, які використовує програма.

Після цього залишається тільки проинсталлировать і налаштувати середовище, яке потрібна нашому додатку (якщо потрібна). Стандартні компоненти на зразок сервера БД ти встановиш сам. Перенесення середовища повинен бути найлегше, оскільки для серверів БД є нормальні інсталятори. Встановити драйвер можна необхідні інструменти, а зареєструвати COM-сервер ще простіше.

перенесення драйверів

А що робити, якщо програма працює з драйвером, єдиний установник якого втрачено разом з install.exe? Та й як взагалі визначити, що програма працює з драйвером? Якоїсь спеціальної тулзи я не знайшов, тому скористаємося OllyDbg. Щоб працювати через DeviceIoControl (через цю системну функцію драйверу пристроїв відправляються різні команди), спочатку необхідно відкрити створений пристрій через символічне посилання викликами CreateFileA / CreateFileW. Від цього і будемо танцювати.

Дуже ймовірно, що доведеться імітувати її реальне використання, оскільки ми не знаємо, в який момент може статися звернення до драйверу. Відкривай в OllyDbg лог (комбінація клавіш ) І шукай підсвічені рядки, що починаються з COND. В лапках буде вказано файл, і якщо він починається з # 46; - вважай, що це наш драйвер. За допомогою утиліти WinObj (до речі, написаної знову ж Руссиновича) з'ясуй справжнє ім'я пристрою. Воно повинно виглядати як DeviceDevName. За допомогою тієї ж WinObj переконайся, що на іншому комп'ютері цього пристрою немає.

Настала черга пошуку самого файлу драйвера. Більшість драйверів розташовуються в% SystemRoot% System32Drivers. Перейди в цю папку і шукай UNICODE-рядок імені пристрою (DeviceDevName). Якщо файлу з такою рядком немає, то відкривай «Сервіс Менеджер».

Там шукай все драйвера, які розташовуються по нестандартному шляху - шукана стрічка повинна бути в одному з них. Цей же «Сервіс Менеджер» допоможе тобі перенести драйвер на інший комп'ютер (зроби скріншоти налаштувань, пропиши залежності і так далі).

Підводні камені

Якщо є можливість, то обов'язково проведи всі експерименти тільки на віртуальній машині - так ти будеш впевнений, що система не загиджені і не буде пошкоджено основну операційну систему. Перш ніж мужньо рватися в бій, я тобі пропоную спробувати свої сили на спеціально розробленою програмою. Власне, корисність від програми нульова, але перенести її просто так не вийде.

Bdetest.exe працює з BDE через алиас «testBDE», за якимось чортом звертається до драйверу і просто не може функціонувати без певної інформації в реєстрі і файлової системи. На диску ти зможеш знайти все необхідне: результат роботи скриптів, скрін BDE-аліаса, драйвер, базу і саму програму.

висновок

Перенесення програм без інсталятора - нетривіальне завдання. Необхідно мати знання в багатьох сферах IT - адмініструванні, програмуванні, дизассемблирования, налагодженні, базах даних. Але завжди пам'ятай: нестерпних програм не буває! Адже, як свідчить маніфест хакера, якщо комп'ютер робить помилку, то це ти напартачив.

Покажи цю статтю друзям:

Схожі статті