C#代码分析器(C#游戏代码注入)

简介

  在进行C#代码注入的过程中,写的比较复杂的逻辑,但是reflector注入只能一个个函数来进行,而且添加paramter非常复杂,这里做了一个简单的代码分析器,帮助所有代码集中到一个函数中。

      虽然感觉上比较简单,但做的过程中,花费了大半天的时间,这里把遇到的问题总结一下,给大家后续开发一些启示。

  理论上C语言格式的都可以用这个解析把多个函数包含在一个函数里面


Reflector注入过程

  • 1 导入相应的dll
  • 2 tools decompile。 点右键 replaceWithCode。
  • 3 子类添加函数基类,然后写函数。
  • 4 在dll上右键Reflexil -> SaveAs相关dll即可。

 

遇到的问题

  因为relector一次只支持注入一个函数,而我们写的显示代码是有多个函数的。

      即使新加入一个类,也需要在这个类里面单独加入各个函数。

     同时代码里面有互相的嵌套,而且有返回值和各个参数,如果单个的加非常的麻烦,而且reflector不支持返回值,相关的值只能放入输出参数,和原有的代码就大大违背了。

所以这里写了一个简单的代码分析器,用这个解析把多个函数包含在一个函数里面。


代码格式

首先读入的代码要编译通过

需要一些简单的约束:

  • 1子函数必须有返回值,且返回值不能用和次子函数的参数相同。只有一个返回的出口。上支持上任意返回类型,只是父函数必须调用一下子函数返回的值。
  • 2 调用函数的参数中不支持嵌套调用自己写的函数。
  • 3 除非是返回值,否则临时变量需要自行设的是unique的。否则会重复定义。
  • 4 “{}”这种单独占一行,一般C#编辑器会自动解析成这样。
  • 5 函数不能循环调用,解析会进入循环。
  • 6 目前只支持+=和+,如果需要其他运算符,在tpl_func_split中加。  特殊的运算序列没有做支持,当时这个分析器只是为了输出日志方便用的。

 

输入格式

  //(joint为已知的Joint数据结构)
        public string A(string p)
        {
            string tmpA = "add a" + p;
            return tmpA;
        }
        public string B(Jointjoint, string c)
        {
            string tmp = "add b\n";
            tmp += A(joint.format) + joint;
            return tmp;
        }
        public void Jump()
        {
            string tmp = "start ===\n";
            //tmp += "A " + A("12");
            //tmp += B("34", "12");
            tmp += " A B" + A("12") + B(joint, "c") + A("34");
        }


输出格式

会经过代码分析器分析为:

       public void Jump()
        {
            string tmp ="start ===\n";
            string _result_6_ ="add a"+"12";
            string _result_7_ ="add b\n";
            string _result_8_ ="add a"+joint.format;
            _result_7_ +=_result_8_+joint;
            string _resul
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值