| 关键词: nbsp 机器码 ShellCode 文件 45 代码 xC xF 字节 HEX |
最近又看ShellCode编写,书上有段开DOS窗口的ShellCode,我放到VC里调试的时候可以运行,但退出DOS的时候会弹出错误框。一般如果ShellCode的堆栈不平衡或者其它啥地方没弄好就会出现这种情况,想看看问题出在哪,但是ShellCode全是机器码,看起来可不是那么容易,所以想了个简单的办法把它换成汇编代码,看起来就方便多了。大体流程是:提取ShellCode中的机器码—->把机器码粘贴到WinHEX并保存成exe文件—->用C32Asm反汇编—->得到汇编码。下面是具体过程。ShellCode.cpp文件代码如下:#include<stdio.h>char strShellCode[]=“\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53″“\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6″“\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA”“\x9C\x3F\x88\x7C”“\x52\x8D\x45\xF4\x50\xFF\x55\xF0″“\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x64\x2E”“\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x45\xF4″“\x50\xB8″“\xC7\x93\xBF\x77″“\xFF\xD0″“\x83\xC4\x12\x5D”;int main(){ ((void(*)(void)) &strShellCode)(); return 0;}在命令行运行perl pick.pl ShellCode.cpp就会把ShellCode里面的机器码提取到HEX.TXT文本文件中。 1.我先写了个简单的Perl脚本,把里面的机器码提取出来,当然用其它语言或者手动提取也可以。代码如下(pick.pl):# -wwhile (<>) { while(/(x)(\w{2})/) { $code .=$2; s/$1$2//; }}open(HEX,”>HEX.TXT”) or die(”error:$!”);print HEX $code; 2.打开HEX.TXT,可以算出我这的机器码有222字节。然后复制所有机器码。打开WinHEX,点新建,文件大小这里填150字节,只要大于机器码字节数的一半就行了。然后点粘贴,选择剪贴板格式那选择“ASCII Hex”,确定就可以把机器码粘贴到WinHEX。再把它保存成EXE文件,比如ShellCode.exe3.用C32Asm打开刚才保存的exe文件,点右键–>到对应汇编模式编辑,就可以看到汇编代码了 现在机器码已经变成了汇编代码,就很容易看懂了。我们可以在C32Asm里面对ShellCode进行修改,修改完只要记住变化了的机器码,然后在ShellCode.cpp里面改对应的机器码就行了。 黑基论坛邀请码:ce989a265cSP28Ly |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|