Сейчас на форуме: tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› PE loader
Посл.ответ Сообщение

Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 07 января 2008 23:37
· Личное сообщение · #1

Итак решил написать простейший PE лоадер.
Правда столкнулся с проблемой:
при вызове некоторых API уже запущенным из памяти приложением происходит ошибка, так как происходит обращение к несуществующему адресу (00430C5C (пример)).
В чем может быть ошибка?
З.Ы.: ImageBaseAddress в PEB исправляю.
З.З.Ы.: критика, связанная с офрмление кода, привествуется =)
www.everfall.com/paste/id.php?2yrizlxr5q8s код
www.everfall.com/paste/id.php?lvawyn29joir load.h файл



Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 07 января 2008 23:58 · Поправил: El_Diablo
· Личное сообщение · #2

Кажется,понял в чем ошибка,но хз как исправить
UnmapViewOfFile((LPCVOID)dwAddress); вызовом этой процедуру мы подгот авливаем память к записи туда наело подопытного файла.
как правило, ImageBase(dwAddress = ImageBase файла) подопытных равен 00400000.
Но по этому адресу у нас спроецирована одна из системных билиотек(user32.dll), которая необходима нашему процессу.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 08 января 2008 00:23
· Личное сообщение · #3

системная библа по такому адресу? врядли...

-----
[nice coder and reverser]




Ранг: 59.9 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 08 января 2008 00:57
· Личное сообщение · #4

Едиснтвенное, то приходит в голову: это копирование некоего стаба,который загрузит на подопытный файл в память и запустит оттуда.



Ранг: 4.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 января 2008 01:09
· Личное сообщение · #5

так точнее, хотя тоже самое; а вообще структуры лучше проверить по не одному источнику, т.к. многие в них как нарочно корявки вставляют.
struct _PEB_LDR_DATA
{
unsigned long Length;
unsigned char Initialized;
void* SsHandle;
struct _LIST_ENTRY InLoadOrderModuleList;
struct _LIST_ENTRY InMemoryOrderModuleList;
struct _LIST_ENTRY InInitializationOrderModuleList;
}



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 08 января 2008 10:55
· Личное сообщение · #6

El_Diablo пишет:
при вызове некоторых API уже запущенным из памяти приложением происходит ошибка, так как происходит обращение к несуществующему адресу (00430C5C (пример)).

релоки обрабатываешь?



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 08 января 2008 15:38
· Личное сообщение · #7

El_Diablo пишет:
UnmapViewOfFile((LPCVOID)dwAddress); вызовом этой процедуру мы подгот авливаем память к записи туда наело подопытного файла.

На самом деле это ничто иное как расстрел памяти и приводит к ошибкам 2го порядка (когда ошибка напрямую не проявляется, а приводит к появлению другой ошибки).

З.Ы. По поводу оформления - больше похоже на асм, чем на С; поищи книгу Ален Голуб "Веревка достаточной длины, что бы встрелить себе в ногу".



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 10 января 2008 12:17
· Личное сообщение · #8

Очень странный загрузчик на ф-циях kernel32 с использованием низкоуровневых структур.

-----
продавец резиновых утёнков




Ранг: 12.4 (новичок)
Активность: 0.010
Статус: Участник

Создано: 12 января 2008 22:10
· Личное сообщение · #9

У кого-нить остались исходники старого доброго BO2K? Там был "правильный" загрузчик, со всеми релоками и т.д. При этом учитывал особенности 9х/NT.




Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 13 января 2008 00:53
· Личное сообщение · #10

ashghost
BO2K at SourceForge http://sourceforge.net/projects/bo2k/

+ есть загрузчик на асме от Usar http://usar.pp.ru/ 'a

-----
EnJoy!




Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 25 февраля 2008 17:25
· Личное сообщение · #11

Тоже есть вопрос про PE Loader.
Loader имеет базу 0x400000. Файл калькулятора XP SP2 - 0x01000000.
Пытаюсь исправить ImageBase модуля с 0x400000 на 0x01000000 следующим образом:

mov eax, fs:[30h]
mov eax, [eax+0Ch]
mov eax, [eax+0Ch]
lea ecx, [eax+18h]
mov eax, dwNewBase
mov dword ptr [ecx], eax

Но GetModuleHandleA все равно возвращает старую базу и файл не запускается.
Я с PEB мало знаком, подскажите ошибку. Простые файлы без ресурсов\GUI запускаются нормально.



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 25 февраля 2008 18:39 · Поправил: HiEndsoft
· Личное сообщение · #12

Там в PEB в трех связанных структурах LdrModule хранится BaseAdress exe-модуля самых первых (перед ntdll).
GlOFF пишет:Я с PEB мало знаком а зря, инфы куча, может с нее начнешь?

-----
продавец резиновых утёнков




Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 25 февраля 2008 18:57 · Поправил: GlOFF
· Личное сообщение · #13

HiEndsoft пишет:
а зря, инфы куча, может с нее начнешь?

Подскажи как, с чего начать? По своему опыту, буду благодарен



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 25 февраля 2008 21:42
· Личное сообщение · #14

В архиве, а так начни хотя бы с прочтения Шрайбера.

8d50_25.02.2008_CRACKLAB.rU.tgz - PEB-TEB.txt

-----
продавец резиновых утёнков




Ранг: 66.8 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 25 февраля 2008 22:29 · Поправил: UsAr
· Личное сообщение · #15

GlOFF
GetModuleHandle(0) берет значение из PEB.ImageBaseAddress
могли бы и потрейсить её)




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 25 февраля 2008 22:40
· Личное сообщение · #16

угу

7C80B6E4 |> \64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
7C80B6EA |. 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30]
7C80B6ED |. 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8]
7C80B6F0 \.^ EB EE JMP SHORT kernel32.7C80B6E0


-----
[nice coder and reverser]




Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 26 февраля 2008 00:02
· Личное сообщение · #17

Действительно. Ушел за Шрайбером.
HiEndsoft Спс за структурки.


 eXeL@B —› Программирование —› PE loader
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати