首页 > 编程语言 >C#反编译dll文件,修改其中汉字内容,再重新生成dll

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

时间:2023-11-16 18:44:16浏览次数:39  
标签:反编译 文件 C# 转储 dll 汉字编码 IL

 一位电气朋友让我帮其反编译一个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 SDKsWindowsv7.0ABin

打开它,并点击‘文件’-‘打开’,加载你要反编译的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步:寻找汉字编码表,并对照

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

 

内容来源于网络如有侵权请私信删除

标签:反编译,文件,C#,转储,dll,汉字编码,IL
From: https://www.cnblogs.com/csjoz/p/17837010.html

相关文章

  • 软件测试/人工智能|一文告诉你ChatGPT原理与架构
    简介ChatGPT是今年最火的互联网应用,ChatGPT给我们的工作和生活带来了巨大便利,帮我们写文案,帮我们写代码等,但是当我们在于ChatGPT对话时,我们是否有想过,这么强大的一个工具,它背后的技术原理是什么?它的技术架构是怎样的?本文就告诉大家ChatGPT的原理与架构。ChatGPT的主要特点OpenAI使......
  • 无涯教程-Dart - Parameterized Function函数
    参数是一种将值传递给函数的机制,参数是函数签名的一部分,参数值在调用过程中传递给函数,除非明确指定,否则传递给函数的值的数量必须与定义的参数的数量匹配。语法Function_name(data_typeparam_1,data_typeparam_2[…]){//statements}示例voidmain(){test_pa......
  • Navicat设置MySQL某用户只可访问特定数据库或表
    概述项目中需要将数据库中某些表对其他系统开放,故需设置数据库的访问权限,使得某用户只能访问指定的表。MySQL提供了相关的SQL语句,但本次使用Navicat以可视化方式进行配置。方法1、新建用户2、设置权限(1)服务器权限全不勾选(2)权限权限用于设置该用户可操作哪些数据库或表,且可设置操作......
  • 一个Git clone仓库的指定目录命令对比国内外常见AI(二)使用天工AI
    通常情况下,我们会克隆整个Git仓库,但有时候我们只需要其中某一个目录或文件,这时候只克隆子目录会更加方便。这个需求好像不是经常用到,搜索结果也是五花八门,有些完全达不到要求,正好用这个机会测试一下最近大火的AI看看是否足够智能。国内天工AI(推荐使用,替代百度搜索,不用注册,包含参考......
  • 软件测试/人工智能|利用ChatGPT进行项目需求分析
    简介在我们的开发和测试工作中,需求分析是必不可少的一个步骤,很多时候,我们可以拿到产品的PRD文档或者产品架构图原型图进行分析,为产品的功能实现保驾护航,为后续的优化提供建议。在需求分析的时候,我们也可以借助ChatGPT来帮我们进行需求分析,本文就来给大家介绍一下如何使用ChatGPT来......
  • CreateCollection API执行流程(addCollectionMetaStep)_milvus源码解析
    CreateCollectionAPI执行流程(addCollectionMetaStep)源码解析milvus版本:v2.3.2CreateCollection这个API流程较长,也是milvus的核心API之一,涉及的内容比较复杂。这里介绍和channel相关的流程。整体架构:CreateCollection(addCollectionMetaStep)的数据流向:1.客户端sdk发出......
  • MV移动和CP复制
    mv基本概述mv命令来自英文单词”move“的缩写,中文译为”移动“,其功能与英文含义相同,能够用于对文件进行剪切和重命名操作。这是一个被高频使用的文件管理命令,我们需要留意它与复制命令的区别。cp命令是用于文件的复制操作,文件个数是增加的,而mv则为剪切操作,也就是对文件进行移动(......
  • 软件测试/人工智能|一文告诉你ChatGPT原理与架构
    简介ChatGPT是今年最火的互联网应用,ChatGPT给我们的工作和生活带来了巨大便利,帮我们写文案,帮我们写代码等,但是当我们在于ChatGPT对话时,我们是否有想过,这么强大的一个工具,它背后的技术原理是什么?它的技术架构是怎样的?本文就告诉大家ChatGPT的原理与架构。ChatGPT的主要特点Open......
  • 软件测试/人工智能|利用ChatGPT进行项目需求分析
    简介在我们的开发和测试工作中,需求分析是必不可少的一个步骤,很多时候,我们可以拿到产品的PRD文档或者产品架构图原型图进行分析,为产品的功能实现保驾护航,为后续的优化提供建议。在需求分析的时候,我们也可以借助ChatGPT来帮我们进行需求分析,本文就来给大家介绍一下如何使用ChatGPT......
  • linux配置miniconda、pytorch、torch_scatter以及cuda. - 叶辰
    在西方的天际,正在云海中下沉的夕阳仿佛被溶化着,太阳的血在云海和太空中弥漫开来,映现出一大片壮丽的血红。“这是人类的落日。”一,miniconda下载安装以及注意事项1,下载进入官网miniconda正常选择最新版Miniconda3Linux64-bit,jetson选择Miniconda3Linux-aarch6464-bit。......