首页
社区
课程
招聘
[求助]<0Day>两个问题
2008-5-4 10:50 8590

[求助]<0Day>两个问题

2008-5-4 10:50
8590
1. P97  5.4.1定位API的原理
ExitProcess写成了ProcessExit了吧

2.P103 定位Kernel32.dll的代码:
mov ebx, fs:[edx+0x30]
mov ecx, [ebx+0x0c]
mov ecx, [ecx+0x1c]   ;此时ecx应该是IninitializationOrderModuleList,它应该指向ntdll.dll吧
mov ecx, [ecx]            ;[COLOR="Red"]ecx = second entry in list (kernel32.dll)[/COLOR]
mov ebp, [ecx+0x08]


为什么红色的那行代码,是指向了kernel32.dll,应该是ntdll.dll呀???

3Q

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (17)
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
救世猪 1 2008-5-7 10:21
3
0
哦,谢谢
又看了半天,终于明白了,原来对着呢
我看了一下_LDR_MODULE结构
终于明白了~
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
救世猪 1 2008-5-7 10:46
4
0
现在又有一些其他的问题了
1. P120页
   妙用内存-另类的API调用方式
下面一段是:

[QUOTE=failwest;450347]
我们经常会遇到API中需要一个很大的结构体做参数的情况。通过实验可以发现,大多数情况下,健壮的API都可以允许两个结构体相互重叠,尤其是当一个参数是输入结构体[in],另一个用作接收的结构全[out]时,如果让参数指向同一个结构体,函数往往也能正确执行。
这种情况下,仅仅用一个字节的短指令"push esp"就可以代替一大段初始化[out]结构体的代码。
[/QUOTE]

这段红色的文字是什么意思,看了N久也没明白为什么……

2. P147页
   堆缓存,是个什么东东???
能详解一下吗??

3. P167-168页
想不明白,为什么将h5的的flink写成0x00000000,blink写成0x44444444,在这块堆被分配的时候,就会将0x44444444写入0x00000000的地址处???
现在实在想不明白DWORD SHOOT的原理……

3Q
雪    币: 151
活跃值: (24)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
jesterjy 1 2008-5-9 17:25
5
0
[QUOTE=救世猪;449197]1. P97  5.4.1定位API的原理
ExitProcess写成了ProcessExit了吧

2.P103 定位Kernel32.dll的代码:

mov ebx, fs:[edx+0x30]
mov ecx, [ebx+0x0c]
mov ecx, [ecx+0x1c]   ...[/QUOTE]

这个我还是不懂啊,能给我讲讲吗?
谢谢~!~!
雪    币: 151
活跃值: (24)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
jesterjy 1 2008-5-9 18:01
6
0
我跟踪了几次了解了。
也明白了。谢谢~!~!
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
救世猪 1 2008-5-9 23:13
7
0
今天晚上又看了一下
第三个问题搞明白了…………
原来如此如此……
把Node->blink->flink=Node->flink又仔细的想了一下终于明白了……
雪    币: 151
活跃值: (24)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
jesterjy 1 2008-5-10 11:36
8
0
把你弄懂的拿出来分享一下吧。谢谢
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
救世猪 1 2008-5-11 10:58
9
0
呵呵,是不是再抄一篇书?
雪    币: 151
活跃值: (24)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
jesterjy 1 2008-5-11 16:32
10
0
当然不是,就是把你理解这个代码的过程说说啊.具体的原理.
我没有从原理上理解,只是跟踪了一下,知道代码没问题啊.
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
救世猪 1 2008-5-11 23:39
11
0
删除节点的操作是:
Node->blink->flink=Node->flink
Node->flink->blink=Node->blink

而Node->blink已经被设置为0了
所以,Node->blink-flink实际上是执行的[Node->blink]=Node->flink=44444444
所以实际上就是[00000000]=44444444
而Node->flink->blink同理就是[Node->flink+4]=Node->blink
雪    币: 151
活跃值: (24)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
jesterjy 1 2008-5-13 21:33
12
0
不是这个,我还没看到这里.
我才看到你说的第一个问题那里.
请你说说你对第一个问题的原理的解释.
谢谢
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
救世猪 1 2008-5-13 22:01
13
0
第一个我也不懂…………
到现在也没明白~~~
雪    币: 151
活跃值: (24)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
jesterjy 1 2008-5-13 23:52
14
0
mov ebx, fs:[edx+0x30]
mov ecx, [ebx+0x0c]
mov ecx, [ecx+0x1c]   ;此时ecx应该是IninitializationOrderModuleList,它应该指向ntdll.dll吧
mov ecx, [ecx]            ;ecx = second entry in list (kernel32.dll)
mov ebp, [ecx+0x08]

我说的这段代码的解释啊.
这段代码我懂了,但是_LDR_MODULE结构之类的就不明白了.
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
救世猪 1 2008-5-14 00:01
15
0
PEB_LDR_DATA结构如下:
typedef struct _PEB_LDR_DATA 
{ 
 ULONG Length; // +0x00 
 BOOLEAN Initialized; // +0x04 
 PVOID SsHandle; // +0x08 
 LIST_ENTRY InLoadOrderModuleList; // +0x0c 
 LIST_ENTRY InMemoryOrderModuleList; // +0x14 
 LIST_ENTRY InInitializationOrderModuleList;// +0x1c 
} PEB_LDR_DATA,*PPEB_LDR_DATA; // +0x24


_LDR_MODULE的结构是这样的:
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; 


mov ecx, [ecx+0x1c]   ;此时ecx应该是IninitializationOrderModuleList,它现在在ntdll.dll的LDR_MODULE中
mov ecx, [ecx]            ;此时就到了kernel32.dll的LDR_MODULE中了
mov ebp, [ecx+0x08]

你仔细看一下这两个结构应该就会明白的
雪    币: 151
活跃值: (24)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
jesterjy 1 2008-5-14 00:07
16
0
我自己跟踪的时候我已经理解这段代码了.
就是想要一些关于这些结构的定义,很更详细的说明而已了.哈哈~!
谢谢你,好兄弟.
雪    币: 151
活跃值: (24)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
jesterjy 1 2008-5-14 00:07
17
0
顺便问下,这些结构在哪个头文件中定义的?
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
救世猪 1 2008-5-17 01:48
18
0
在网上搜的,呵呵~
雪    币: 371
活跃值: (13)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
franklinwu 2008-5-26 16:35
19
0

这幅图可以说明
游客
登录 | 注册 方可回帖
返回