某财务软件dnspy分析

查看 124|回复 10
作者:yangboyd   
某财务软件的旧版本(T+16),新版本不适应。
关键函数被处理,内存中产生


67496425fbac3b74d097e407356691e.png (27.22 KB, 下载次数: 0)
下载附件
1
2024-4-12 08:42 上传

产生的代码放入字典中


e5799f88bb25f363b3d01c43acc1717.png (50.75 KB, 下载次数: 0)
下载附件
2
2024-4-12 08:43 上传

某处调用SetCode恢复代码,省略解密部分。


06bdcacc764a98f9be78035e21dc7b4.png (39.88 KB, 下载次数: 0)
下载附件
3
2024-4-12 08:43 上传

存放动态生成函数的DynamicMethod


35c71bec43560570039a2b5eb8036e7.png (36.47 KB, 下载次数: 0)
下载附件
4
2024-4-12 08:44 上传

从DynamicMethod中恢复出来的代码


32e750adec61384e4e374b6c148666d.png (62.66 KB, 下载次数: 0)
下载附件
5
2024-4-12 08:44 上传

逻辑修改借助Harmony实现

下载次数, 下载附件

3yu3   

How to get an IL bytearray from a DynamicMethod? 涉及的东西太多了。
如何从DynamicMethod获取IL bytearray?
从DynamicMethod获取IL bytearray的方法如下:
  • 首先,创建一个DynamicMethod对象,指定方法的名称、返回类型和参数类型。例如,创建一个返回整数类型的方法,没有参数:DynamicMethod dynamicMethod = new DynamicMethod("MyMethod", typeof(int), null);
  • 获取DynamicMethod的IL生成器(ILGenerator),用于生成IL指令序列。通过调用DynamicMethod的GetILGenerator方法来获取ILGenerator对象:ILGenerator ilGenerator = dynamicMethod.GetILGenerator();
  • 使用ILGenerator对象来生成IL指令序列。IL指令是一种低级的指令集,用于定义方法的操作。可以使用ILGenerator的各种方法来生成不同的IL指令。例如,使用Emit方法生成一个将整数值1压入堆栈的指令:ilGenerator.Emit(OpCodes.Ldc_I4_1);
  • 完成IL指令的生成后,调用ILGenerator的CreateDelegate方法来创建一个委托,该委托可以被调用以执行动态生成的方法:Func dynamicDelegate = (Func)dynamicMethod.CreateDelegate(typeof(Func));
  • 调用委托以执行动态生成的方法,并获取返回值:int result = dynamicDelegate();
  • 获取IL bytearray的方法是通过使用ILGenerator的GetILAsByteArray方法。这将返回一个表示动态生成的方法的IL指令序列的字节数组:byte[] ilBytes = ilGenerator.GetILAsByteArray();
    通过上述步骤,你可以从DynamicMethod获取IL bytearray。请注意,IL bytearray只能用于分析和调试目的,不能直接执行。
  • 无敌小儿   

    太深奥了
    170077000   

    什么软件也没说  等于没说
    adld   

    这个软件看着是混淆过了。
    ZHOUJIAN75   

    深,建议最好增加一个 初,中,高 级别。
    xtkj   

    告诉下软件名字。学习一下。
    tydzjing   

    光看这个图,真没看懂啥
    xfaxf77   

    啥意思啊
    13557455543   

    看不懂,太深奥了
    您需要登录后才可以回帖 登录 | 立即注册