C# 使用reflector与reflexil实现代码注入

需求

1.         双击窗体,弹出无标题的messageBox

C# 使用reflector与reflexil实现代码注入_第1张图片

源码

using System;

using System.Windows.Forms;

 

namespace ReflexilDemo

{

    public class DemoForm : Form

    {

        public DemoForm()

        {

            //InitializeComponent();

            this.Click+=DisplayResultButton_Click;

        }

 

        private void ComputeAndDisplay(decimal x, decimal y)

        {

            MessageBox.Show(String.Format("{0}+{1}={2}", x, y, x + y));

        }

 

        private void DisplayResultButton_Click(object sender, EventArgs e)

        {

            decimal a=3.0M;

            decimal b=6.0M;

            ComputeAndDisplay(a, b);

        }

       

        static void Main()

   

        {

            DemoForm df=new DemoForm();

            df.ShowDialog();

           

            Console.Read ();

        }

    }

}

 

2.         注入代码后,双击窗体,弹出有标题的messageBox

C# 使用reflector与reflexil实现代码注入_第2张图片

 

 

实现

使用.NET ReflectorReflexil ,修改il代码实现。

由源码可知,messagebox的调用是在ComputeAndDisplay方法中完成的,所以我们需要修改此方法的il

实现步骤:

Reflexil打开 ComputeAndDisplay

 

 

C# 使用reflector与reflexil实现代码注入_第3张图片

 

 

插入字符串

C# 使用reflector与reflexil实现代码注入_第4张图片

修改MessageBoxShowstring----àMessageBox.Show(string,string)

C# 使用reflector与reflexil实现代码注入_第5张图片

C# 使用reflector与reflexil实现代码注入_第6张图片

C# 使用reflector与reflexil实现代码注入_第7张图片

 

 

 

选择Show(string,string),双击

C# 使用reflector与reflexil实现代码注入_第8张图片

 

 

然后保存修改后的结果

C# 使用reflector与reflexil实现代码注入_第9张图片

再次运行

C# 使用reflector与reflexil实现代码注入_第10张图片

你可能感兴趣的:(reflect)