11 июля 2011 г.

Строительство Windows CE 6 под эмулятор для запуска ПО ГУ RoadRover

Для анализа и реверсинга ПО понадобиться где-то запускать его. Делать это на самом ГУ представляется затруднительным, т.к. не хочется выковыривать его из машины, а работать в самой машине неудобно. Поэтому есть смысл подготовить стенд на базе MS Device Emulator. Для этого создадим образ Windows CE 6.0 под этот эмулятор.

Результирующий образ WinCE можно скачать со страницы Device Emulator Image моего проекта изучения и модернизации ПО RoadRover.



Подготовка инструментария, кратко по шагам

  1. устанавливаем MS Visual Studo 2005 и все обновления (SP1 и т.п.), именно VS2005, т.к. только в него интегрируется Platform Builder
  2. устанавливаем Windows Embedded CE 6.0 Platform Builder и все обновления (SP1, годовые и месячные обновления)
  3. устанавливаем Device Emulator 3, он имеет ряд новых функций по сравнению с тем, который  идет в комплекте с Platform Builder
  4. устанавливаем ActiveSync
ActiveSync и Device Emulator можно взять на сайте MS. Там же можно найти триальную (40 дней) версию Platform Builder.

Создание и настройка проекта

Создаем проект New -> Project ->  Platform Builder for CE 6.0 -> OS Design, не забыв указать путь размещения и имя, например, RREmul. Далее с помощью визарда настраиваем новый проект:
  1. Board Support Packages: Device Emulator: ARMV4I - т.к. собираем под эмулятор ARM
  2. Design Templates: PDA Device - я посчитал, что это наиболее близкая конфигурация
  3. Design Template Variants: Mobile Handheld
  4. Applications Media: отключаем
    • Quarter VGA Resources
  5. Networking Comunications: убираем
    • TCP/IPv6
    • PPTP
    • 802.11
    • IrDA
Проект создан. Настроим его свойства. 
Т.к. устройство китайское, то ПО нужна китайская локаль. Без неё запущенный Manager.exe будет выглядеть вот так:
  
Опытным путем (дизассемблирование + трейсинг) установлено, что нужна codepage 936. Поэтому открываем Project -> Properties, в Configuration выбираем All Configurations. Переходим в Locale и в списке Locales добавляем (ставим галку) Китайский (Сингапур) и, конечно, Русский. 

Т.к. далее мы собираемся использовать эмулятор без Platform Builder, то отключаем KITL (Kernel Independent Transport Layer). Для этого в Configuration выставляем Release (в Debug-версии KITL оставим) и в Build Options убираем галку на против Enable KITL.
Для использования Remote Tools нам понадобиться подключаться к эмулятору через ActiveSync. Remote Tools могут подключаться и через KITL, но мы его отключили, а так же через TCP, но там свои заморочки. Для подключения через ActiveSync необходимо переключить дефолтовый COM на DMA транспорт. Это делается с помощью запуска на эмуляторе программы dmacnect.exe. Чтобы не делать это каждый раз руками нужно добавить его в satrtup, для этого открываем через Solution Explorer (папка Parameter Files)  файл project.dat и дописываем туда:

IF IMGNOKITL
Directory(LOC_DIRWINDOWSSTARTUP):-File("DMAcnect.lnk","\Windows\DMAcnect.lnk")
ENDIF ; IMGNOKITL

Убедиться потом что транспорт переключен на DMA можно в запущенном эмуляторе, перейдя на Control Panel -> PC Connection. Там должно быть указано "DMA default". Подробнее о таком способе подключения я прочитал здесь.

Теперь добавим некоторые необходимые элементы, для этого открываем Catalog Items View и с помощью формы поиска находим элементы по соответствующему ключу:
 
Таким образом необходимо добавить следующие элементы:
  • SYSGEN_ATL - Active Template Library (ATL), чтобы не получить при сборке ошибку "NMAKE : fatal error U1073: don't know how to make '......\atlsd.lib'"
  • SYSGEN_CPP_EH_AND_RTTI -  C++ Runtime Support for Exception Handling and Runtime Type Information, чтобы не получать "Ordinal 1580 missing" при запуске приложений из D2280
  • SYSGEN_OLE_GUIDS - CoCreateGuid functionality for OLE32, это потребуется для htmlayout - библиотеки, которую я планирую использовать для создания GUI новых приложений
  • SYSGEN_URLMON - URL Moniker Services, так же требуется для htmlayout
Проект готов, выбираем конфигурацию Release и запускаем сборку.


Создание SDK

После сборки образа Windows CE 6.0 займемся созданием SDK. Оно понадобиться нам для создания программ под наш эмулятор и в конечном счете для создания программ для ГУ RoadRover. Конечно, хорошо бы иметь оригинальное SDK (а лучше и BSP) от RoadRover, но за неимением большего...
SDK создается очень просто: Project -> Add New SDK. Далее указываем в настройках:
  • SDK Name: RREmul_SDK
  • Product Name: RREmul
  • Company Name: none
  • Company Website: none
На вкладке Install  можно указать название для результирующего .msi файла.
На вкладе Emulation укажем созданный нами образ системы и разрешение экрана:
  • Configuration: Dervice Emulator ARMV4I Release
  • Width: 800
  • Height: 480
  • Color: 16
Настройка закончена, запускаем сборку: Build -> Build All SDKs.
В результате получаем файл .msi - инсталятор, который включает в себя необходимые заголовочные файлы, библиотеки и образ Windows CE 6.0 для эмулятора. С помощью этого SDK мы можем разрабатывать и отлаживать готовые приложения с использованием MS Visual Studio 2005 и 2008.
После установки SDK в визарде создания проекта Smart Device появится возможность выбрать RREmul_SDK, а в списке Target Device появится RREmul_SDK Emulator. Так же это устройство появится в Device Emulator Manager.

 

Первый запуск

Существует множество способов запустить созданный нами эмулятор: можно запустить прямо из Platform Bulder, из Device Emulator Manager, из проекта Smart Device и пр. Я предлагаю в первый раз запустить через Device Emulator Manager.

Но сначала надо настроить путь до директории, которая отобразится в эмуляторе как \Storage Card. Для этого открываем в Visual Studio: Tools -> Options -> Device Tools -> Devices, выбираем в списке RREmul_SDK и нажимаем кнопку Properties. В появившемся диалоге нажимаем на кнопку Emulator Options. Появится следующий диалог, где в поле Shared Folder указываем путь до директории, где на ББ* находятся файлы оболочки (D2280), скопированные с ГУ.

После настройки открываем Tools -> Device Emulator Manager, где выбираем RREmul_SDK Emulator и в контекстном меню жмем Connect. После загрузки эмулярора переходим в нем в директорию \Storage Card\D2280 и запускаем Manager.exe
Эмулятор работает не быстро, стоит подождать, и на экране появится интерфейс RoadRover:
 


Некоторые важные особенности работы с эмулятором

ActiveSync 
Для подключения к эмулятору, через ActiveSync, например, для использования Remote Tools, необходимо произвести следующие действия:
  1. Настроить ActiveSync на работу через DMA. Для этого открываем настройки соединения ActiveSync и разрешаем DMA
  1. В Device Emulator Manager произвести подключение - Cradle в контекстном меню нашего устройства:
  1. Если подключение заканчивается ошибкой “The Microsoft ActiveSync reported the following error: Unable to load device side components. Please check server configuration settings.”, то необходимо открыть директорию C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\target\wce600\ и сдублировать поддиректорию armV4i в armV4. Подробнее об этом баге можно прочитать здесь.
  2. В процессе удачного подключения ActiveSync покажет визард, который надо просто пройти без изменений.

Remote Tools 
Для использования Remote Tools (Process Viewer, Registry Editor и т.п.) необходимо настроить их работу с эмулятором через ActiveSync. Для этого запускаем любой из инструментов, например, File Viewer. Появиться окно инструмента и диалог подключения, в котором жмем Cancel:
 
Далее через меню инструмента открываем Connection -> Configure Windows CE Platform Manager. Выбираем там Default Device и жмем Properties. В появившимся диалоге Device Properties устанавливаем в обоих полях Microsoft ActiveSync:
 

COM-порт
Согласно статье в MSDN, Device Emulator эмулирует только один последовательный порт - COM1, который можно связать к COM-порту на ББ*. Настраивается это в свойствах эмулятора на вкладке Peripherals. Эмулируемому COM1 соответствует поле Serial port 0, где выпадающем списке можно выбрать COM-порт на ББ.
Для эмуляции других COM-портов, видимо, придется использовать Port Splitter на WinCE.



* ББ - “Большой Брат”, настольный персональный компьютер.

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

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