gpt4 book ai didi

.Net7的AOT的程序比托管代码更容易破解?

转载 作者:我是一只小鸟 更新时间:2022-12-31 14:31:32 25 4
gpt4 key购买 nike

楔子

.Net 7的一个重要功能是把托管的源码编译成Native Code,也就是二进制文件。此举看似增加了程序反编译难度,实际上是减少了程序的破解难度。本篇在不触及整个程序架构的前提下,以简单的例子来修改Native AOT exe文件的输出字符串.



例子

                        
                          Console.WriteLine("Hello, World!");
Console.ReadLine();

                        
                      

搞一个简单的HelloWorld example,来举例下非常简单的破解之道.



UltraEdit

这里需要用到一个16进制的编辑器工具:UltraEdit.这个东西可以去搜索引擎搜索下就可以得到。 把以上简单的代码编译成Native AOT文件之后,生成一个exe文件。把这个exe文件拖到UltraEdit里面去.



破解

image

下拉UltraEdit到地址0046F09C处,可以看到:48 00 65 00 这四个byte。十六进制的0x48和0x65是上面.Net程序输出的语句的Hello, World! 前面的He两个字符串的ASSIC码.

右键UltraEdit修改,把48 00 66 00修改成:49 00 66 00,如上图所示。然后再打开native AOT的exe文件发现本来的Hello, World!变成了Ifllo, World!。如下图所示.

没修改前:

修改后 。



原理

它的原理也非常简单,只要看下.Net 程序的Console.WriteLine函数的参数地址是多少,一般在汇编层面是用RCX寄存器来表示。所以你只要找到RCX寄存器的地址,注意它在哪个Section,进行相应的计算就可以找到字符串Hello World在二进制文件里面的地址。进而进行修改.



结尾

这种修改还有很多地方,比如修改函数的跳转,修改功能性的缺失,修改整个程序的架构。整个程序像个筛子.

作者:江湖评谈 。

最后此篇关于.Net7的AOT的程序比托管代码更容易破解?的文章就讲到这里了,如果你想了解更多关于.Net7的AOT的程序比托管代码更容易破解?的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com