Reflector 之reflexil使用
Reflector 之reflexil使用
先写个简单的控制台程序
![](https://img.haomeiwen.com/i2299265/3f8a6c8b393d17f1.png)
工具,添加插件.
![](https://img.haomeiwen.com/i2299265/e23f94c42601d4f1.png)
选中reflexil 1.6 (1.7从来没附加成功过.不知道为啥..)
![](https://img.haomeiwen.com/i2299265/3a8faadfab0be145.png)
一 直接修改操作数
![](https://img.haomeiwen.com/i2299265/4b8881be5ff6741d.png)
可以直接编辑IL
![](https://img.haomeiwen.com/i2299265/b7efb5a915858502.png)
Update 后
在程序集中右键
![](https://img.haomeiwen.com/i2299265/cd226a5c11ab47a5.png)
另存程序.
执行刚保存的程序
![](https://img.haomeiwen.com/i2299265/bdc49645a905d987.png)
还可以直接添加IL 接着让后面继续输出
二 直接注入IL
右键,新建(new Create),填写对应的操作码,选择类型,
值得注意的是右边的按钮,append(添加),接着是插入在选择之前,然后是插入在选择之后;别选错了.
![](https://img.haomeiwen.com/i2299265/1dc409050d2b618d.png)
![](https://img.haomeiwen.com/i2299265/516ab472ee26ae07.png)
注意 注入的时候操作数的类型别选错了.
然后继续参照上面的,将程序另存一次.
![](https://img.haomeiwen.com/i2299265/b9f848a77fc9d213.png)
三 替换代码
如果不想折腾IL,直接选择 替换所有代码.
![](https://img.haomeiwen.com/i2299265/5476e6813423ce1d.png)
不过这意味着你要重写所有代码(大多数时,我都会用在重写某个方法上)…然后提交一下,他会自动编译, 然后继续参照上面的,将程序另存一次.
![](https://img.haomeiwen.com/i2299265/acc4727b2e969b29.png)
提交完成后会自动编译,并且再右侧区域会生成对应的IL.
然后继续参照上面的,将程序另存一次.
执行下…
![](https://img.haomeiwen.com/i2299265/4dd0684173c5a901.png)
四 注入方法
![](https://img.haomeiwen.com/i2299265/5336f3e4559b1f7c.png)
别选错地方了.是你要将方法注入到某个类中,不是注入class所以,一定是在类上右键
![](https://img.haomeiwen.com/i2299265/2ac2a316e3a3f9f8.png)
暂时只能注入返回值为void的方法
对了,点击OK后会有个该死的提示,这提示的大致意思是:
当你在执行,增加,删除,重命名,等动作时,你不会直接看见相应的操作,他们是不同步的.
你必须要重新加载程序集才可以看见.
当然,你还需要将程序另存一次.!!!!!!!!!!!!!
然后你需要关闭程序集,接着重新打开刚才另存的
![](https://img.haomeiwen.com/i2299265/b11b6c11defa9dfe.png)
现在方法已经注入进去了.
![](https://img.haomeiwen.com/i2299265/1a6b991a3e428e57.png)
然后我需要给它添加点内容..
让方法输出个InjectedMethod字符串
在方法中添加IL
![](https://img.haomeiwen.com/i2299265/0d206457059aaa7c.png)
接着修改Main方法,并且调用刚才注入的方法.
![](https://img.haomeiwen.com/i2299265/7202d4dc01d7bb8c.png)
另存下..
执行结果.
![](https://img.haomeiwen.com/i2299265/ac3cde9e418eee2a.png)
PS: 如果是替换代码的话,先更改injectmethod时不用实现main方法,只需要修改injectmethod()方法,然后再去修改Main方法.调用时因为injectmethod方法不是static所以需要实例化Program
接下来说说添加有参数,有返回值的方法:
先在参数(parameter)标签,中添加一个参数.
![](https://img.haomeiwen.com/i2299265/590eba8769618e74.png)
然后在属性标签中修改返回值为string.
![](https://img.haomeiwen.com/i2299265/359855d26c44979d.png)
接着使用替换代码的功能
![](https://img.haomeiwen.com/i2299265/773976837e8662f3.png)
可以看见方法已经带有参数并且有返回值.
修改下这个方法
![](https://img.haomeiwen.com/i2299265/ebdfa1daa66ef88b.png)
打印下传进来的名字,并且打印当前时间
修改主函数调用
![](https://img.haomeiwen.com/i2299265/4ed9670975ab6e7f.png)
编译,然后不要忘记另存….
![](https://img.haomeiwen.com/i2299265/13ee6d5f992349dc.png)
Good Job .
Have Fun .
By McevilRock
9-7/2014
![](https://img.haomeiwen.com/i2299265/974fdb312e62d1e6.png)
![](https://img.haomeiwen.com/i2299265/6f016462ac7ca24d.png)
![](https://img.haomeiwen.com/i2299265/9a6cce3fe7b24cae.png)
![](https://img.haomeiwen.com/i2299265/58a89b8729dc285b.png)