设为首页 加入收藏

TOP

使用cecil 完成 code injection
2015-07-20 17:39:06 来源: 作者: 【 】 浏览:3
Tags:使用 cecil 完成 code injection

1. 安装Mono.Cecil

\

2. 创建一个测试项目:

\

<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD48cD7M7bzTsuLK1Le9t6ijujwvcD48cD4gPC9wPjxwPtXiuPa3vbeotcS3tbvY1rW74bG7tq/MrNbY0LQuPC9wPjxwPjxwcmUgY2xhc3M9"brush:java;"> public class Class1 { public static string Test() { return "ok"; } }

3. code Injection 代码:

var path = @"\XX\bin\Debug\ClassLibrary1.dll";
 
           var assembly = AssemblyDefinition.ReadAssembly
                (path);
           var type =assembly.MainModule.GetType("ClassLibrary1.Class1");
           var foundMethod = type.GetMethods().First(m => m.Name =="Test");
////清空当前方法指令
           foundMethod.Body.Instructions.Clear();
////获得当前IL的指令执行器
           var worker = foundMethod.Body.GetILProcessor();
////修改返回值
           Instruction ins1 = worker.Create(OpCodes.Ldstr, "will be changed onnext time run");
           Instruction ins2 = worker.Create(OpCodes.Ret);
 
           worker.Append(ins1);
           worker.Append(ins2);
////保存DLL文件
           assembly.Write(path);
 
////下次调用就会看到(因为新保存的DLL下次才能加载到)
           Console.WriteLine(Class1.Test());
           Console.Read();

4. 运行查看结果


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ACdream区域赛指导赛之手速赛系列.. 下一篇UVALive - 3263 That Nice Euler ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·「链表」是一种怎样 (2025-12-25 19:20:51)
·C 语言中的链表有哪 (2025-12-25 19:20:48)
·c语言中的链表怎么学 (2025-12-25 19:20:45)
·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)