Показать сообщение отдельно
Старый 09.10.2015, 11:04   #43
urban81
Писатель
Доп. информация
Восклицание Инжект.Перехват при помощи правки таблиц импорта.

Всем здравствуйте. Спасибо за помощь. Выше в заметках уже рассказывал, как прикручивать длл к ехе файлу при помощи пе едитора. Сейчас у нас длл внедрится а в адрессное пространство жертвы и подменит нужные нам функции... Тем самым у нас получается 2 свободных порта для 2 разных навигаций...
1. в ядле WinCE 6.0 уже есть встроенный DLL Injection делается через запись в реестр HKEY_LOCAL_MACHINE\SYSTEM\KERNEL
"InjectDLL" = REG_MULTI_SZ : "MyDLL1.DLL","MyDLL2.DLL", указывается список DLL, которые динамический линковщик winCE будет загружать в любой новый процесс первым делом перед тем как прочитать и залинковать Import table. Отмечу, запись в реестре нужна только для тестов на эмуляторе, т.к. на гу после перезагрузки востанавливается реестр...Поэтому и будем прикручивать длл руками...Так же скажу, кто в теме в эмуляторе SDK2 есть ошибка...В архиве с проектами есть новый эмулятор от добрых людей...
2. Разрабатываем DLL. DllMain обрабатываем событие DLL_PROCESS_ATTACH. Оно срабатывает как раз в тот момент когда новый процесс создан, все сегменты из исполняемого файла загружены в память, но еще не загружены DLL из Imports и ничего не слинковано и наш код исполняется уже в контексте нового процесса, в его виртуальных адресах.
3. Сверяем ImageName текущего процесса с тем, в который нужно сделать DLL Injection, потому как WinCE загружает DLL вообще в любой новый процесс, если процесс не тот, делаешь return FALSE из DLLMain и WinCE DLL выгружает.
4. Если ImageName совпадает, то можно делать собственно Injection. Открываем на чтение исходный exe-файл. Читаешь из него PE-заголовок, таблицу сегментов и таблицу Import. Получаем из WinCE реальный BaseAddress загрузки. Он в WinCE константный для EXE, так что можно его и не получать, а захардкодить(ТАК СДЕЛАЛ ОТКРЫЛ ЕХЕ В ПЕ ЕДИТОРЕ УЗНАЛ АДРЕС ТАБЛИЦЫ ИМПОРТА И ПРИБАВИЛ КОНСТАННТУ). По BaseAddress и RVA-адресу из таблиц EXE-файла высчитываем адрес таблицы ImportAddressTable, куда динамический загрузчик Window запишет адреса символов из COREDLL.dll и меняешь их на свои все вызовы конкретного процесса перехвачены...
Протестил на эмуляторе и гу всё на 5+...
Предлагаю всем , кто в теме паралельно попробовать руссифицировать родное приложение при помощи этого перехвата...Всем спасибо!
[[Ссылки могут видеть только зарегистрированные пользователи. ]]>
urban81 вне форума  
2 пользователя(ей) сказали cпасибо:
 
Время генерации страницы 0.04360 секунды с 11 запросами