В настоящее время я разрабатываю эмулятор кода для удовольствия, чем для чего-либо еще, используя libemu в качестве ядра для этого эмулятора.Загрузка PE в память для эмуляции
Единственное, чего я действительно хочу достичь, - загрузить весь PE в память и позволить ему разорвать.
Так что я построить небольшой список TODO со следующими пунктами:
- Прочитайте заголовки ◦Check если PE действителен (x86 Platform)
- Извлеките необходимые данные для настройки сегментов памяти
- Подключить все импортированные функции к моему пользовательскому API.
- Установите EIP правильно
- работать Постройте сегмент стека (набор особ и EBP)
- Установите EFLAGS
Я сумел получить большую часть этого сделать в течение дня. Хотя у меня, похоже, проблемы с настройкой сегмента стека правильно. В настоящее время я установил свои регистры следующего сегмента кода:
/* Set Registers */
entry_point = pe->nt_header->AddressOfEntryPoint;
emu_cpu_eip_set(cpu, entry_point);
emu_cpu_reg32_set(cpu, eax, 0x00
emu_cpu_reg32_set(cpu, ecx, 0x00);
emu_cpu_reg32_set(cpu, edx, entry_point);
emu_cpu_reg32_set(cpu, ebx, 0x00);
emu_cpu_reg32_set(cpu, ebp, (0x0095f000 - 0x1000/2));
emu_cpu_reg32_set(cpu, esp, emu_cpu_reg32_get(cpu, ebp));
emu_cpu_reg32_set(cpu, esi, 0x00);
emu_cpu_reg32_set(cpu, edi, 0x00);
emu_cpu_eflags_set (процессор, 0x0000246);
Я думаю, что проблема лежит в регистре ebp. Значения кажутся странными, но PyEmu, похоже, использует их также. Причина, по которой я думаю, что проблема лежит в использовании стека, хорошо, что она жестко запрограммирована, и второй код, который выходит из строя, составляет 83 65 f8 00, что переводится в 00692D67 и dword ptr [ebp-8], 0 в Assembler.
Я думаю, что стек установлен с использованием NTLoader для файлов PE. Но я не могу найти его или документацию об этом.
Любые указатели о том, как продолжить, будут действительно оценены.
- Робин
пс. Я перекрестился, разместил это на нескольких досках и т. Д., Чтобы увеличить шанс на ответ. Я прочитал много старой документации Windows по загрузке файлов PE, но все они просто указывают на сегмент SP в заголовках. Но поскольку это не ESP, я сомневаюсь, что это базовый (EBP) стек.
Один кросс-пост можно найти на OpenRCE: http://www.openrce.org/forums/posts/2171 Другой кросс-пост можно найти по адресу SysInternals: http://forum.sysinternals.com/topic28898_post138041.html#138041
@ Downvoter Зачем добавлять комментарии, почему вы отказались от этого? Таким образом, ОП может действительно улучшить вопрос, если это необходимо. ;-) – siebz0r
@Stolas вы когда-нибудь писали запись в блоге об этой работе? Или у вас есть хорошая ссылка? Я ищу очень похожее решение, загрузите win32-dll в виртуальную среду без окон и вызовите некоторую функцию – Alex
@Alex нет извините. – Stolas