Как извлечь установочный файл из установленной программы

Обновлено: 06.07.2024

Часто возникают ситуации, когда программа, установленная на одном компьютере, должна непременно оказаться на другой машине. Причем инсталлятора нет, простого копирования файлов не хватает, а человек, который ставил программу, куда-то пропал вместе с дистрибутивом.

В случае с редким или самописным софтом такая проблема случается сплошь и рядом. Практически каждая отдельно взятая контора может похвастаться, что какой-то местный кудесник-программист наколотил две-три тысячи строк кода, создавая очередную программу отчетности или ERP-систему. И все идет хорошо, пока этот компьютерный гуру не потеряется. Стандартного инсталлятора нет, простое копирование папки с программой не помогает, а программу срочно нужно установить еще на одну машину. Кажется, пора начинать рвать на себе волосы? Но это не вариант для компьютерной нечисти! 🙂 Что переносить?

Итак, самый главный вопрос: что переносить кроме папки с программой? Условно все необходимое можно разбить на три пункта:

  1. Файлы, к которым обращается программа.
  2. Ветки реестра, к которым обращается программа.
  3. Среда выполнения.

Если с пониманием первых двух пунктов проблем нет, то насчет третьего стоит сделать уточнение. Под средой выполнения здесь понимаются базы данных, драйвера устройств (псевдоустройств), именованные каналы (Named Pipes), мэйлслоты, COM/ActiveX компоненты и так далее. То есть, все, с чем работает программа (и что предоставлено сторонним софтом, а не операционной системой) через стандартные интерфейсы Windows — будь то сеть, IPC или тому подобное.

Среда является самым проблемным компонентом при переносе, и именно из-за среды приходится заморачиваться, чтобы ОС на обеих машинах совпадали.

Какие файлы и ветки реестра переносить?

Господа, давайте дружно поднимем бокалы с кофе, выпьем и почтим память безвременно ушедших утилит-мониторов NT Filemon и NT Regmon, которые отслеживали обращения любого процесса к файлам и ключам реестра соответственно. Злой гений Марка Руссиновича безжалостно аннигилировал их… а потом воссоздал из пепла в одном мощном и полезном инструменте. Встречайте, Process Monitor. Именно эта тулза будет основным оружием переноса и поможет нам разобраться, какие файлы использует программа и к каким ключам в реестре обращается. Для этого нам понадобятся две функции: Show Registry Activity и Show File System Activity.

Итак, открывай ProcMon, запускай переносимую софтину и дождись, пока она полностью загрузится. Затем ступай в ProcMon, отключи логирование, найди нужную программу (по имени исполняемого файла), жми правой кнопкой по записи в столбце Process Name и выбирай Include ‘SuperProg.exe’, где SuperProg.exe — это исходное приложение для переноса. Ты увидишь, что Process Monitor отсеял все события, связанные с другими процессами. Можно было бы анализировать все в уме, отслеживая события, которые появляются в Process Monitor, но мы поступим иначе. Для удобства сохраним лог всех обращений в файл. Для этого нажимай «File -> Save…». В окне сохранения опцию «Events to save» выставляй в «Events displayed using current filter»(чекбокс «Also include profiling events» должен быть включен), а «Format» выбирай «Comma-Separated Values (CSV)». Сохрани куда-нибудь Logfile.csv и можешь заглянуть внутрь. Испугался? 🙂

Разобраться в этой помойке без помощи парсера сложно. Чтобы упростить задачу, я, когда сам занимался подобным переносом, набросал два Perl-скрипта (ищи их на диске). Положи эти скрипты в папку, где был сохранен Logfile.csv (или сразу сохраняй лог в папку к скриптам). Теперь запускай parse.pl. Этот скрипт отпарсит log-файл и создаст еще два лога: file.log будет содержать уникальные обращения к файлам и папкам, reg.log —уникальные обращения к веткам реестра.

Отделяем мух от котлет

Не торопись запускать второй скрипт. Сначала рекомендую отсеять явно левые записи из reg.log. Такие ветки реестра, как HKLM/Software или HKCR/Interface являются чисто системными, поэтому на новую машину их импортировать не имеет смысла (в худшем случае можно испортить систему). Удаляем. Сильно тут не лютуй, а то выкинешь что-то, что имеет отношение к программе, которую переносим. После этого можно с чистым сердцем запускать export.pl. Скрипт пошуршит и создаст в папке кучу REG-файлов (их можно импортировать на целевой системе) + папку subdir. Далее необходимо проанализировать содержание Reg-файлов, напрячь голову и отсортировать файлы на три группы:

  • Нужен программе;
  • Не нужен программе;
  • На дополнительное изучение.

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

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

…и так далее, до файлов включительно.

Непосредственный перенос

На новой машине скопируй папку с программой в C:Program Files (к примеру). Импортируй ключи реестра, которые ты определил в группу «Нужен программе». Из папки subdir восстанови структуру файлов и каталогов, отсутствующих в системе, на которую выполняется перенос. Надеюсь, ты понимаешь, что системные файлы и библиотеки заменять не надо. Поэтому при переносе файлов нужно быть очень осторожным. Обязательно обращай внимание, где располагается перемещаемый файл — проведи аналогию с переменными окружения (изучи вывод команды «set» в консоли). Просмотри содержимое каждого файла, который, как тебе кажется, не является системным. Поправь значения опций, в которых задается полный путь до каких-либо компонентов, если найдешь файл(ы) настроек.

Если о защите системных библиотек 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. От этого и будем плясать.

Загрузи программу в отладчик. Прямо на точке входа в окне дизассемблера жми <Ctrl+G>, вводи CreateFileA и нажимай <OK>. Мы попали в начало функции открытия файла. На этом месте нажимай <Shift+F4> или в меню по правой кнопке «Breakpoint - Conditional log». В открывшемся окне в поле «Expression» вписывай DWORD PTR DS:[ESP+4] — по этому адресу лежит указатель на открываемый файл. В комобоксе «Decode value of expression as» выбирай «Pointer to ASCII string» (для юникод-версии соответственно — «Pointer to UNICODE string»). Радио-кнопку <Log value of expression> выставляй в «Always». Остальные опции оставь по умолчанию. Нажимай <OK> и запускай программу.

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

Там ищи все драйвера, которые располагаются по нестандартному пути — искомая строка должна быть в одном из них. Этот же «Сервис Менеджер» поможет тебе перенести драйвер на другой компьютер (сделай скриншоты настроек, пропиши зависимости и так далее).

Утилита хорошая, но, увы, не совсем корректно инсталлирует драйвера. Поэтому, после того, как установишь свой драйвер, выполни следующие действия: найди в редакторе реестра ветку HKEY_LOCAL_MACHINESystemCurrentControlSetServicesвыбранноеимядрайвера и удали ключи «Group» и «ObjectName» в этом разделе. Если ключи не удалить, то менеджер при запуске драйвера будет выдавать ошибку, сообщая, что указан некорректный путь, хотя путь тут как бы и не причем.

Подводные камни

Если есть возможность, то обязательно проводи все эксперименты только на виртуальной машине — так ты будешь уверен, что система не загажена и не повредишь основную операционку. Прежде чем мужественно рваться в бой, я тебе предлагаю попробовать свои силы на специально разработанной программе. Собственно, полезность от программы нулевая, но перенести ее просто так не получится.

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

Заключение

Перенос программ без инсталлятора — нетривиальная задача. Необходимо обладать знаниями во многих сферах IT — администрировании, программировании, дизассемблировании, отладке, базах данных. Но всегда помни: непереносимых программ не бывает! Ведь, как гласит манифест хакера, если компьютер совершает ошибку, то это ты напортачил.

APK Extractor
версия: 4.21.07

Последнее обновление программы в шапке: 23.10.2021

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Краткое описание:
Извлечение файла APK из установленного приложения в одно касание без рут.

Откройте APK Extractor. Появится список установленных приложений.
Выберите нужное приложение и нажмите на него.
Файл APK должен сохраниться в папке "ExtractedApks". Убедитесь, что извлеченный файл APK находится там.

Прикрепленное изображение

Причина редактирования: Обновление: новая версия 4.21.07 (21007)Pro

R0100v,
Вы разработчик? Если нет, то укажите его и источник, откуда взято приложение.

R0100v,
Русского нет (хотя он там особо и не нужен), только Англ., и Италия. Прога работает нормально, даже системные извлекает.

Русского нет (хотя он там особо и не нужен), только Англ., и Италия.

Угу, нет и не было.
Кому нужно, держите русифицированный вариант:

APK Extractor v3.0 RUS

Прикрепленное изображение

APK Extractor v3.0 RUS.apk ( 489.29 КБ )

kototkot, Х-плор умеет то же самое, по пункту Диспертчер программы. Да, но Total Commander и X плорером я бы ребенку не доверил пользоваться. А тут показал раз и забыл. Приложение системное извлек. А ему для работы еще нужны свои сервисы. Их то как извлекать? Да, но Total Commander и X плорером я бы ребенку не доверил пользоваться.

Взрослые, недооценивающие современных детей, явно переоценивают себя.
А если серьезно, действительно, есть ли преимущества сабж перед фичей ТС? Т.е. если уже стоит последний приложение будет излишним? Сколько телефонов может покалечить это творение, много людей начнут убивать системные апк. Без рут ДОСТУПА

3aval,
Каким образом? Приложение лишь извлекает apk файл, без рута оно никоим образом не сможет что либо изменить в системе.
Пользователям навороченных файл-менеджеров на рутованных девайсах оно может и бессмысленно, но иногда хочется извлечь что-либо предустановленное не рутуя систему - тогда сабж вполне себе пригодится.

Пользователям навороченных файл-менеджеров на рутованных девайсах оно может и бессмысленно, но иногда хочется извлечь что-либо предустановленное не рутуя систему - тогда сабж вполне себе пригодится.

Не вполне согласен. "Польза или бесполезность" приложения никак не зависит от прав суперпользователя, а лишь от наличия ФМ с фичей, аналогичной сабж. "Предустановленное" без рута одинаково извлекается, что через тот же ТС, что через сабж.
А про "бессмысленность". Не запрещается иметь одновременно несколько приложений с похожим функционалом и пользоваться в конкретных обстоятельствах тем, которое удобнее или просто больше "нравится". Если сделать долгий тап на любом приложении, то активируется режим множественного выделения - может кому ещё пригодится.

APK Extractor v3.03

Что нового:
- Added Polish, Portuguese-Brazilian and Turkish translations.
- Minor issues fixed.
- Saved apk format Modified to AppName_AppVersionName_AppVersionCode.apk.

Ну, ничегоси ©! Изобрести велосипед и постоянно допиливать его! Вау. В почти любом файл-менеджере есть доступ к root. Скопировать файл из /system/app или /data/app религиозные соображения не позволяют? Копируй тогда и соответствующую папку из /data/data - будет бекап.

APK Extractor
(meher)
Это первое приложение, которое должно быть!
Если бы я раньше знал было бы лучше.
Например, недавно обнаружил, что самый лучший PDF Viewer v1.1 перестал обновляться,
более того приложение переименовали и сделали уже совсем не то что было.
Теперь сделал на всякий случай бэкап. Недавно Opera update заглючил, долго пытался найти apk для отката.
Прога супер!

Спасибо за русскую и без рекламы, но почему-то версия программы отображается не 3.03, а 29. :o

Не знал что без Root такое возможно. Даже системные приложения извлекает.

izvlechapk

Очень часто после скачивания приложения из Google Play или другого неизвестного источника появляется необходимость сохранить на своем устройстве установочный файл с приложением (.apk). Например, для того чтобы передать интересное приложение по Bluetooth. Однако не всегда есть время искать установочный файл на различных файлообменниках и многочисленных ресурсах, посвященных Android-тематике. Поэтому, для того, чтобы извлечь установочный файл с приложением (.apk) из устройства, существует несколько нехитрых способов. В данном примере я расскажу вам о трех наиболее популярных.

Способ №1

чтобы извлечь установочный файл с приложением (.apk) из устройства, необходимо:
1) Для начала скачать файловый менеджер - Astro File Manager и запустить скачанное приложение. В том случае, если Astro File Manager у вас уже установлен, необходимо найти его на вашем android устройстве и просто запустить (полный путь) Меню - Astro File Manager.

2) После запуска Astro File Manager мы попадаем в окно, в котором видим присутствующие на устройстве накопители памяти и список серии облачных сервисов (в них всегда можно зарегистрироваться, либо авторизоваться, расширив тем самым внутреннее пространство устройства на несколько лишних Gb).

3) Затем делаем свайп влево, открыв основное меню приложения.

4) После этого необходимо щелкнуть на пункте Менеджер приложений, попав в новое окно, показывающее все установленные на вашем смартфоне или планшете приложения.

5) Для того, чтобы извлечь установочный файл с приложением (.apk) из устройства, необходимо тапнуть на приложение которое нужно извлечь, например Google Chrome, тапаем на иконку Google Chrome и перед нами появятся два предложения: сделать резервную копию или деинсталлировать.

6) Тапаем на левый пункт Рез. копия и ждем окончания процесса. После того, как копирование будет завершено, установочные файлы приложений можно будет найти в памяти телефона.

7) Полный путь до установочных файлов приложений выглядит таким образом: /sdcard/bakups.

Способ №2

Устанавливаем приложение Root unistaller. Открываем приложение, Root Unistaller отсканирует сколько у вас приложений и сделает бекап всех приложений по пути:
С телефона mnt\sdcard\ RootUnistaller\autobackups.
C компьютера (чтобы телефон распознавался как флешка) sdcard\ RootUnistaller\autobackups.

Способ №3

Получаем Root. Устанавливаем приложение Root Browser. Открываем приложение и переходим по по пути \data\app\ и выбираем приложение. Если Вас интересуют системные приложения то переходим по этому пути \system\app\ и выбираем приложение. Выбранные приложения сохраняем на SDCARD (карта памяти) и делаем с ним все что хотим.

Если у вас нет доступа в интернет или по какой-то другой причине вы не можете использовать браузер, есть возможность установить приложение с настольного компьютера.

С помощью браузера на компьютер скачайте APK. Затем подключите смартфон к компьютеру и скопируйте на него файл. Если раньше вы никогда не делали этого, нужно будет включить отладку по USB.

Для этого выберите «Настройки», прокрутите вниз до пункта «Об устройстве» и семь раз нажмите «Номер сборки». Это откроет вам скрытое меню разработчика. Вернитесь в «Настройки», выберите «Параметры разработчика» и нажмите «Отладка по USB». Установите флажок напротив пункта «Отладка по USB».

Теперь вы можете подключить смартфон к компьютеру

Теперь вы можете подключить смартфон к компьютеру при помощи USB-кабеля. Устройство должно определиться так же, как карта памяти или флешка. Переместите файл, скачанный с сайта, на смартфон. Вот что нужно сделать для этого:

  1. Найдите нужный файл на компьютере.
  2. Кликните по нему правой кнопкой мышки и выберите пункт «Копировать».
  3. Найдите на ПК смартфон, который отображается как съемный диск.
  4. Откройте его и найдите папку /sdcard/download.
  5. Скопируйте APK в эту папку.

После завершения копирования используйте менеджер файлов на смартфоне, чтобы найти его и запустить.

Если у вас нет USB-кабеля, можно установить WiFi FTP-Server из Google Play, а затем использовать FTP-клиент на компьютере для переноса файла. Но это более сложный вариант, USB-кабель обычно легче найти.

Где взять APK файл?

Вы можете скачать и установить APK файл с магазина приложений Google Play. Также вы можете скачать APK с других сайтов, которые занимаются распространением программного обеспечения. Нередко APK файл можно скачать с сайта разработчика приложения.

Что находится внутри APK файла?

Файлы в формате APK имеют четко определенную структуру.

  • META-INF:
    • MANIFEST.MF – файл с данными о других файлах, находящихся в данном архиве (контрольные суммы файлов);
    • CERT.RSA – сертификат, которым подписано приложение;
    • CERT.SF – файл с данными о сертификате и ресурсах;
    • armeabi – для процессоров ARMv6 и более старых;
    • armeabi-v7a – для процессоров ARMv7 и более новых;
    • x86 – для процессоров с архитектурой x86;
    • mips – для MIPS процессоров;

    Посмотреть содержимое APK файла очень просто и это может сделать любой желающий. Все что нужно сделать, это открыть APK файл любым архиватором. Например, вы можете использовать бесплатный архиватор 7Zip.

    Особенности утилиты

    • Возможность установки как приложений с официальными цифровыми подписями, так и программ «написанных» сторонними разработчиками;
    • Поддержка сканирования подключенных портативных носителей информации;
    • Функция синхронизации с сервисом Play Market;
    • Наличие интегрированного сканера устанавливаемых приложений на предмет наличия вредоносного кода;
    • Поддержка многопоточной «пакетной» инсталляции.

    Новый формат файла, некоторые изменения

    Читайте также: