
Совсем небольшое сообщение.
По ряду личных причин я люблю таскать свой инструментарий на флешке или внешнем жёстком диске. Одним из инструментов является IDA 6.8.
После работы с системами я не люблю, когда остаются какие-то хвосты в реестре или в виде файлов. И к сожалению, IDA и её модули (в частности, BinnDiff) этим грешны.
Ну и возникло желание получить полностью портабельный комплекс.
Ну в меру своих скромных знаний и понимания проблемы было видно три варианта решения:
- Завернуть всё в ThinApp или TurboStudio. Итог получился большим, громоздким, с ограниченной возможностью обновления плагинов и т.д. Не подошло.
- Написать некий резидент, отслеживающий изменения и откатывающий их назад после завершения сеанса IDA. Итог получился достаточно объёмным (несколько мегабайт) либо требовал наличия библиотек в системе для запуска. При изменении характера «хвостов» необходимо было заново переписывать и компилировать код. Не то.
- Обойтись встроенными средствами Windows. Об этом — подробнее.
На самом деле устранить хвосты в виде файлов и остатков в реестре вполне можно в простом командном файле Windows даже без Powershell. Код в моём случае вышел таким:
@ECHO Off rem Определяем разрядность системы rem По умолчанию IDA запустится с такой же разрядностью set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" (If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86) rem Также считываем параметр строки переданный при запуске set param=%~1 rem На всякий случай бекапим файлы с настроек - вдруг у пользователя тоже есть IDA? xcopy /E /I /C /Y /Q /H /R "%appdata%\zynamics" ".\Backup\zynamics" xcopy /E /I /C /Y /Q /H /R "%appdata%\Hex-Rays" ".\Backup\Hex-Rays" xcopy /E /I /C /Y /Q /H /R "%appdata%\IDA Pro" ".\Backup\IDA Pro" rem Чистим папки, процедура описана ниже call :removedir "%appdata%\zynamics" call :removedir "%appdata%\Hex-Rays" call :removedir "%appdata%\IDA Pro" rem Копируем в профиль пользователя все необходимые файлы настроек xcopy /E /I /C /Y /Q /H /R ".\BinDiff\INI" "%appdata%\" xcopy /E /I /C /Y /Q /H /R ".\Hex-Rays" "%appdata%\" xcopy /E /I /C /Y /Q /H /R ".\Hex-Rays\IDA Pro" "%appdata%\IDA Pro" rem Бекапим ветку реестра IDA reg export HKEY_CURRENT_USER\Software\Hex-Rays backup.reg /y rem ... и перезаписываем своими параметрами reg import settings.reg rem Теперь посмотрим, какие параметры переданы в командной строке rem Это позволит запустить IDA в другой разрядности, например х32 в Windows x64 if "%param%"=="32" goto x32 if "%param%"=="64" goto x64 if "%param:~1%"=="32" goto x32 if "%param:~1%"=="64" goto x64 if "%xOS%"=="x64" goto x64 if "%xOS%"=="x32" goto x32 rem Запускаем IDA x32 и висим в виде резидента, ожидая завершения программы :x32 start /wait idaq.exe goto end rem Запускаем IDA x64 и висим в виде резидента, ожидая завершения программы :x64 start /wait idaq64.exe goto end rem Тут процедура удаления папок :removedir del /F /Q /S %1 > nul rmdir /s /q %1 exit /b rem И завершение работы :end rem Записываем настройки из реестра в файл reg export HKEY_CURRENT_USER\Software\Hex-Rays settings.reg /y rem ... а из профиля пользователя копируем все файлы xcopy /E /I /C /Y /Q /H /R "%appdata%\zynamics\*" ".\BinDiff\INI\zynamics" xcopy /E /I /C /Y /Q /H /R "%appdata%\Hex-Rays\*" ".\Hex-Rays" xcopy /E /I /C /Y /Q /H /R "%appdata%\IDA Pro" ".\Hex-Rays\IDA Pro" rem Чистим ветку реестра reg delete HKEY_CURRENT_USER\Software\Hex-Rays /f rem ... и восстанавливаем то, что там было до нас reg import backup.reg rem Чистим все хвосты del /F /Q backup.reg call :removedir "%appdata%\zynamics" call :removedir "%appdata%\Hex-Rays" call :removedir "%appdata%\IDA Pro" rem Восстанавливаем папки в профиле пользователя, которые были до запуска xcopy /E /I /C /Y /Q /H /R ".\Backup\*" "%appdata%\" rem ... и удаляем этот бекап call :removedir Backup
Побочным эффектом такого командного файла является чёрное окно, висящее в ходе работы IDA. Поэтому я собрал это всё в Quick Batch Compiler, в итоге программа стала полностью «невидимой».
Таким образом получилось портабелизовать программу с использованием минимального по размерам файла без необходимости дополнительных библиотек, исключительно встроенными средствами Windows, которые находятся в составе операционной системы более 10 последних лет «из коробки». При этом не ограничена возможность изменения плагинов, скриптов и настроек самой IDA.
Данный «проект» (очень громко сказано) есть на гитхабе, там же — собранный файл. Принимаются критика и дополнения.
P.S.: Я знаю, что начиная с IDA 7.0 изменились пути и затрагиваемые файлы. Но я использую 6.8 в виду того, что некоторые плагины не переписаны под 7.0, да и вообще мне 7.0 не понравилась. Тем не менее, предлагаемая концепция легко адаптируется и под новые версии IDA.
