木马中如何编程实现远程关机

                     木马中如何编程实现远程关机



   (四川师范大学电子工程学院信息安全专业 作者:安美洪) 

        此文章已经发表在<<黑客防线>> 2005年第一期

 

远程控制中,有一个重要的部份就是如何实现远程关机,如在各种黑客入侵中,我们到处可以见到木马的身影,木马它作为一种远程控制软件,它一般是实现了远程关机功能的。如我国大名鼎鼎的木马“冰河”等,都是有这个功能的,只是它是各种功能的集合罢了,今天我们就来看看这个重要的关机部分是如何编程实现的,在这里我就用眼下流行的VC6.0来编写,同时用VC也大大减少了我们的一些设计工作,让我们的菜鸟也来动手写一下自己的入侵工具。

在木马中,我们是采用的让客户端Socket给服务端的Socket发送相关的指令,同时当服务端收到相应的指令后,就执行相对应的操作指令,这些操作当然是在服务端的计算机上所进行的。而这个操作实质就是调用相应的函数来处理,这个函数及其参数说明就是如下:

BOOL ExitWindowsEx(UINT uFlags,DWORD dwReserved);

在其中uFlags可以有的取值:

EWX_LOGOFF:注消; EWX_POWEROFF:强制关机; EWX_REBOOT:重启;

EWX_SHUTDOWN:先保存再关机; EWX_FORCE:不保存就关机; 

EWX_FORCEIFHUNG:不保存就关机(WIN2K以上版本);

   好了,接下来我们就在VC中来用这个函数实现我们所要的功能。先来看看我们所要实现程序的外观吧!如图1

        图1

首先,由VC中的向导生成一个对话框,注意在生成向导中要选择成静态联编,由于我们在木马中一般是常用的是重启,那么我们就把这个程序取名为reboot吧!去掉它默认生成的静态文本,然后添加了三个单选项。并把其它主要的项设定如下:

控件

ID

属性

Button1

OnOK

“确定”

Button2

OnCancel

“取消”

Radio1

IDC_LOGOFF

“注消计算机”

Radio2

IDC_REBOOT

“重启计算机”

Radio3

IDC_SHUTDOWN

“关闭计算机”

第二,打开MFC ClassWizard进行消息的映射处理,五个主要的控件都是用单击这个消息处理,从而为为每个控件进行了消息映射。如图2

              图2

 第三、在rebootDlg.h中为三个单选按钮添加一个标志成员整形变量m_mark。并且在三个单选项按钮的函数体分别加入m_mark=0, m_mark=1, m_mark=2,如:(另两个也同理)

void CRebootDlg::OnLogoff()

{

       // TODO: Add your control notification handler code here

m_mark=0;    

}

第四、在双击“确定”的按钮,去掉它原来默认调用的ONOK(),并且加入以下的代码为:

 

void CRebootDlg::OnCok()

{

       // TODO: Add your control notification handler code here

HANDLE hToken;

TOKEN_PRIVILEGES tkp;

DWORD dwVersion; //版本号

 

dwVersion = GetVersion(); //得到WINDOWS NTWin32的版本号

 

switch(m_mark)//由接收单选项值进行相关操作

{

case 0:

           ExitWindowsEx(EWX_LOGOFF,0);

              break;    //注消操作

case 1:

           if(dwVersion < 0x80000000)

              {

              OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|

                                       TOKEN_QUERY,&hToken);

              LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

              tkp.PrivilegeCount = 1;  //设置权限

              tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);

              ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0);

              }

              else //WIN系列其它系统

              {

                   ExitWindowsEx(EWX_FORCE | EWX_REBOOT,0);

              }

              break;            //重启操作

 

case 2:

       if(dwVersion < 0x80000000)//用于判断WIN系列,从而设置相应的权限

       {

              OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES |

                                   TOKEN_QUERY,&hToken);

              LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);

              tkp.PrivilegeCount = 1;

              tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

              AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);

              ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,0);

       }

 

        else

     {

               ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN ,0);

        }

    break;//关闭计算机

}

}

第五、“取消”可以不做处理,采用默认的就可了,然后编译运行完成,这样你就为你的木马编写了远程关机部分。最后要是你有什么问题讨论请联系:anmeihong@sina.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值