2012-12-14 2 views
3

В настоящее время я разрабатываю эмулятор кода для удовольствия, чем для чего-либо еще, используя 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

+2

@ Downvoter Зачем добавлять комментарии, почему вы отказались от этого? Таким образом, ОП может действительно улучшить вопрос, если это необходимо. ;-) – siebz0r

+0

@Stolas вы когда-нибудь писали запись в блоге об этой работе? Или у вас есть хорошая ссылка? Я ищу очень похожее решение, загрузите win32-dll в виртуальную среду без окон и вызовите некоторую функцию – Alex

+0

@Alex нет извините. – Stolas

ответ

1

Вопрос, казалось бы, что стек был в другой памяти смещения.