想用C#完成灰鸽子的功能,遇到很多问题,其中比棘手的一个就是的,怎么让客户端生成服务端。如果你用过灰鸽子你应该知道,在灰鸽子的客户端配置一些信息,如IP,端口等。会自动生成一个服务端,然后服务端反向连接客户端。我的问题是,这个生成服务端的功能C#里是怎么实现的?在网上也查了些资料有篇《C# 实现从自身资源提取EXE文件》的文章,他讲的就是如何将EXE文件(服务端程序文件)以资源的形式保存在PE文件中,然后自我释放出来(模仿木马的自我释放功能),这篇文章当时是发表在07年的《黑客防线》上的,网上现在只有目录,没有详细内容了,很可惜。另一篇文章《木马服务端的生成技术》,在它的第二种方法中,讲的很详细,可惜是用C++讲,我看不懂。哪位大侠能用C#详细的讲一下这方面的技术,不胜感激!

解决方案 »

  1.   

    可以用socket,tcpip协议实现,事先在每一个客户端写好连接和被连接代码。
      

  2.   

    什么是客户端什么是服务器端?
    你要先搞清楚啊,.net是编译的执行的,就算你客户端能生成.CS文件,你能编译么?
    就算你能调用客户端的编译器,但你能确保你的客户端都装了.net环境?
    要先搞清楚再问啊,不然闹笑话!
      

  3.   

    没有必要另外再生一个exe当服务端,一个程序就可以了。
      

  4.   

    我没有说是要调用客户端编译器什么的
    或许,客户端和服务端做在一起了,已经编译好了,如果我知道就不问了
    此“生成”绝非ZHOUYANFSS讲的调用客户编译
    我说过了,和灰鸽子生成服务端那样的效果
    如果你用过你就知道了
      

  5.   

    你看看QQ的客户端就知道了,QQ即是一个服务端也是一个客户端
    你有绑定的端口号,那么其它机器就可以根据这个端口号和IP与你通讯,反之,你也可以与其它机器通讯
      

  6.   

    编译的时候,把另一些exe或者dll们,编译到资源文件,运行时从资源读入到byte[],把byte[]的内容用文件流生成相应的文件就可以了。
      

  7.   

    我是没用过,对黑客技术也没啥兴趣,或许我错解了你的生成的意思!
    按照你的描述,不应该叫做生成,最多是叫伪生成,应为肯定不是通过CS代码编译而成的!
    照这样的话,你可以把服务器端的程序编译好,无论是dll,exe都是二进制而已,流读取存在你的客户端程序里,客户端程序运行时把文件写到客户端机器上,再调用就可以了!
      

  8.   

    好象"Reflector"就是使用这种方式处理的
      

  9.   

    楼主朋友,这么简单的问题,你说出来搞得好像很复杂似的,你这个只不过就是把一个EXE文件放在客户端的资源里面,在需要把它释放的时候把它释放出来就行了!见义楼主看些C#做的自动更新程序,很多用的是这种方法,比如:lanmsg的更新就用了这种方法!
      

  10.   

    Assembly ass = Assembly.GetExecutingAssembly();
                Stream res = ass.GetManifestResourceStream("WindowsFormsApplication1.Test.exe");            FileStream fs = new FileStream(@"d:\t.exe", FileMode.Create);
                res.CopyTo(fs);
                fs.Close();把test.exe添加到项目中,编译行为选择为嵌入的资源。运行时就可以用这段代码释放出来。至于配置,就是根据客户端配置,写一个包含这个exe所需要的信息的配置文件嘛,ini,config都可以。
      

  11.   

    同意28楼的思路,就是从资源文件中释放可执行的EXE文件。
      

  12.   

    非常感谢啊
    有一点小问题
    res.CopyTo(fs); 这行报错
    stream类好像没有这个方法啊
      

  13.   

    哦,看了看,4.0才有CopyTo。
    那就先读出来再写吧。
    byte[] buf= new byte[res.Length];
                fs.Write(buf, 0, buf.Length);
                fs.Close();
      

  14.   

    byte[] buf= new byte[res.Length];
                res.Read(buf, 0, (int)res.Length);
                fs.Write(buf, 0, buf.Length);
                fs.Close();
      

  15.   


    ini,xml这些文件想怎么配置就怎么配置!
      

  16.   

    这位朋友给的从程序集中释放的方法也很不错的,足以解决你的问题了,至于FileStream这个的操作你不一定要用这位朋友给出的,只是把EXE写到硬盘而以,你自己发挥吧!不过有一点,如果楼主要做的是黑客程序的话,我想这个方法也许不够完美,应该会被杀毒软件扫描到,这样的话就要加壳处理了,用C#也是可以实现的!
      

  17.   

    前阵子做个动态编译,可以实现动态生成这样的exe
      

  18.   

    问题是你动态生成的exe得一直开着,socket服务端才起作用
    或者动态生成系统服务自动安装,不过一般防火墙都会提示的
    还是得用C做,更底层级别的
      

  19.   

    你可以看看这个例子
    http://www.codeproject.com/KB/cs/CodeDomCompile.aspx