当前位置: 移动技术网 > IT编程>开发语言>.net > C#反编译dll文件,修改其中汉字内容,再重新生成dll

C#反编译dll文件,修改其中汉字内容,再重新生成dll

2019年07月25日  | 移动技术网IT编程  | 我要评论

宋罔陵,内功秘籍,石家庄市政府网

  一位电气朋友让我帮其反编译一个dll文件,只要修改dll中部分中文字符串的内容(比如:‘电机编号’、‘接线方式’等等)。

  这样的事情自己从来还没接触过,能否实现、难度怎样也没一个概念,但为了帮他一下,也为了挑战下看自己到底需要多久才能解决此全新问题,欣然接受了。

  从9:16到10:21,只花了1个小时左右的时间,就将此问题的核心解决了^_^。当然,如果计算机基础知识更扎实,应该很多资料都不需要去查阅。

  不过,想想最近在深度学习ocr各类钢印手刻字体识别上遇到的各种折磨,心里的挫败感终于缓解了点。

第1步:打开il dasm软件

  ildasm.exe是微软的il反编译工具,可以用它反编译exe程序,从而进行研读和修改。

  il是微软平台上的一门中间语言,我们常写的c#代码在编译器中都会自动转换成il,然后在由即时编译器(jit compiler)转化机器码,最后被cpu执行。ildasm.exe反编译工具将il汇编成可跨平台可执行的(pe)文件。可供我们了解别人代码和修改。有了他我们看待问题可以不用停留在编辑器层面,可深入中间层。

  ildasm.exe不要下载,在本机c盘就能找到,在我电脑中的位置是:

c:\program files (x86)\microsoft sdks\windows\v7.0a\bin

打开它,并点击‘文件’-‘打开’,加载你要反编译的dll文件,结果如下:

内容中具体每个符号是什么意思,参考如下:

主要参考文献:

★https://www.cnblogs.com/caokai520/p/4921706.html

第2步:转储dll文件

  为了更好的编辑dll中内容, 需要将dll转储一下。

  ildasm.exe中点击‘文件’-‘转储’,‘转储选项’默认即可,如下:

  随便起个名字(如test),然后保存在某个临时文件内,转储结果如下:

  然后打开那个test.il文件,内容大概如下:

  这里面的内容,应该就是dll全部的代码信息了。

第3步:定位到具体要修改的代码位置

   由于il语法未曾接触过,并且近2万行代码中,也没见到一个中文字符串,当时也不确定这个文件是否是自己需要修改的。通过概览网上一些人的案例,特别是如下几个,渐渐就有了眉目。

如上三幅图提示,再了解ldstr关键词含义后,可以认为后面的16进制代表的应该就是汉字编码。

第4步:寻找汉字编码表,并对照

  网上这方面资料似乎很少,很感谢‘’写了上述那个‘乱舞春秋’的demo,通过对照汉字编码表(https://wenku.baidu.com/view/e660cf35ba0d4a7303763a54.html?sxts=1564020740708),发现‘乱’字的4位16进制编码就是‘’博主里那个‘71 4e’。

  不过在汉字编码表中,顺序是‘4e71’,逐一检验其它3个字后,终于确认了规则。

  然后,按照此规则,在汉字编码表中,找到‘电机编号’4个字符,其在il语法中16进制表示方式应该是:35 75 3a 67 16 7f f7 53。通过检索整个test.il文件,发现了29处匹配项!

 

  到此核心的工作已经完成了,下一步就是编写一个python脚本,将整个dll中出现的这些‘电机编号’前后整段语句结合汉字编码表excel,全部自动翻译出来,并标示代码行位置,然后就知道要去改哪里了。

 

第5步:修改后,重新生成dll

这一步可参考:https://www.cnblogs.com/jiangchuan/p/10851179.html

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网