后门编程技术初步
如你所知,现在的TELNET扩展后门太多了,如号称3W的 WinEggDrop、Wolf、WinShell等等。本人热衷于编程,对后门编程技术早就虎视眈眈,于是狂用Google搜索各类后门的源代码,结果收获还真不少!花了几天时间,反复阅读学习这些后门源代码后,豁然发现,原来实现过程这么简单!抱头痛哭为什么自己不早点写出个“如此简单”的后门,否则现在流芳后门界的就是偶啦,呵呵。Kb-LD0_ U痛定思痛,现在偶就把有关编写后门程序的几个简单却又关键的编程技术总结一下,以飨广大初学后门编程的读者。希望大家也可以尽早写出属于自己的后门来。
废话少说,盘点开始了!我们以下实现都是在(WinXp+SP1)+(VC6.0+SP6)下编译通过。
技术实现第一步:获得操作系统版本
呵呵,这个好像没什么技术含量。但是,你要知道,获得操作系统版本信息是多么的重要。基本上所有的木马和后门,都离不开操作系统版本的判断。因为Windows 2000/XP和Windows 9X有太大的区别了,这个大家都清楚。即使在Windows 2000和Windows XP下,有时也要区别对待。比如有时进行IPC连接,两者对IPC匿名共享的默认权限是不一样的。甚至同一版本的不同SP包,有时也有很大区别,这在写缓冲区溢出Exploits的时候尤为明显。那么,如何得到一个操作系统的版本信息呢?其实很简单,一个结构,一个函数就可以搞定。
示例代码如下:)t9q|EW
OSVERSIONINFO osvi; "`RY5u`C4W
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
if (osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)`C6J"D/l1H!}2^2JY%Q
printf("Win9x\n");Xj8F9G0K4B&_
if (osvi.dwPlatformId==VER_PLATFORM_WIN32_NT) !i;@ Ifn7JEi @
printf("WinNt\n");
可以看到,OSVERSIONINFO结构体里存放着Windows操作系统版本信息,需要注意的是,在调用GetVersionEx之前,必须对osvi.dwOSVersionInfoSize做初始化工作。我们在Win32编程中常常会有类似的结构,都包括了一个结构大小的成员,在调用API之前必须对该成员进行初始化工作,在我们后面要讲到STARTUPINFO结构也同样如此。很多人不了解为什么,其实初始化的作用主要是为了版本控制,以防Microsoft在将来的Win32中扩充该结构。这里,我们只是简单判断了操作系统是Windows 9X还是Windows NT,如果你想得到更详细的信息,比如是Windows 2000还是Windows XP或Windows 2003,可以通过比较OSVERSIONINFO结构的dwMajorVersion和dwMinorVersion成员来得到。如: