21 июля 2011 г.

Анализ ПО ГУ RoadRover. Дизассемблирование.

Основным инструментом при анализе исполняемых файлов я использовал IDA 5.5. Дополнительно на всякий случай установил сигнатуры mfc8_arm.sig, ce6libc.sig, ce6lib.sig.

Для начала дизассемблируем Manager.exe и проанализируем таблицу импорта. Импортируемые функции зачастую являются ориентирами для понимания дизассемблированного кода. К сожалению, функции из MFC80U импортируются по Ordinal, а не по именам.
 
Попробуем получить таблицу зависимостей Ordinal -> Name.
Для этого можно можно экспортировать имена функций из файла mfc80u.lib с помощью утилиты dumpbin:
dumpbin -exports  mfc80u.lib
либо берем сразу взять файл MFC80U.def
Необходимо помнить, что мы анализируем приложение WinCE под ARM, поэтому следует брать файлы из соответствующих директорий:
%VCINSTALLDIR%\ce\atlmfc\src\mfc\MFC80U.def
%VCINSTALLDIR%\ce\atlmfc\lib\armv4i\MFC80U.lib

Теперь создадим IDT-файл, формат которого такой:
ALIGNMENT 4
0 Name=<name.dll>
<ord>  Name=<func_name>

Сделаем файл mfc80u.idt из MFC80U.def прямо в текстовом редакторе FAR-а: отрезаем шапку и футер. После чего делаем замену (Ctrl+F7) при помощи регулярки:
^\s*(\d+)\s+(\S+).*$
$1 Name=$2
В завершении добавляем в начало:
ALIGNMENT 4
0 Name=mfc80u.dll

На базе получивщегося IDT-файла создадим IDS файл с помощью утилиты zipids.exe:
zipids.exe mfc80u.idt
и положим его в директорию IDA с таким же именем как у DLL и расширением .ids:
<idapath>\ids\wince\arm\mfc80u.ids

Теперь ещё раз открываем Manager.exe в IDA и наблюдаем, что у импортируемых из mfc80u.dll функций появились имена.
 
Пришло время FLIRT. Открываем в IDA окно сигнатур (Shift+F5) и натравливаем сначала файл mfc, а потом mfc8_arm. Применение остальных сигнатур не дало каких-либо результатов.

На этом подготовка к изучению внутренностей исполняемых файлов завершена.

Комментариев нет:

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