Shellcode的调试,比如,我在网上找到一段如下的代码:
char ShellCode[] = "\xEB"
"\x0F\x58\x80\x30\x95\x40\x81\x38\x68\x61\x63\x6B\x75\xF4\xEB\x05\xE8\xEC\xFF\xFF"
"\xFF\xF1\x34\xA5\x95\x95\x95\xAB\x53\xD5\x97\x95\x56\x68\x61\x63\x6B\xCD";
已经知道它是一段Shellcode,现在,把它提取出来,如:
"\xEB"
"\x0F\x58\x80\x30\x95\x40\x81\x38\x68\x61\x63\x6B\x75\xF4\xEB\x05\xE8\xEC\xFF\xFF"
"\xFF\xF1\x34\xA5\x95\x95\x95\xAB\x53\xD5\x97\x95\x56\x68\x61\x63\x6B\xCD"
现在,想要调试这段Shellcode代码。
1、常规方法:
用VC写一个C代码。步骤,如下:
使用VC++ 6.0,建立一个空工程,再添加一个*.cpp文件,复制如下代码到*.cpp文件:
#include <stdio.h>
#include <windows.h>
char ShellCode[] = "\xEB"
"\x0F\x58\x80\x30\x95\x40\x81\x38\x68\x61\x63\x6B\x75\xF4\xEB\x05\xE8\xEC\xFF\xFF"
"\xFF\xF1\x34\xA5\x95\x95\x95\xAB\x53\xD5\x97\x95\x56\x68\x61\x63\x6B\xCD";
int main()
{
printf("Shellcode length: %d\n", strlen(ShellCode));//shellcode长度
__asm
{
lea eax,ShellCode;
jmp eax; //跳到Shellcode开始处,从这里开始单步调试
}
return 0;
}
2、常规方法总结:
需要的工具:VC++ 6.0
优/缺点:此方法,基本上可以归为VC的优/缺点。主要是调试汇编代码不方便,要是没有VC呢?
3、问题的提出:
问题1、有没一种可以不用编译就可以调试的方法?
问题2、在使用OllyDbg调试的时候,能自动定位在Shellcode的第一行代码处?
问题3、还有很多问题,但怕被扁,可不可以再提问?
[注意]看雪招聘,专注安全领域的专业人才平台!