反编译c#程序

补充要点,

1.反编译同时产生的全部文件,再重新编译时需要处在同一目录下.

2.程序的入口点,需要是一个静态函数,不确定能否随意指定,一般选择业务相关的入口函数应该就可以.

3.ilasm和ildasm可能不在同一个路径下.例如本人的2005 

ilasm在D:\Program Files (x86)\Microsoft Visual Studio 8\VC>

ildasm在:D:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin


————————————————
版权声明:本文为CSDN博主「dedon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dedon/article/details/127344220

很多软件需要很多条件才能跑起来,尝试重新编译c#程序。

一、先期尝试:安装好软件之后发现有Dog.dll DogHelper.dll Web.dll这几个主要的库文件,使用反编译工具打发现Dog.dll是c++写的,无法反编译,应该是从第三方买的软件狗和dll,不管它。打开DogHelper.dll,如下:

 

 发现这个dll中只有Helper类是读取狗数据的,其它都是狗数据模型。

 

最后Result返回是指针转成的DogInfo对象。 于是考虑如果能把狗的信息读出来,存成序列化文件,再到没狗的时候读这个文件转成DogInfo对象返回不就绕过读狗信息了吗?于是将DogHelper保存成项目,并写了界面程序谳用这个DogHelper先在有狗的机器上将DogInfor保存成文件序列化文件,再重写DogHelper的Helper方法,将读狗改成读文件。经过一番尝试未能成功,只能想别的办法了。

二、重写Web.dll

既然DogHelper.dll改不了,就改Web.dll,由于Web.dll引用了从多类库,用反编译生成的项目无法编译,所以无法重写。找到了另外的方法,使用.net自带的ildasm反编译。

1、确定修改位置

用反编译工具ILSpy打开Web.dll,发现里面的命名空间Web中有个Global是调用DogHelper的地方:

 

 这是定时读了狗的信息,只要Infos[12].IsSetup=1,则返回Int最大值说明读到狗了,而且每五分钟读一次。那么这个MaxControlCount.Limited就很重要了,读不到就是0,说明没装狗。那我就改这个catch地方,不管读没读到都让MaxControlCount.Limited=Int最大值。确定目录之后就是实施过程。

2、生成编译文件

(1)、使用ildasm.exe打开Web.dll,并将其Dump成il和res文件,如下图:

 

 (2)、用记事本打开il文件,搜索dogTimer_Callback:

 

 第一个红框就是MaxControllerCount.Limited=int最大值0x7fffffff,第二个红框就是0,那么把第二个ldc.i4.0 也改成ldc.i4 0x7fffffff就完成了,保存该文件。

3、重新编译成dll

由于该系统是用.net 2.0编写的,所以选择.net 2.0,其它版本类似。用管理员进入命令行模式,找到.net 20目录下的ilasm命令去重新编译这个il文件11.il,输入以下命令重新编译Web.dll:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727>ilasm /res:c:\111\11.res c:\111\11.il /out:c:\111\Web.dll

但它提示无法编译:

 

 这是Visit.Model.About类找不到入口点,在反编译里找到这个类,它有个静态函数GetAbout是加载软件信息的方法GetAbout,我们就将这个函数作为入口点:

 于是再次用记事本打开il文件找到GetAbout,在它的.maxstack 3后面加上.entrypoint标识GetAbout是类入口函数,如下图:

 

 

 保存后再次编译:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727>ilasm /res:c:\111\11.res c:\111\11.il /out:c:\111\Web.dll

这次成功将11.il重新编译成了c:\111\Web.dll。

将Web.dll替换以前的Web.dll进行测试,但跑不起来,在Windows事件日志里发现了另外的错误:

 

 这是重新编译的dll签名错误。

4、去掉签名

再次用记事本打开il文件,找到.publickey,去掉签名部分:

 

 这部分就是签名,把红框部分删除掉,然后再重新编译成Web.dll,再次运行整个程序。

运行成功了,不需要硬件狗!
————————————————
版权声明:本文为CSDN博主「dedon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dedon/article/details/127344220

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值