能力值:
( LV2,RANK:10 )
|
-
-
2 楼
传说中的沙发!!
没有看明白
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
不错啊 下载者
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
((void )((__stdcall *)xGetProc( "urlmon", "URLDownloadToFileA"))(int,char*,char*,int,int))这个函数哪位可以解释下,没太看明白你是咋下载的
|
能力值:
( LV12,RANK:300 )
|
-
-
5 楼
这实际上是利用了Export Forward。
xGetProc函数通过修改自身内存映像的pNtHead->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size为0x80000000,来欺骗GetProcAddress函数。
实际上是欺骗GetProcAddress最终调用的LdrpSnapThunk函数,使其认为找到的该导出符号地址刚好在IMAGE_EXPORT_DIRECTORY结构中(大于IMAGE_EXPORT_DIRECTORY结构指针,又小于IMAGE_EXPORT_DIRECTORY结构指针加上这个Size,后者是用一个无符号数比较来判断的,这里Size被改成了0x80000000使得后者永远满足),而这正是Export Forward的识别方法,则该函数认为它是一个Export Forward,这时即认为该位置是一个说明真正函数名称的字符串(即程序自己写进去的urlmon.URLDownloadToFileA或kernel32.WinExec),从而读取该字符串并找到相应的地址,因此通过这个方法可以获取这两个函数的地址。
LdrpSnapThunk函数中相应的细节如下,注意最后那个jnb:
.text:7C937C97
.text:7C937C9D mov eax, [esi+IMAGE_EXPORT_DIRECTORY.AddressOfFunctions]
.text:7C937CA0 add eax, [ebp+Base]
.text:7C937CA3 mov edi, [ebp+Base]
.text:7C937CA6 lea eax, [eax+ecx*4]
.text:7C937CA9 mov ecx, [eax]
.text:7C937CAB add ecx, edi ; 找到的函数偏移加基址得到函数地址
.text:7C937CAD cmp ecx, esi ; esi为IMAGE_EXPORT_DIRECTORY结构指针
.text:7C937CAF mov edi, [ebp+arg_C]
.text:7C937CB2 mov [edi], ecx
.text:7C937CB4 ja loc_7C937F7C ; 函数指针大于IMAGE_EXPORT_DIRECTORY结构指针则跳,这里一般都会满足
.text:7C937F7C loc_7C937F7C: ; CODE XREF: LdrpSnapThunk(x,x,x,x,x,x,x,x)+C3j
.text:7C937F7C mov edi, [ebp+Size]
.text:7C937F7F add esi, edi ; 把IMAGE_EXPORT_DIRECTORY结构指针再加上前面取到的Size,再进行比较,这里由于程序的修改,这个Size是0x80000000
.text:7C937F81 cmp ecx, esi
.text:7C937F83 jnb loc_7C937CBA ; 无符号数比较,不低于则跳转。
.text:7C937F83 ; 由于这里是无符号数比较,所以总有函数地址<0x80000000+IMAGE_EXPORT_DIRECTORY结构指针而没有跳走,就被认为是Export Forward了。
|
能力值:
( LV12,RANK:210 )
|
-
-
6 楼
不错
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
卡吧拦截DNS解析,有HIPS的味道,所以,此贴思路虽好,但是疗效不佳。对付启发有疗效而已。
|
能力值:
( LV15,RANK:340 )
|
-
-
8 楼
这个方法没见过,Mark一下
|
能力值:
(RANK:210 )
|
-
-
9 楼
[QUOTE=轩辕小聪;825852]这实际上是利用了Export Forward。
xGetProc函数通过修改自身内存映像的pNtHead->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size为0x80000000,来欺骗GetProcAddress函数。...[/QUOTE]
分析得相当深入透彻。
|
能力值:
(RANK:210 )
|
-
-
10 楼
这里面有三层意思:
1.调用xGetProc( "urlmon", "URLDownloadToFileA")获得指向URLDownloadToFileA函数的指针。
2.将该指针(因为xGetProc返回ULONG)转换类型,转换为指向URLDownloadToFileA函数的指针。
3.用这个指针调用URLDownloadToFileA函数。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
哦 多谢楼上的解答
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
有创意,分析得也透彻.佩服两位的功力.
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
Mark一下,这算不算挖坟
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
没有编译通过 怎么用的
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
额,学习着~~~~
|
能力值:
( LV5,RANK:70 )
|
-
-
16 楼
佩服了
|
能力值:
( LV6,RANK:80 )
|
-
-
17 楼
都写了是对付启发和查毒,你偏要来说主动防御。主动防御就一破烂货,还比不上病毒installer hash检查来得有效。
拦截dns解析,你直接写ip,不然的话写个local gfw,直接把它的dns给截了。
写病毒的大部人太弱智了,惯得写安全软件的也是脑袋生锈。。。
|
能力值:
(RANK:1060 )
|
-
-
18 楼
这篇应该给个精华啊
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
标记下,方便学习!
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
学习学习了。
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
LZ分析得相当的不错,可以做掉好多的杀软了
|
能力值:
( LV3,RANK:20 )
|
-
-
22 楼
占位 学习,留名。
轩辕解释的很到位。
习之,见贤思齐之。
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
支持楼主,支持小聪,支持forgot
下载者才是王道乐土
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
占位学习···
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
楼主这种方法过启发还是有点麻烦
|
|
|