· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› Image Base kernel32 через анализ SEH.

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Авг 10, 2004 10:19:01 · Поправил: Black_mirror

S_T_A_S_
Да ... меньше наверно не сделать ...

Тогда наверно стоит усложнить задачу: процедура может использовать только eax,ecx и edx 8) хотя проще сохранить esi в стеке ...


Дата: Авг 10, 2004 10:53:33 · Поправил: bogrus

А так ?
00401000  58            POP EAX
00401001  48            DEC EAX
00401002  66:31C0       XOR AX,AX
00401005  66:8138 4D5A  CMP WORD PTR DS:[EAX],5A4D
0040100A  75 F5         JNZ SHORT ret.00401001


Дата: Авг 10, 2004 11:07:29

bogrus

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


Black_mirror > „процедура может использовать только eax,ecx и edx“

Тогда ещё +2 байта (24).
Используется только eax:

00401A00      33C0          xor     eax, eax
00401A02      64:8B00       mov     eax, [dword fs:eax]
00401A05      8338 FF       cmp     [dword ds:eax], -1
00401A08      8B40 04       mov     eax, [dword ds:eax+4]
00401A0B    ^ 75 F8         jnz     short 00401A05
00401A0D      48            dec     eax
00401A0E      66:33C0       xor     ax, ax
00401A11      66:8138 4D5A  cmp     [word ds:eax], 5A4D
00401A16    ^ 75 F5         jnz     short 00401A0D
ЗЫ
Если я нигде не ошибся %)


Дата: Авг 10, 2004 11:14:20 · Поправил: Flasher

А как Вам вот такой:
 
       mov eax,[esp]
       and eax,0FFFF1000h
       _k:mov edx,[eax+3Ch-1000h]
       sub eax,1000h
       cmp edx,800h
       jae _k
       cmp eax,[eax+edx+34h]
       jnz _k


p.s. Ещё-бы Вы так аптимизированно GetProcAddress нашли :)


Дата: Авг 10, 2004 11:33:57

EDX экономит ещё байт

00401A00      33C0          xor     eax, eax
00401A02      64:8B00       mov     eax, [dword fs:eax]
00401A05      94            xchg    eax, esp
00401A06      5A            pop     edx
00401A07      42            inc     edx
00401A08    ^ 75 FC         jnz     short 00401A06
00401A0A      5C            pop     esp
00401A0B      94            xchg    eax, esp
00401A0C      48            dec     eax
00401A0D      66:33C0       xor     ax, ax
00401A10      66:8138 4D5A  cmp     [word ds:eax], 5A4D
00401A15    ^ 75 F5         jnz     short 00401A0C


Дата: Авг 10, 2004 11:38:54 · Поправил: S_T_A_S_

Flasher

Где SEH?
Вариант bogrus явно короче..


Дата: Авг 10, 2004 11:56:10

Опять 22 байта.
Надеюсь, это окончательный вариант.

00401A00      94            xchg    eax, esp
00401A01      99            cdq
00401A02      64:8B22       mov     esp, [dword fs:edx]
00401A05      5A            pop     edx
00401A06      42            inc     edx
00401A07    ^ 75 FC         jnz     short 00401A05
00401A09      5C            pop     esp
00401A0A      94            xchg    eax, esp
00401A0B      48            dec     eax
00401A0C      66:33C0       xor     ax, ax
00401A0F      66:8138 4D5A  cmp     [word ds:eax], 5A4D
00401A14    ^ 75 F5         jnz     short 00401A0B


Дата: Авг 10, 2004 12:04:07

„Ну у тебя предпологается, что адрес на стеке лежит, а вдруг его там нет? “

На Module.Entrypoint он там есть . Вот примерно как получает управление наш код :
793A87F2  FF55 08       CALL DWORD PTR SS:[EBP+8]
793A87F5  50            PUSH EAX
793A87F6  E8 40D7FFFF   CALL kernel32.ExitThread

Т.е. после старта в стеке лежит выход по ExitThread , на тот случай если нам захочеться выйти по ret .
Я смотрел и на w95,NT4.0,w2k .


Дата: Авг 10, 2004 13:01:22

S_T_A_S_
Зло!!!


Дата: Авг 10, 2004 15:22:54

bogrus > „На Module.Entrypoint он там есть“

Ну, если этот код расчитан на "нормальный запуск", тогда конечно.
Хотя imho в таком случае лучше импортировать GetProcAddress, и считать адрес kernel от него.
Это несколько больше на первый взгляд, но в этом случае не нужно будет искать сам GetProcAddress, что займёт не пару байт.
Всёравно w2k не запускает EXE без импорта.

Судя по названию раздела здесь нужен код для другого случая, т.е. нет гарантии, что на стеке есть что-то правильное.
Поэтому приходится искать через FS:0


Дата: Авг 10, 2004 17:13:06

Dr. Golova на реверсинге говорил давно, что FS:0 не всегда может указывать в kernel32.
в случае dll он вроде указывает в ntdll.
кто нить проверял эту информацию?

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066