能力值:
( LV2,RANK:10 )
|
-
-
2 楼
MOV ECX,DWORD PTR FS:[18] 把18转为双字节送到ECX去
AND BYTE PTR DS:[ECX+FB4],0 将ECX+FB4与0相与
CMP DWORD PTR SS:[ESP+4],DCBAABCD 这个当然就是比较拉
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
二楼的回答有问题啊 误人子弟了
MOV ECX,DWORD PTR FS:[18] 是把从fs:【18】 开始的 双字送入 EAX
AND BYTE PTR DS:[ECX+FB4],0 是 把从 ds:【ecx+FB4】开始的 字节 和 0 相与
CMP DWORD PTR SS:[ESP+4],DCBAABCD 是 栈堆中的从 ss:【esp+4】开始的双字 与DCBAABCD 结果置标志位。。。。
|
能力值:
( LV2,RANK:150 )
|
-
-
4 楼
把 TEB.SafeThunkCall 设为0
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
把 TEB.SafeThunkCall 设为0,但什么要和DCBAABCD 比较啊?? DCBAABCD这个值有什么用啊??我看过两个软件都有和这个值比较的语句。
|
能力值:
( LV12,RANK:300 )
|
-
-
6 楼
CMP DWORD PTR SS:[ESP+4],DCBAABCD
这一句代码跟前面两句是没有直接关系的。
关键看esp+4处保存的是什么,必须把这个函数从整体上看才知道,如果只看单独的这一句,只能像3楼那样解释了。
印象中这似乎类似一个安全cookie,用于对溢出的防御。
即函数开始时将这个数保存在堆栈的局部变量中,而在函数返回前重新查一下这个局部变量值是否与原来相同。如果函数执行过程中因为缓冲区溢出,返回地址被覆盖,则局部变量值必定先于返回地址被覆盖,而不会跟原来相同,通过返回前重新检测这个值就可以发现被溢出。
当然实际上是不是,还是必须看到整个函数的代码才能下结论。
注意,就像你不能把一个汉字拆成几个笔画,来单独理解一样,一个函数只有从整体上理解,你才会明白这些寄存器操作到底在干什么。
|
能力值:
( LV9,RANK:180 )
|
-
-
7 楼
[QUOTE=ilovewf;475624]
CMP DWORD PTR SS:[ESP+4],DCBAABCD
到底什么意思啊???????郁闷中[/QUOTE]
User32.dll 内层的东西.
一些如 DispatchMessage'CallWindowProc'SendMessage'DispatchMessage...
之类会转移控制权的API最后会呼叫到.
(原程序码我列在最下面)
77DF2E95 call [ebp+8] 可能会转移控制权到你的程式
靠着 DCBAABCD 标志, 至少可处理如下的被调用者:
1. ret 10h (四个参数)
2. ret 14h (五个参数)
3. ret (直接返回)
我只遇过正常的第1种. 2 '3 未遇过.
PS. 乱来的话, 似乎比找 jmp esp 容易多了.
77DF2E80 push ebp
77DF2E81 mov ebp,esp
77DF2E83 push DCBAABCD
77DF2E88 push esi
77DF2E89 push dword ptr [ebp+18]
77DF2E8C push dword ptr [ebp+14]
77DF2E8F push dword ptr [ebp+10]
77DF2E92 push dword ptr [ebp+C]
77DF2E95 call [ebp+8]
77DF2E98 cmp dword ptr [esp+4],DCBAABCD
77DF2EA0 jnz 77E2AE1E
77DF2EA6 add esp,8
77DF2EA9 pop ebp
77DF2EAA retn 14
77E2AE1E cmp dword ptr [esp],DCBAABCD
77E2AE25 jnz short 77E2AE2F
77E2AE27 sub esp,4
77E2AE2A jmp 77DF2EA6
77E2AE2F add esp,10
77E2AE32 jmp 77DF2EA6
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
看了大牛们的解释,还是不懂啊。看来汇编要好好学了。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
谢谢大家的回答,我似乎有点理解了
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
恩,我的解释有点肤浅了。。。。。。受教,受教
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
呵呵,我和楼主差不多,只能看懂汇编代码,但不知道是在干什么,比如takelie一看就知道是在设置xxxxx为0,我要多少功底才能一步看穿那???
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
学习,积极学习。!!!!!!!!!!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
学习一下,谢谢
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
越看就越不明了
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
今天也遇到了这种情况
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
真是学无止境啊!!!谢谢!!!
|
|
|