WEB开发网
开发学院网络安全黑客技术 破坏力依然不可小视 缓冲区溢出攻防 阅读

破坏力依然不可小视 缓冲区溢出攻防

 2006-11-07 20:09:59 来源:WEB开发网   
核心提示: STUBSTUBCODE对应的就是本文开头提到的11条汇编语句,参照stub的整体结构,破坏力依然不可小视 缓冲区溢出攻防(7),我们不难写出它的具体实现,xor ecx, ecx mov cx, wXorSize; wXorSize是要进行异或处理的数据的大小 lea esi, [esp

STUBSTUBCODE对应的就是本文开头提到的11条汇编语句。参照stub的整体结构,我们不难写出它的具体实现。

xor ecx, ecx    

mov cx, wXorSize; wXorSize是要进行异或处理的数据的大小    

lea esi, [esp+ byXorOffset]; byXorOffset是需要进行异或处理的代码的起始位置    

push esi

xormask: mov al, [esi]    

xor al, byXorMask; 使用byXorMask进行异或    

mov [esi], al    

inc esi    

loop xormask    

lea eax, [esp + byEntryOffset];

byEntryOffset 是StubCode的入口地址    

call eax

其中的几个变量实际上要用常数替代,wXorSize是要进行异或处理的数据的大小,也就是stubparam和stubcode的大小的和;byXorOffset是这些数据的起始位置相对于esp寄存器的偏移,从结构图中可以看出它等于“sizeof(STUBSTUBCODE)”,同时,它加上esp后就是STUBPARAM的地址,我们要把这个地址传给stubcode,所以立即把它压进了栈中,具体请见下面的相关内容;byXorMask是异或掩码,也就是前面提到的数字n;byEntryOffset是stubcode的入口相对于esp寄存器的偏移,它等于“sizeof(STUBSTUBCODE)+ sizeof(STUBPARAM)+4”,多加一个4是因为前面又向栈里压了一个数。这段代码的前两句没用更直接的“mov ecx, wXorSize”则是为了避免出现0字符。

把代码和结构体对比一下,看明白了吧!结构体中的几个数组对应的是汇编代码中固定不变的部分,变量则是需要经常修改的部分。这种定义让我们有机会动态修改stubstubcode,减少手工的代码维护工作。

STUBPARAM定义的是要传递给stubcode的参数,它比较简单,相信你看完后面对stubcode的介绍,就能明白各成员的含义和作用了。其中所有以“Fx”为前缀的数据类型都是其相应函数的指针类型,后文还会遇到。

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:破坏力 依然 不可

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接