首页
社区
课程
招聘
[Anti Virus专题]1.2 - 2.kernel32基地址获得
2009-4-10 15:09 67600

[Anti Virus专题]1.2 - 2.kernel32基地址获得

2009-4-10 15:09
67600
收藏
点赞7
打赏
分享
最新回复 (86)
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hackerlx 2009-5-26 14:59
51
0
MZ和内存中是相反的
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hackerlx 2009-5-26 15:02
52
0
cmp  word ptr [eax+edx], 4550h;
比如说这里
如果用cmp word ptr [eax+edx],"PE"
"PE"是被编译成5045.-
雪    币: 104
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
刘国华 2009-5-26 15:07
53
0
我用FASM编译的就可以,xfish用的应该是FASM
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hackerlx 2009-5-26 20:54
54
0
哦,原来是编译器的原因啊,,,,

了解-
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zcjzch 2009-5-31 23:25
55
0
真诚的谢谢楼主细心的工作,你的文章让我加深了理解!
雪    币: 16
活跃值: (325)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ZSYL 2009-6-17 20:45
56
0
这个系列不错..学习了
雪    币: 500
活跃值: (195)
能力值: ( LV13,RANK:270 )
在线值:
发帖
回帖
粉丝
冰雪风谷 6 2009-7-20 22:47
57
0
第三个最后一个mov eax,[eax+8]有些不太明白
,通过mov eax,[eax],此时eax应该是指向的_LDR_MODULE这个结构吧.
而我们要得到的关于这个结构的BaseAddress的值,而这个值在这个结构的0x18的地方,
所以,应该通过mov eax,[eax+18h]这样来得到吧,
而作者加的是8,最后还注释是那个结构的大小,
所以就迷糊了....
求解释....
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ratf 2009-7-20 23:33
58
0
同楼上的疑问,望高手解答
雪    币: 500
活跃值: (195)
能力值: ( LV13,RANK:270 )
在线值:
发帖
回帖
粉丝
冰雪风谷 6 2009-7-21 15:00
59
0
[QUOTE=冰雪风谷;658678]第三个最后一个mov eax,[eax+8]有些不太明白
,通过mov eax,[eax],此时eax应该是指向的_LDR_MODULE这个结构吧.
而我们要得到的关于这个结构的BaseAddress的值,而这个值在这个结构的0x18的地方,
所以,应该通过mov eax,[eax+18h]这...[/QUOTE]

写了段代码,自己跟了下,总算明白了。

		.386
		.model flat,stdcall
		option casemap:none
include		windows.inc
include		kernel32.inc
includelib	kernel32.lib
include		user32.inc
includelib	user32.lib

		.data
Caption db	'地址',0
Buffer	db	'地址是%08x',0
Buffer1 db 	256 dup (0)
		.code

start:
	assume fs:nothing	
	mov 	eax,fs:[30h]
	mov 	eax,[eax+0ch]
	mov 	eax,[eax+1ch]
	;mov 	eax,[eax]
	mov 	eax,[eax+8h]
	
	invoke	wsprintf,offset Buffer1,offset Buffer,eax
	invoke 	MessageBox,NULL,addr Buffer1,offset Caption,MB_OK
	invoke 	ExitProcess,NULL
	end 	start
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ratf 2009-7-21 22:48
60
0
本人愚昧,还是没看懂为什么是+8而不是+18
雪    币: 138
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
childz 2009-8-4 10:40
61
0
顶,好文章啊,呵呵,病毒入门
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pcqq 2009-8-24 18:03
62
0
lkd> dt _TEB
nt!_TEB
+0x000 NtTib : _NT_TIB
+0x01c EnvironmentPointer : Ptr32 Void
+0x020 ClientId : _CLIENT_ID
+0x028 ActiveRpcHandle : Ptr32 Void
+0x02c ThreadLocalStoragePointer : Ptr32 Void
+0x030 ProcessEnvironmentBlock : Ptr32 _PEB ;;;;;;;;;;

......省略


我们可以看到TEB结构的0x30偏移处存储的我们的PEB结构的地址。。

然后接下来我们来看PEB结构。

lkd> dt _PEB
nt!_PEB
+0x000 InheritedAddressSpace : UChar
+0x001 ReadImageFileExecOptions : UChar
+0x002 BeingDebugged : UChar
+0x003 SpareBool : UChar
+0x004 Mutant : Ptr32 Void
+0x008 ImageBaseAddress : Ptr32 Void
+0x00c Ldr : Ptr32 _PEB_LDR_DATA
..........省略

我们可以看到PEB结构的0x0c偏移处存储的我们的_PEB_LDR_DATA结构地址。

好到这里我们可以先把获得_PEB_LDR_DATA结构地址的代码写出来。

mov eax, [fs:30h] ;Get Peb
mov eax, [eax+0ch] ;Get _PEB_LDR_DATA


想請問一下這部份
前輩如何知道他是使用fs
而不是其他的呢?
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
instruder 4 2009-10-20 13:43
63
0
微软定义就是FS

微软定义就是FS

   mov eax, [eax+1ch];Get InInitializationOrderModuleList.Flink, 此时eax指向的是ntdll模块的InInitializationOrderModuleList线性地址。所以我们获得它的下一个则是kernel32.dll
    mov eax, [eax]
    mov eax, [eax+8] ; 8 = sizeof.LIST_ENTRY
    ret

+8不是刚好是基址吗
8 = sizeof.LIST_ENTRY写的很清楚了
mov eax, [eax+1ch]; 此时eax指向的是ntdll模块的InInitializationOrderModuleList线性地址
而不是LIST_ENTRY        InLoadOrderModuleList;            // +0x00
加18H就跑到下面去了
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
netsfly 2009-12-25 14:15
64
0
写的真是太好了
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
netsfly 2009-12-25 14:40
65
0
”分析过kernel32.dll的朋友应该都知道kernel32.dll的块对齐值是00001000h, 并且一般DLL以1M为边界,所以我们可以通过10000h (64k) 作为跨度,“
为什么64K,正好两个字节吗
雪    币: 38
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whxright 2010-1-13 15:21
66
0
下面这两个结构中标红色的成员是公用的其实就是一个东西,要不一个只有两个指针没别的成员的双链表如何存储数据啊,明白这个就明白为啥是+8了。我也刚懂
nt!_PEB_LDR_DATA
   +0x000 Length           : Uint4B
   +0x004 Initialized      : UChar
   +0x008 SsHandle         : Ptr32 Void
   +0x00c InLoadOrderModuleList : _LIST_ENTRY
   +0x014 InMemoryOrderModuleList : _LIST_ENTRY
   +0x01c InInitializationOrderModuleList : _LIST_ENTRY

   +0x024 EntryInProgress  : Ptr32 Void
typedef struct _LDR_MODULE
{
    LIST_ENTRY        InLoadOrderModuleList;            // +0x00
    LIST_ENTRY        InMemoryOrderModuleList;          // +0x08
    LIST_ENTRY        InInitializationOrderModuleList;  // +0x10

    PVOID             BaseAddress;                      // +0x18
    PVOID             EntryPoint;                       // +0x1c
    ULONG             SizeOfImage;                      // +0x20
    UNICODE_STRING    FullDllName;                      // +0x24
    UNICODE_STRING    BaseDllName;                      // +0x2c
    ULONG             Flags;                            // +0x34
    SHORT             LoadCount;                        // +0x38
    SHORT             TlsIndex;                         // +0x3a
    LIST_ENTRY        HashTableEntry;                   // +0x3c
    ULONG             TimeDateStamp;                    // +0x44
                                                        // +0x48
} LDR_MODULE, *PLDR_MODULE;
雪    币: 101
活跃值: (88)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
nkspark 3 2010-1-13 16:56
67
0
以讹传讹的恶果啊。

错误的数据结构大家如果不晕才怪了呢。不知道这个可不可以算作小鱼抄袭的一个证据?
雪    币: 38
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whxright 2010-1-13 20:35
68
0
其实我想说,不管文章来自哪楼主肯分享我就应该感恩..
我见过的第一个成系列的讲病毒的帖子而且收获很多。
雪    币: 2321
活跃值: (4018)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
熊猫正正 9 2010-8-26 22:34
69
0
很好,正在学这方面的知识,谢谢了!!
雪    币: 189
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
adomore 2010-9-1 23:15
70
0
感谢xfish的付出,鄙人收益匪浅!
雪    币: 227
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
冷酷果冻 2010-9-2 17:42
71
0
这些代码我用了这么久,今天才知道原来是这么回事.
真是醍醐灌顶.
你们怎么知道fs:[0]和fs:[30]是怎么回事的呀?
雪    币: 354
活跃值: (147)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
haithink 1 2010-9-21 20:51
72
0
很显然,除了查资料还能怎么着啊?呵呵。
雪    币: 806
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
zyr零零发 1 2010-9-22 19:49
73
0
不错的文章。
雪    币: 362
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lapcca 2010-9-22 23:28
74
0
感谢楼主,学习了!
雪    币: 133
活跃值: (546)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
njxxdx 2010-10-11 17:12
75
0
留名!以后看看
游客
登录 | 注册 方可回帖
返回