Как распаковать файл прошивки exe

Обновлено: 02.07.2024

Привет, хабровчане. В рамках курса "Reverse-Engineering. Basic" Александр Колесников (специалист по комплексной защите объектов информатизации) подготовил авторскую статью.

Также приглашаем всех желающих на открытый вебинар по теме «Эксплуатация уязвимостей в драйвере. Часть 1». Участники вебинара вместе с экспертом разберут уязвимости переполнения в драйверах и особенности разработки эксплойтов в режиме ядра.

Статья расскажет о подходах к анализу запакованных исполняемых файлов с помощью простых средств для обратной разработки. Будут рассмотрены некоторые пакеры, которые применяются для упаковки исполняемых файлов. Все примеры будут проведены в ОС Windows, однако изучаемые подходы можно легко портировать на любую ОС.

Инструментарий и настройка ОС

Для тестов будем использовать виртуальную машину под управлением ОС Windows. Инструментарий будет содержать следующие приложения:

установленный по умолчанию плагин x64dbg Scylla;

Самый быстрый и простой способ провести распаковку любого исполняемого файла — применить отладчик. Но так как мы будем также рассматривать язык программирования Python, то может понадобится проект:

uncompile6 проект, который позволяет разобрать байткод виртуальной машины Python;

pyinstallerExtractor инструмент для распаковки архива pyInstaller.

Общие методы снятия паковки

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


На картинке может показаться, что файл стал по размеру больше, однако это не всегда так. Большинство файлов за счет такой модификации могут уменьшить свой размер до 1.5 раз от исходного объема.

Что же от этого реверс-инженеру? Почему надо знать и уметь определять, что файл упакован? Приведу наглядный пример. Ниже приведен снимок файла, который не запакован:


И файл, который был пропущен через алгоритм UPX:


Изменения коснулись в этом случае двух основных точек исполняемого файла:

Точка входа — в случае с упакованным файлом это начало алгоритма распаковки, настоящий алгоритм программы будет работать только после того, как будет распакован оригинальный файл;

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

Итак, чтобы снова анализировать оригинальный файл, нужно найти настоящую или оригинальную точку входа. Для этого нужно разбить алгоритм на основные этапы:

Этап подготовки исполнения файла — загрузчик ОС настраивает окружение, загружает файл в оперативную память;

Сохранение контекста — упаковщик сохраняет контекст исполнения файла (набор значений регистров общего назначения, которые были установлены загрузчиком ОС);

Распаковка оригинального файла;

Передача управления оригинальному файлу.

Все описанные выше этапы можно легко отследить в отладчике. Особенно может выделяться процедура сохранения контекста. Для нее в разных архитектурах могут быть использованы команды pushad/popad или множественное использование команды push . Поэтому всегда приложение трассируют до первого изменения регистра ESP/RSP, и ставят "Hardware Breakpoint" на адрес, который был помещен в регистр в первый раз. Второе обращение этому адресу будет в момент восстановления контекста, который заполнил загрузчик ОС. Без него приложение завершится с ошибкой.

Пример UPX

Попробуем с помощью отладчика найти оригинальную точку входа для приложения. Запечатлим оригинальную точку входа до упаковки UPX:


Как та же точка входа выглядит после упаковки:


Запустим отладчик и попробуем найти место сохранения контекста:


Ждем первого использования ESP — в отладчике при этом значение регистра подсветится красным цветом. Затем устанавливаем точку останова на адрес и просто запускаем приложение:


В результате попадаем на оригинальную точку входа:


Вот так просто, теперь используя плагин Scylla Hide можно сохранить результирующий файл на жесткий диск и продолжить его анализ.

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

Пример PyInstaller

Не всегда подобный подход работает для приложений, которые используют более сложную структуру исполняемого файла. Рассмотрим файл, который был создан с помощью PyInstaller — пакет, который позволяет преобразовать Python скрипт в исполняемый файл. При генерации исполняемого файла создается архив, который содержит виртуальную машину Python и все необходимые библиотеки. Сам исходный код приложения при этом преобразуется в байт код и его нельзя дезассемблировать.

Попробуем все же получить что-то читаемое. Создадим простое приложение на Python и упакуем с помощью PyInstaller. Исходный код приложения:

Установим пакет pyInstaller и создадим exe файл:

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

После выполнения команд выше, у вас должна создаться директория ./dist/test.exe . Откроем последовательно файл с помощью pyinstallerextractor и uncompile3 :


Наш скрипт находится в директории, которая создается в результате распаковки. Наименование файла должно соответствовать названию exe файла. В нашем случае это test.pyc . Откроем его в hiew :


Декомпиляция стандартными средствами невозможна, так как инструменты просто не умеют работать с байткодом Python. Применим специализированный инструмент — uncompile6 .


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

Что представляет собой прошивка

Способы извлечения и замены файлов в прошивках Android-устройств

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

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

Стоит ли распаковывать прошивку

Распаковка прошивки представляет собой непростой процесс, который требует времени и соответствующих навыков, но является весьма актуальным и полезным.

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

Задумавшись над вопросом, нужно ли распаковывать прошивку Android, вы наверняка найдете пару дополнительных плюсов. Из распакованной прошивки можно извлечь apk-файлы или интегрировать инсталляторы прочих программ.

Распаковка прошивки Android в ZIP-формате

Для распаковки Android-прошивки нужно найти архив на ПК, кликнуть на нем правой кнопкой мыши, выбрать распаковку и указать директорию для переноса всех файлов. Решая, чем распаковать ZIP-прошивку Android или любой другой архив в данном формате, можете воспользоваться такими архиваторами, как WinRAR, 7-Zip, PeaZip или IZArc.

Распаковка IMG-прошивок

Популярным расширением архивов c инсталляционными файлами и прочими данными по прошивке является .img. Это особый подвид архивов, который не разбирается на составляющие привычными методами.

Если вы не знаете, как открыть IMG-прошивку Android на Huawei, понадобится выполнить ряд специфических действий и скачать дополнительный софт. Для работы с прошивками такого типа понадобятся утилиты EXT4 Unpacker и EXT2 Explore. После их скачивания можно приступить к процессу извлечения файлов, который проходит по такой схеме:

  1. Распакуйте IMG-архив прошивки в любую директорию на компьютере.
  2. Запустите программу EXT4 Unpacker и с ее помощью найдите файл system.img.
  3. Сохраните файл system.img с расширением .ext4 с помощью кнопки «Сохранить как».
  4. После распаковки запустите софт EXT2 Explore от имени администратора. Во вкладке «File» выберите пункт «Open Image», укажите место расположения ранее созданного system.ext4.
  5. В правой части окна программы EXT2 Explore нажмите на иконку жесткого диска правым кликом мышки, в выпадающем меню выберите опцию «Save». Будет предложена директория для извлечения, укажите любую удобную папку и дождитесь окончания процесса.

Так осуществляется распаковка IMG-прошивки Android с целью извлечения из нее полезных данных и инсталляторов.

Преобразование KDZ-архива в DZ-архив для последующего создания BIN-папки и привычных архивов

KDZ – формат прошивок, которые зачастую использует в своих устройствах компания LG. Распаковка данных файлов требует использования дополнительного софта, поскольку обычные архиваторы не способны обеспечить необходимый доступ к утилитам прошивки и предустановленным инсталляторам.

Если вы думаете, как самому поменять файлы в прошивке Android формата .kdz, заблаговременно скачайте программы Windows LG Firmware Extract и EXT2 Explore. Процесс распаковки выполняется за схемой:

  1. Запустите Windows LG Firmware Extract, укажите рабочую папку «Working Folder». Ею может оказаться любая директория на ПК, куда вы хотите произвести распаковку.
  2. Нажмите на кнопку «Open», в поле «KDZ / TOT File» выберите файл своей прошивки. Вы увидите все файлы, которые хранятся в KDZ-архиве.
  3. Нажмите на кнопку «Extract KDZ» и дождитесь, пока программа отформатирует архив в DZ-формат. Об успешном окончании процесса будет свидетельствовать надпись «Progress Done».
  4. Перейдите к пункту «DZ File», выберите в нем только что созданную прошивку в DZ-формате. Откроется таблица имеющихся в архиве файлов. Нужно выбрать все файлы с расширением .bin и нажать на кнопку «Extract DZ». После завершения процесса появится надпись «Progress extract DZFile Done».
  5. Для преобразования файлов .bin в формат .img необходимо нажать на кнопку «Merge System bin». В директории, которую вы изначально указали в качестве рабочей папки, будет создан каталог «Merge output», в котором найдете system.img.

Для открытия этого файла вами заранее была скачана программа EXT2 Explore. С ее помощью вы сможете убрать из прошивки все необходимое и достать полезные инсталляторы для кастомной прошивки.

Распаковка QSB и INB-прошивок

Распаковка QSB и INB-прошивок

Прошивки с расширением .qsb и .inb являются прерогативой устройств компании Lenovo. Их распаковка не занимает большого количества времени и проводится посредством всего одной утилиты LenovoWinTools.

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

Для работы с прошивкой через редактор LenovoWinTools достаточно установить русифицированную программу, зайти в пункт «Файл» и посредством имеющихся инструментов выбрать свою прошивку. Далее потребуется подождать, и тогда прямо из программы сможете оперировать файлами прошивки.

Как прошить устройства на базе Android

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

Пожалуйста, выполните полную очистку всех данных в режиме Recovery, если вы хотите обновиться, перепрыгнув через одну или несколько версий прошивки или более раннюю версию прошивки, используя MIUI full ROM pack. Если вы обновляете прошивку с версии MIUI Stable ROM, основанной на Android Marshmallow на версию MIUI Developer ROM, основанную на Android Nougat – выполняйте обновление через режим Fastboot. Обновление через режим Recovery может привести к сбою.


Загрузите последнюю версию прошивки MIUI. Загрузить здесь или здесь
Нет необходимости делать это повторно, если у вас уже есть загруженный файл прошивки MIUI.

Если на указанных официальных ресурсах, Вам не удалось найти необходимую версию прошивки для своего устройства ..то сможете найти её здесь или здесь ..по этим с сылкам можно найти и скачать любую (..из существующих для устройства) версию прошивки ..

Присоедините ваше устройство к компьютеру/ноутбуку с помощью кабеля micro USB и скопируйте файл прошивки MIUI, загруженный при выполнении Шага 1, в папку ‘downloaded_rom’ на внутреннем накопителе вашего устройства.



После выбора подходящего файла прошивки MIUI ваше устройство начнет обновление ПО. После успешного окончания обновления Ваше устройство автоматически запустится с новой версией прошивки.


Загрузите последнюю версию прошивки MIUI. Загрузить здесь или здесь
Переименуйте скачанный файл в ‘update.zip’ на вашем ПК.

Если на указанных официальных ресурсах, Вам не удалось найти необходимую версию прошивки для своего устройства ..то сможете найти её здесь или здесь ..по этим с сылкам можно найти и скачать любую (..из существующих для устройства) версию прошивки ..


Присоедените ваше устройство к компьютеру/ноутбуку с помощью кабеля micro USB и скопируйте файл прошивки MIUI, загруженный и переименованный при выполнении Шага 1, в корневую директорию внутреннего накопителя вашего устройства (не располагайте его в папках).


Войдите в режим Recovery на вашем устройстве. Для этого можно использовать один из следующих способов:
Способ 1: Запустите встроенное приложение ‘Обновление’ на вашем устройтве, нажмите значок ‘…’ в правом-верхнем углу экрана, выберите пункт ‘Перезагрузить в режим Recovery '.
Способ 2: Выключите ваше устройство, Зажмите кнопку “Громкость+” одновременно с кнопкой питания на вашем устройстве для входа в режим Recovery.


В режиме Recovery используйте кнопки “Громкость +/-“ для навигации по меню и клавишу питания для выбора.
После входа в режим Recovery выберите используемый Вами язык, задействуйте пункт ‘Install update.zip to System’ и подтвердите, обновление Вашего устройства начнется автоматически. Дождитесь окончания обновления ПО, выберите пункт меню ‘Reboot to System’ – спустя некоторое время новая версия MIUI будет запущена на вашем устройстве.


Компьютер/ноутбук с ОС Windows понадобятся Вам для выполнения ниже описанных действий. Убедитесь, что ваше устройство полностью заряжено или имеет достаточно заряда батареи для успешного выполнения данного процесса. Эта инструкция поможет обновить ваше устройство до последней версии MIUI. Все данные пользователя на устройстве будут уничтожены при использовании этого метода. Пожалуйста, сделайте резервную копию Ваших данных и подумайте дважды перед следующими действиями.


Загрузите MIUI ROM Flashing Tool (Size: 46 MB). Устройства в списке , отмеченные значком ★ , имеют заблокированный загрузчик. Если загрузчик вашего устройства заблокирован, пожалуйста, перейдите сюда для его разблокировки. Устройства, отмеченные значком ☆ без заблокированного загрузчика. Если ваше устройство разблокировано, пожалуйста, следуйте следующим пунктам инструкции для обновления ПО.


Выберите подходящую версию прошивки MIUI ROM для вашего устройства из списка и загрузите соответствующий файл архива.

Если на указанных официальных ресурсах, Вам не удалось найти необходимую версию прошивки для своего устройства ..то сможете найти её здесь или здесь ..по этим с сылкам можно найти и скачать любую (..из существующих для устройства) версию прошивки ..

(Пожалуйста, проверьте, что расширение загруженного файла '.tgz'. Если расширение файла'.gz', пожалуйста, измените его расширение на '.tgz')


Выключите ваше устройство. Одновременно зажмите кнопку регулировки громкости (-) и кнопку питания для входа в режим Fastboot. После этого соедините Ваше устройство с компьютером/ноутбуком с помощью кабеля micro USB (.. важно ..к разъёму компьютера/ноутбука спецификации USB 2.0 ..необходимо убедиться ) ..



Разархивируйте загруженный Вами ранее файл обновления прошивки. Скопируйте путь к разархивированной прошивке.



Разархивируйте MIUI ROM flashing tool который был скачан при выполнении Шага1, и установите его (если поступит запрос безопасности, выберите 'Запустить'). После окончания установки, запустите Mi Flash.exe и вставьте в адресную строку путь к разархивированному файлу прошивки, скопированный при выполнении Шага4.
Нажмите на первую кнопку (обведенную на рисунке желтым) для обновления списка подключённых устройств , MiFlash автоматически распознает устройство при условии установки необходимых драйверов. После этого нажмите вторую кнопку (обведена красным) для установки ПО в Ваше устройство.



Дождитесь, пока шкала выполнения задачи в MiFlash полностью заполнится зеленым и появится надпись success в колонке result, что означает успешное окончание установки обновленного MIUI ROM в ваше устройство.


Если данная инструкция не помогла вам, загрузите Mi PC Suite (После установки Mi PC Suite убедитесь, что ваше устройство в Fastboot режиме, соедините ваше устройство с компьютером и выберите подходящий файл для прошивки / обновления ПО)

1. Скачайте из вложений архив ext4_unpacker_exe.zip , распакуйте его в отдельную, удобную для вас папку (желательно в корень диска С или D). Запустите из распакованной папки на правах администратора ext4_unpacker.exe (правый клик по файлу -> запуск от имени администратора)

2. В открывшемся окне нажмите на значёк папки в правой части программы, откроется окно обзора, выберите там system.img который вы хотите распаковать


3. После выбора system.img , в окне программы отобразятся все папки раздела system (то есть system.img). Нажмите на кнопку сохранить


4. Далее откроется окно обзора. Здесь выбираем удобное для вас место сохранения и вводим название сохраняемого файла как system.ext4 . Дальше начнётся распаковка, дайте ей завершиться, может занять довольно много времени



5. После распаковки system.ext4 , можете закрыть EXT4 Unpacker. Теперь скачайте из вложений архив ext2explore-2.2.71.zip , распакуйте его, зайдите в распакованную папку и на правах администратора запустите файл ext2explore.exe

6. В появившемся окне программы выберите File -> Open Image , появится окно обзора в котором выберите system.ext4 . Далее делаем правый клик по файлу в левой части окна программы и выбираем Save . Сохраняем все в отдельную папку которую желательно назвать System


7. Ждём пока образ будет распакован. По завершения процесса, в папке System , буду находиться все файлы и папки распакованные из system.img


Cкачать:

Похожие темы Форум
Как восстановить htc one mini 2 до заводского состояния, после установки кастомной прошивки? HTC
Способ создания прошивки с предустановленным root для кастомного рекавери с помощью PRFCreator Sony
Прошивка кастомной прошивки при помощи Lumia Downloader F.A.Q.
Как распаковать zip файл на карту памяти? F.A.Q.
Как распаковать zip-архив на телефоне Телефоны

Распаковка system.img при помощи DiskInternals Linux Reader

1. Устанавливаем DiskInternals Linux Reader

2. Запускаем только что установленный DiskInternals Linux Reader (желательно запускать от имени администратора, то есть правый клик по ярлыку программы -> запуск от имени администратора

3. В левом верхнем углу окна программы выбираем Drivers -> Mount Image , в следующем окне оставляем флажок напротив Raw Disk Images и нажимаем Next >

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