大家好,今天小编来为大家解答以下的问题,关于01 shellcode基础这个很多人还不知道,现在让我们一起来看看吧!
shellcode为16进制的机器码,下面我们通过一段打开计算器Calc.exe的简单的代码来进一步了解一下什么是shellcode。文章源自微观生活(93wg.com)微观生活-https://93wg.com/38622.html
34;stdafx.h& include int main(int argc, char* argv[]) { WinExec(& 34;,1); return 0; }文章源自微观生活(93wg.com)微观生活-https://93wg.com/38622.html
一句特别简单的代码,调用Windows API WinExec 打开计算器,接着我们在OD动态调试看看。文章源自微观生活(93wg.com)微观生活-https://93wg.com/38622.html
push 0x1 ;在x86下,通过压栈来传参,将1压栈,WinExec(& 34;,1)里的参数1 push OpenCalc.00406030 ;将寄存calc字符串的地址压栈,也是传参 call dword ptr ds:[<&KERNEL32.WinExec>] ;调用KERNEL32下的WinExec文章源自微观生活(93wg.com)微观生活-https://93wg.com/38622.html
引出问题文章源自微观生活(93wg.com)微观生活-https://93wg.com/38622.html
我们将这三句话下划线标注部分的机器码,用C语言的方式表达就是& 34;,也就是我常见的shellcode字符串。如果我们把这串加载在内存,能不能成功运行起来,恐怕是不行的,由于我们不能保证每个程序的0x406030地址上都寄存了calc字符串,也不能保证导入表中0x405000就是WinExec地址。文章源自微观生活(93wg.com)微观生活-https://93wg.com/38622.html
关于“01 shellcode基础”的内容,小编就分享到这里了,大家还有哪些需要补充的呢?无妨在评论区留言分享,让更多的朋友受益!您的每一个留言,和每一个赞,都是我前进的动力!喜欢的话记得收藏、分享给身旁的朋友。文章源自微观生活(93wg.com)微观生活-https://93wg.com/38622.html 文章源自微观生活(93wg.com)微观生活-https://93wg.com/38622.html
评论