能力值:
( LV7,RANK:100 )
|
-
-
2 楼
为啥是 + 0x08 和 + 0x20呢?
对照你的图片看也不符啊~(难道是我理解错了? )
貌似很多处偏移都错了
push ebp
xor ecx,ecx
mov esi,fs:0x30 ;PEB的地址
mov esi, [esi + 0x0C] ;Ldr的地址
mov esi, [esi + 0x10] ;获取InLoadOrderModuleList.Flink
next_module:
;add esi, 0x08;
mov ebp, [esi + 0x18] ;获取kernel32.dll地址
mov edi, [esi + 0x30] ;获取kernel32.dll名称地址
mov esi, [esi + 4];
cmp [edi + 12*2],cl ;判断是否为kernel32.dll(这句我没看明白,edi + 12*2是什么?)
jne next_module
mov edi,ebp ;BaseAddr of Kernel32.dll
pop ebp
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
cmp [edi + 12*2],cl ;判断是否为kernel32.dll(这句我没看明白,edi + 12*2是什么?)
这个地方我理解是edi是获取了kernel32.dll这个字符串的地址,然后[edi+12*2]测试这个串的末尾是否是空的,也就是长度是否是12字符,这里使用(unicode编码,2个字节表示1个字符)
对了楼上的
+0x18是地址这个我理解
但是+0x30是dll地址,这个我就不理解了,+0x24才对吧?fulldllname
|
能力值:
( LV7,RANK:100 )
|
-
-
4 楼
[QUOTE=lyletzzzw;1014571]cmp [edi + 12*2],cl ;判断是否为kernel32.dll(这句我没看明白,edi + 12*2是什么?)
这个地方我理解是edi是获取了kernel32.dll这个字符串的地址,然后[edi+12*2]测试这个串的末尾是否是空的,也就是长度是否是12字符,这里使用(unic...[/QUOTE]
FullDllName(+0x24)是完整路径,BaseDllName(+0x2C)才是模块名
BaseDllName实际上是一个UNICODE_STRING结构
typedef struct _UNICODE_STRING // 3 elements, 0x8 bytes (sizeof)
{
/*0x000*/ UINT16 Length;
/*0x002*/ UINT16 MaximumLength;
/*0x004*/ UINT16* Buffer;
}UNICODE_STRING, *PUNICODE_STRING;
所以BaseDllName.Buffer == 0x2C + 0x4 == 0x30
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
哦,baseDllName还有一层结构的,所以才这样的,3Q
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我来说下我的理解吧:
push ebp
xor ecx,ecx
mov esi,fs:0x30 ;PEB的地址
mov esi, [esi + 0x0C] ;Ldr的地址
mov esi, [esi + 0x10] ;获取InLoadOrderModuleList.Flink
next_module:
;add esi, 0x08;
mov ebp, [esi + 0x08] ;获取kernel32.dll地址
mov edi, [esi + 0x20] ;获取kernel32.dll名称地址
mov esi, [esi + 4];
cmp [edi + 12*2],cl ;判断是否为kernel32.dll(这句我没看明白,edi + 12*2是什么?)
jne next_module
mov edi,ebp ;BaseAddr of Kernel32.dll
pop ebp
mov esi, [esi + 0x10] 这句应该是直接指向了_LDR_MOUDLE这个结构的InLoadOrderModuleList
然后+0x8获取了baseAddress
接着使用mov edi, [esi + 0x20]这句,+0x20就是获取dll字符串的地址了,
12*2就获取了字符串的长度,是否和kernel32.dll的是否一样长
对了,还问一下,像这样定义的结构在,可以在哪里获取到这些结构的定义了???
如果可以的话,是否可以交换下
先吃个饭,等会聊
3Q
|
能力值:
( LV7,RANK:100 )
|
-
-
7 楼
[QUOTE=lyletzzzw;1014576]我来说下我的理解吧:
push ebp
xor ecx,ecx
mov esi,fs:0x30 ;PEB的地址
mov esi, [esi + 0x0C] ;Ldr的地址
mov esi, [esi + 0x10] ...[/QUOTE]
http://msdn.moonsols.com/msdn
这里有很多常用的
其它一些少见的可以查阅WRK(kernel only)、ReactOS(complete)、NT4Source/WIN2KSource(complete)、符号文件(not complete,windbg)
|
|
|