c++编写的exe文件怎么反编译成源代码

c++编写的exe文件怎么反编译成源代码,第1张

1、点击“开始轮孝”菜单——选择“运行”。

2、在d出的运行框中输入“cmd”——选择“确定”。

3、然后就d出MS-Dos窗口。

4、接着烂桐碰记住CHM文件的路径,我是放在“F:\”根目录下。

5、接着新建一个文件夹,我这里取名为“checkout”,还有记住你的文件夹路径,我是放在“F:\”根目录下。

6、然后在命令行中输饥谈入“hh -decompile F:\checkout F:\checkout.chm”——按回车即可。

C# 编写的代码通过VS编译器生成 dll 或 exe ,很容易被一些反编译工具查看到源码或对源码进行修改。

为防止代码被反编译或被篡改,我们可以进行一定的防范措施。但不能杜绝,因为DotNet编写代码运行必须郑返编译成IL 中间语言,IL是很规则,同时也很好反编译。

反编译防范措施:

设置项目代码反汇编属性

混淆

方法一:防止 Ildasm.exe(MSIL 反汇编程序) 反汇编程序集

方法很简单在项目文件AssemblyInfo.cs中增加SuppressIldasm属性。

当项目中增加SuppressIldasm属性后在使用ildasm.exe反编译代码,会提示:"受保护的模块 -- 无法进行反汇编"

ildasm.exe 读取项目中包含 SuppressIldasm 属性就不对此程序集进行反编译。但ILSyp,Reflector等反编译工具针对程序集设置SuppressIldasm属性置之不理,一样可以反编译源码。

缺点:

可见SuppressIldasm 属性只针对ildasm.exe工具起效果,同时也能删除ildasm.exe工具的此项限制。参考:《去掉ILDasm的SuppressIldasmAttribute限制》

方法二:混淆

混淆原理:将VS编译出的文件(exe 或 dll)通过ildasm对文件进行重命名,字符串加密,移动等方式将原始代码打乱。这种方式比较常见。

VS2013 自带混淆工具:工具-->PreEmptive Dotfuscator and Analytics

但VS2013自带Dotfuscator 5.5 需购买激活才能使用全部功能。目前百度提供 DotfuscatorPro 4.9 破解衡丛渣版版本下载。

打开 DotfuscatorPro 4.9 主界面

Settings->Global Options 全局配置

常用功能配置:Disable String Encryption=NO 启用字符串加密

选择需混淆C#编译代码(dll 或 exe)

其中Library不要勾选,否则有些类、变量等等不会混淆;

Rename 重命名配置

常用功能配置: 勾选 = use enhanced overload induction  使用增强模式

重命名方案 Renaming Scheme = Unprintable (不可打印字符,即乱码),也可以选择其他如小写字母、大写字符、数字的方式。

String Encryption 字符串加密

勾选需要加密字符串文件(exe 或 dll)

可根据各自需求可进行其他相关配置。(如:control flow,Output,Setting ->Build Settings,Settings -->Project Properties等)

最后生成混淆文件 Build Project。

Build Project 生成混淆项目错误:

Could not find a compatible version of ildasm to run on assembly C:\Users\***bin\Debug\WindowsFormsApplication1.exe.??This assembly was originally built with .NET Framework v4.0.30319.

Build Error.

处理方法:

ILASM_v4.0.30319 = C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe

ILDASM_v4.0.30319 = C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\ildasm.exe [安装VS版本不同对应目录会有所变化]

混淆代码对比

未使用混淆工具,反编译咐悄出的源码:

使用混淆工具,反编译出的源码:

效果很明显,很难看出反编译代码所写的真正逻辑。

缺点:

C#代码通过混淆工具生成后,增加了很多转换过程。这使得反编译工具无法很直观看到源码真正逻辑。但源码代码过多转换会使软件本身运行效率降低,甚至会出现报错情况。

不能.因为同一功能可由不同的语句来实现.不可能由结果推出实现过程.这与一个源运的人森嫌水平没有必要关系.如:a=a+1与a+=1等价,你说是哪一句呢?

可以反编译成汇编语言程序,专门搞破解用,比如看看注册码的生成函数,然后自己写此裂手注册码,或者说看看注册的过程,用软件引起中断,然后绕过注册程序而成功破解.

当然,现在的软件多数加了壳,需要专门的脱壳工具脱壳后才能反汇编.


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12476319.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-24
下一篇2023-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存