手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网站运营>建站经验>列表

Windows黑客编程基础

来源:互联网 作者:west263.com 时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

这是个很基本的技巧。假如您是个木马程式的爱好者,当您阅读众多的木马源程式的时候,就会发现100%的木马程式都很注意自身的后台监控本领,也就是隐身技术,面对不同的系统要施展不同的对策才能实现。很多杀毒程式就采用了这种后台监控技术,使程式随着系统的启动而运行,然后在后台悄悄地监控系统的一举一动,一发现有不对路的程式就把他“揪”出来示众。实现程式的后台监控技术有如下几个关键:
①正常运行时,不显示程式的窗体;
②系统每次启动都自动运行程式一次;
③程式图标不显示在任务栏上;
④不显示在按Ctrl Alt Del 调出的任务列表中;
⑤通过热键能够调出隐藏的窗体
实现方法:对于①,要不显示窗体,我们能够编辑WinMain函数,配置ShowMainForm值为False就能够隐藏程式的窗体了。参考代码:Application-〉ShowMainForm = false ;对于②,能够利用技巧1所介绍的方法修改注册表,键值如下:HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run ,使用的是WriteString()方法。这是冰河等多种旧木马惯用的启动手段之一(当然更有文档关联、注入dll等方法);对于③,要使程式图标不显示在任务栏上,也很简单,调用API函数SetWindowLong 能够让程式运行后不出现在任务栏里,但是要放在窗体的OnCreate()里面。代码如下:
SetWindowLong(Application-〉Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
对于④,调用RegisterServiceProcess API 函数将程式注册成为一个服务模式程式,让他运行在较高的优先级下,就不会出现在程式列表中(对Win9X有效,WinNT/2000/XP下无效)。具体的代码请参考笔者的《一个简单木马程式的编写和伪装策略》一文,不在此重叙(请参考《黑客防线》2002年第6期)。对于⑤,要先定义捕获Windows消息WM_HOTKEY的钩子函数,然后向Windows加入一个全局原子,并保留其句柄,最后向Windows登记热键,这个能够调用API函数RegisterHotKey来实现。
技巧⒌使用定时触发器
在C Builder 环境下,定时触发器即Timer控件,有时候我们希望程式隔一段时间重复执行相同的动作,比如对QQ密码截获的时候,就要隔一段间隔寻找一次QQ登录窗口。在C Builder 中,只要将执行这些动作的代码放到一个Timer中去就OK了。
听说“中国黑客”病毒运行几分钟后就自动创建一个新的线程,用于寻找OICQ的“发送消息”窗口,在10分钟内一直在找,一旦找到就将“去***法轮功”等带有政治色彩的言论发送给受害者QQ上的好友,10分钟后自动结束该线程。我想在查找“发送消息”窗口的10分钟内就运用了定时器,该病毒是用汇编研发的。可是在C Builder中是如何运用的呢?其实控件的出现使得编程变得很简单,添加一个Timer控件,配置几下控件的属性,双击Timer控件,将代码放到里面去就行了。程式执行的时候,相隔指定的时间就重复执行里面的代码了。实际上笔者在上一期的“程式一”中寻找QQ登录窗口时,就运用了定时器,请读者参考光盘中的源程式。
有关编程技巧的介绍到此为止,请读者参考另类书籍,掌控更多的黑客编程技巧,编写出受欢迎的黑客程式来。
五、Socket 编程和网络通信基础
由于本文的主题是“黑客编程基础”,而黑客是互连网上“来无影,去无踪”的黑衣人,如冰河、网络神偷等黑客程式都是基于互连网的,谈黑客编程离开网络编程就会大失其味。所以,下面接着谈谈网络编程,大凡基于网络应用的程式都离不开Socket。
Socket 为套接字之意,是作为电脑和电脑之间通信的接口。有关Socket的概念在第6期《黑客防线》的《Socket 编程的基础和基本过程》一文中有周详的描述,请大家参考,不在此多叙。需要指出的是:Winsock是访问众多的基层网络协议的一种接口,在每个Win32平台上,他都以不同的形式存在着,Winsock 是网络编程的接口,不是协议,这是容易弄错的地方。
现在来谈谈Winsock 编程的过程,大凡在Win32平台上的Winsock编程都要经过下列的基本步骤:定义变量-〉获得Winsock版本-〉加载Winsock库-〉初始化-〉创建套接字-〉配置套接字选项-〉关闭套接字-〉卸载Winsock库,释放任何资源。
下面以一道极其简单的程式来说明如何进行Winsock编程。程式四:编一个程式来获取本地机器的IP地址。
使用Winsock提供的API函数是最基本的网络技术,为了给初学者看个清楚,笔者打算在Visual C 和C Builder下各写一个,便于大家区分这两种不同的编程工具的特性(对于本程式来说,他们都差不多,而对于某些通信程式,他们实现起来就相差很远了,但本质是差不多的)。先来看Visual C 下的源程式,实现步骤:打开Visual C ,从“File”菜单中的“New”新建一个工程,选中“Win 32 Console Application”,意思是说生成的是Win32的控制台程式。另外,初学者要注意一点:只要程式中用到了 Winsock API 函数,都要在工程配置的 Link 中增加 Ws2_32.lib 文档,不然程式将不能通过编译,方法是:点击“Project”菜单,选择“Settings... ALT F7” ,在弹出的“Project Settings”对话框右侧选“Link”标签,再在“Project Options”下方的编辑框中增加Ws2_32.lib文档,点“OK”就能够了。
加载好文档之后,就能够在CheckIP.cpp文档里加入以下代码了:
//-------Begin from ------------
//包含需要使用的头文档
#include "stdafx.h"
#include "windows.h"
#include
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void CheckIP(void) //定义CheckIP()函数,用于获取本机IP地址
{
WORD wVersionRequested;// WORD类型变量,用于存放Winsock版本的正确值
WSADATA wsaData;
char name[255];//定义用于存放获得的主机名的变量
CString ip;//定义IP地址变量
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 2, 0 );
//调用MAKEWORD()获得Winsock版本的正确值,用于下面的加载Winsock库
if ( WSAStartup( wVersionRequested, &wsaData ) == 0 ) {
//现在是加载Winsock库,假如WSAStartup()函数返回值为0,说明加载成功,程式能够继续往下执行
if( gethostname ( name, sizeof(name)) == 0) {
//假如成功地将本地主机名存放入由name参数指定的缓冲区中
if((hostinfo = gethostbyname(name)) != NULL) {

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!