能力值:
( LV2,RANK:10 )
|
-
-
51 楼
MZ和内存中是相反的
|
能力值:
( LV2,RANK:10 )
|
-
-
52 楼
cmp word ptr [eax+edx], 4550h;
比如说这里
如果用cmp word ptr [eax+edx],"PE"
"PE"是被编译成5045.-
|
能力值:
( LV2,RANK:10 )
|
-
-
53 楼
我用FASM编译的就可以,xfish用的应该是FASM
|
能力值:
( LV2,RANK:10 )
|
-
-
54 楼
哦,原来是编译器的原因啊,,,,
了解-
|
能力值:
( LV2,RANK:10 )
|
-
-
55 楼
真诚的谢谢楼主细心的工作,你的文章让我加深了理解!
|
能力值:
( LV2,RANK:10 )
|
-
-
56 楼
这个系列不错..学习了
|
能力值:
( LV13,RANK:270 )
|
-
-
57 楼
第三个最后一个mov eax,[eax+8]有些不太明白
,通过mov eax,[eax],此时eax应该是指向的_LDR_MODULE这个结构吧.
而我们要得到的关于这个结构的BaseAddress的值,而这个值在这个结构的0x18的地方,
所以,应该通过mov eax,[eax+18h]这样来得到吧,
而作者加的是8,最后还注释是那个结构的大小,
所以就迷糊了....
求解释....
|
能力值:
( LV2,RANK:10 )
|
-
-
58 楼
同楼上的疑问,望高手解答
|
能力值:
( LV13,RANK:270 )
|
-
-
59 楼
[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
|
能力值:
( LV2,RANK:10 )
|
-
-
60 楼
本人愚昧,还是没看懂为什么是+8而不是+18
|
能力值:
( LV2,RANK:10 )
|
-
-
61 楼
顶,好文章啊,呵呵,病毒入门
|
能力值:
( LV2,RANK:10 )
|
-
-
62 楼
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
而不是其他的呢?
|
能力值:
( LV13,RANK:220 )
|
-
-
63 楼
微软定义就是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就跑到下面去了
|
能力值:
( LV2,RANK:10 )
|
-
-
64 楼
写的真是太好了
|
能力值:
( LV2,RANK:10 )
|
-
-
65 楼
”分析过kernel32.dll的朋友应该都知道kernel32.dll的块对齐值是00001000h, 并且一般DLL以1M为边界,所以我们可以通过10000h (64k) 作为跨度,“
为什么64K,正好两个字节吗
|
能力值:
( LV2,RANK:10 )
|
-
-
66 楼
下面这两个结构中标红色的成员是公用的其实就是一个东西,要不一个只有两个指针没别的成员的双链表如何存储数据啊,明白这个就明白为啥是+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;
|
能力值:
( LV2,RANK:140 )
|
-
-
67 楼
以讹传讹的恶果啊。
错误的数据结构大家如果不晕才怪了呢。不知道这个可不可以算作小鱼抄袭的一个证据?
|
能力值:
( LV2,RANK:10 )
|
-
-
68 楼
其实我想说,不管文章来自哪楼主肯分享我就应该感恩..
我见过的第一个成系列的讲病毒的帖子而且收获很多。
|
能力值:
( LV12,RANK:530 )
|
-
-
69 楼
很好,正在学这方面的知识,谢谢了!!
|
能力值:
( LV2,RANK:10 )
|
-
-
70 楼
感谢xfish的付出,鄙人收益匪浅!
|
能力值:
( LV3,RANK:20 )
|
-
-
71 楼
这些代码我用了这么久,今天才知道原来是这么回事.
真是醍醐灌顶.
你们怎么知道fs:[0]和fs:[30]是怎么回事的呀?
|
能力值:
( LV7,RANK:100 )
|
-
-
72 楼
很显然,除了查资料还能怎么着啊?呵呵。
|
能力值:
( LV5,RANK:60 )
|
-
-
73 楼
不错的文章。
|
能力值:
( LV2,RANK:10 )
|
-
-
74 楼
感谢楼主,学习了!
|
能力值:
( LV4,RANK:40 )
|
-
-
75 楼
留名!以后看看
|
|
|