首先寫出彙編成功彈出計算器
#pragma comment(linker,"/section:.data,RWE") //data段可讀寫
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //不顯示窗口
#pragma comment(linker,"/INCREMENTAL:NO") //指定非增量編譯
#include "windows.h"
void main()
{
__asm{
sub esp,0x454
xor ebx,ebx
push ebx
mov eax,0x6578652e
push eax
mov eax,0x636c6163
push eax
mov eax,esp
push 5
push eax
mov eax,0x74f0dab0
call eax
mov esp,0x450
}
}
下面這兩條語句時和call dword ptr [WinExec]
功能相同,可以利用這條語句找出自己機子上WinExec地址,然後將0x74f0dab0替換成自己機子上的地址
mov eax,0x74f0dab0
call eax
提取彙編的機器碼
unsigned char shellcode[]="\x81\xEC\x54\x04\x00\x00\x33\xDB\x53\xB8\x2E\x65\x78\x65\x50"
"\xB8\x63\x61\x6C\x63\x50\x8B\xC4\x6A\x05\x50"
"\xB8\xB0\xDA\xF0\x74\xFF\xD0"
"\xBC\x50\x04\x00\x00";
接下來就是如何執行shellcode了
0x01
將shellcode硬改成函數名,然後shellcode的內容相當於函數體
void Run1()
{
((void(*)(void))&shellcode)();
}
0x02
取shellcode的偏移地址,然後到shellcode處執行
//第2種方法
void Run2()
{
__asm{
lea eax,shellcode
jmp eax
}
}
0x03
和0x02方法相同,寫法不一樣
//第3種方法
void Run3()
{
__asm{
mov eax,offset shellcode
jmp eax
}
}
0x04
用emit在當前位置直接插入數據(實際上是指令),硬編碼執行
//第四種方法
void Run4()
{
__asm{
mov eax,offset shellcode
_emit 0xff;
_emit 0xe0;
}
}
調試
#pragma comment(linker,"/section:.data,RWE") //data段可讀寫
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //不顯示窗口
#pragma comment(linker,"/INCREMENTAL:NO") //指定非增量編譯
#include "windows.h"
unsigned char shellcode[]="\x81\xEC\x54\x04\x00\x00\x33\xDB\x53\xB8\x2E\x65\x78\x65\x50"
"\xB8\x63\x61\x6C\x63\x50\x8B\xC4\x6A\x05\x50"
"\xB8\xB0\xDA\xF0\x74\xFF\xD0"
"\xBC\x50\x04\x00\x00";
//第一種方法
void Run1()
{
((void(*)(void))&shellcode)();
}
//第2種方法
void Run2()
{
__asm{
lea eax,shellcode
jmp eax
}
}
//第3種方法
void Run3()
{
__asm{
mov eax,offset shellcode
jmp eax
}
}
//第四種方法
void Run4()
{
__asm{
mov eax,offset shellcode
_emit 0xff; //用emigt就是在當前位置直接插入數據(實際上是指令),硬編碼執行
_emit 0xe0;
}
}
void main()
{
/*
__asm{
sub esp,0x454
xor ebx,ebx
push ebx
mov eax,0x6578652e
push eax
mov eax,0x636c6163
push eax
mov eax,esp
push 5
push eax
mov eax,0x74f0dab0
call eax
mov esp,0x450
}
*/
Run1();
}
其他三種方法我都調試了都可以彈出計算器