zoukankan      html  css  js  c++  java
  • C#来做virus的设想

    偶不懂PE格式,不懂strongname应该如何处理,所以,下面是一个非常笨的方法,

    假设有一个exe,我现在要感染它,因为上面的原因决定,我只能选择一个迂回的路线。
    把exe用ildasm搞成.il代码,然后把我的il代码加进去,然后ilasm重新编译该il,呵呵。这样做,需要被感染的机器安装有ildasm(如果不装sdk,没这玩意儿)。

    简单的例子:我想输入hello,fqq!那么写一个最小的代码,如下:
    using System;

    namespace DebugDemo{
        
    public class Demo{
            
    public static void Main(){
                Console.WriteLine(
    "hello,fqq!");
            }

        }

    }

    然后用csc,ildasm,得到.il代码,main里面唯一的一行,会输出为:
    IL_0000:  ldstr      "hello,fqq!"
    IL_0005:  call       
    void [mscorlib]System.Console::WriteLine(string)

    然后,用ildasm 要感染的文件.exe  /output=tmp.il
    然后找到il中的.entrypoint,把上面两行插进去,并修改后面的il行号(是否需要修改?我没有试验过,不过我是都修改了),然后,用ilasm重新编译一次,把原来的文件覆盖即可。

    虽然着很滥,不过确实很直接的做法,呵呵。

    这是被感染文件,修改前的il代码:
         .entrypoint
          
    // Code size       25 (0x19)
          .maxstack  3
          .locals init (int32 V_0,
                   int32 V_1,
                   int32 V_2,
                   int32 V_3)
          IL_0000:  ldc.i4.s   
    10
          IL_0002:  stloc.
    0
          IL_0003:  ldc.i4.s   
    20
          IL_0005:  stloc.
    1
          IL_0006:  ldc.i4.s   
    30
          IL_0008:  stloc.
    2
          IL_0009:  ldloc.
    0
          IL_000a:  ldloc.
    1
          IL_000b:  ldloc.
    2
          IL_000c:  call       int32 DebugDemo.Demo::Sum(int32,
                                                         int32,
                                                         int32)
          IL_0011:  stloc.
    3
          IL_0012:  ldloc.
    3
          IL_0013:  call       
    void [mscorlib]System.Console::WriteLine(int32)
          IL_0018:  ret

    下面是被感染文件修改后的代码:
          .entrypoint
          
    // Code size       25 (0x19)
          .maxstack  3
          .locals init (int32 V_0,
                   int32 V_1,
                   int32 V_2,
                   int32 V_3)
          IL_0000:  ldstr      
    "hello,fqq!"
          IL_0005:  call       
    void [mscorlib]System.Console::WriteLine(string)
          IL_000a:  ldc.i4.s   
    10
          IL_000c:  stloc.
    0
          IL_000d:  ldc.i4.s   
    20
          IL_000f:  stloc.
    1
          IL_0010:  ldc.i4.s   
    30
          IL_0012:  stloc.
    2
          IL_0013:  ldloc.
    0
          IL_0014:  ldloc.
    1
          IL_0015:  ldloc.
    2
          IL_0016:  call       int32 DebugDemo.Demo::Sum(int32,
                                                         int32,
                                                         int32)
          IL_001b:  stloc.
    3
          IL_001c:  ldloc.
    3
          IL_001d:  call       
    void [mscorlib]System.Console::WriteLine(int32)
          IL_0022:  ret

    注意IL_0000和IL_0005两行,被我插入了。

    注意!!!这不是什么病毒教程,如果病毒要这么写,作者早就被人扁死了。
  • 相关阅读:
    Asp.Net 加密 web.config中的某个敏感信息
    异步模型中HttpWebRequest的Timeout
    WCF路由所有的请求到一个方法route all request to one operation
    .Net中直接操作内存
    【转】.NET AJAX实例
    【原】IE/FF 强制浏览器不读取缓存(强制刷新)
    【精】经典的css技巧
    【转】C#如何获取客户端/服务端IP地址
    【原】FireFox显示滚动条 [解决页面左右移动]
    【原】Function Import in Entity Framework 4 issue
  • 原文地址:https://www.cnblogs.com/juqiang/p/23797.html
Copyright © 2011-2022 走看看