2 gangtang2014 gangtang2014 于 2015.07.07 16:05 提问

求教:如何能反编译C++可执行程序?

正在试图在Windows7上反编译C++可执行程序,一个exe文件。用了C-Decompiler和.NET Reflector,都不行。

8个回答

zuishikonghuan
zuishikonghuan   2015.07.07 19:09

C++不是解释性的语言,它生成程序的过程是经过了编译和连接的,已经变成了二进制语言的机器码了(简单说就是可以让CPU直接执行的0和1),只能反汇编,不能反编译,JAVA/C#之类的可以反编译,是因为没有生成真正的机器码。如果是win32反汇编可以用olldbg

Arnold9009
Arnold9009   2015.07.08 09:28

反编译成汇编比较容易,再从汇编转换成C、C++就难了,毕竟同样一段汇编代码,用c/c++可能有多种写法,并且正常的编译过程都是做过优化的

huihuipeng
huihuipeng   2015.07.08 17:24

c++ 目前是无法反编译的,只可做反汇编

wangyaninglm
wangyaninglm   Ds   Rxr 2015.07.08 17:29

反汇编,一半都是用olldbg,挺好用的,但是不好看懂

bdmh
bdmh   Ds   Rxr 2015.07.07 16:09

反编译出来都是汇编语言,估计对你也没用,NET Reflector是反编译.net框架的程序

oyljerry
oyljerry   Ds   Rxr 2015.07.07 16:14

对于C++程序,只能反汇编了,就是各种汇编代码
不过你可以用olldbg,softice等工具对exe程序进行一些逆向操作,然后看能不能得到你需要了解的一些信息
这些tool可以帮助你大概了解程序的运行过程等,以及使用的一些API等,主要使一些比较上层的提示给你

gangtang2014
gangtang2014   2015.07.07 17:37

谢谢两位大侠。反汇编是exe反编译成汇编代码吗?那汇编代码如何反编译成C++代码呢?
olldbg,softice是不是破译加密程序用的?对于获取C++代码有什么帮助吗?

zuishikonghuan
zuishikonghuan 汇编代码不能再反编译成源代码了,编译是不可逆的
大约 3 年之前 回复
huihuipeng
huihuipeng   2015.07.08 17:24

c++ 目前是无法反编译的,只可做反汇编

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
可执行程序调用dll过程的反编译
我们先来一段C++的调用dll源代码 HINSTANCE hInstance=::LoadLibraryA("D:\\project\\dll\\Release\\dll.dll"); typedef int(*fun)(); fun hun=(fun)GetProcAddress(hInstance,"hehe"); hun(); int a=GetLastError(); a++
一个C源文件到可执行文件 [反汇编-函数栈帧 编译 链接]
《Linux C 编程一站式学习》第18,19章练习。 平台:x86/Debian GNU/Linux gcc 1 C源文件代码对应的指令 计算机是由数字电路组成的运算机器,只能对数字做运算。加载到内存中运行的文件被称之为可执行文件,可执行文件中的二进制对应着C源代码的标识符和数据。由一个C源文件到可执行文件可分为两个阶段:编译和链接。对可执行文件进行反汇编可以看到C代码中的每个语句所对应的
(接上篇)反编译两种可执行文件
上篇地址:http://blog.csdn.net/eliot_shao/article/details/78648314 上篇主要内容回顾: 上篇内容介绍了静态编译生成静态库,然后链接静态库生成可执行文件的过程;也对比介绍了动态编译生成动态库然后链接动态库生成可执行文件的过程。我们也得出了结论: 链接静态库生成的可执行文件main运行不依赖与静态库是否存在,而链接动态库生成的可执行文件ma
程序防止反编译(或者说增加反编译的难度)的一些思路
1.代码混淆。 看过关于Javascript代码混淆的文章,当时没仔细看,只是知道了有这么回事。 另外,C#之类的当然也可以混淆。 2.加密程序集,调用时加载解密dll 3.设计“逻辑炸弹”,当一个进程或程序被反复跟踪,就“引爆”整个程序,使程序崩溃,进而无法被反编译。
Linux下C程序的反汇编
Linux下C程序的反汇编前言:本文主要介绍几种反汇编的方法。gccgcc的完整编译过程大致为:预处理->编译->汇编->链接前三个步骤分别对应了-E、-S、-c三个选项。今天我要介绍的第一种方法就是使用-S这个选项。源程序main.c:/************************************************************************* > F
编译与反编译GNU Linux语言文件方法
在GNU Linux系统中,很多软件都是支持多种国家的语言的,而这些语言一般都是通过一个*.po的文件而区别开来不同的国家的语言的,有的可能会编译成二进制文件*.mo,而编译成二进制文件的命令为msgfmt。 有的时候存在这样的场景,为了修改语言翻译的问题,想直接修改语言文件,那么就要使用将编译好的二进制的*.mo文件转换成*.po文件,那么使用命令msgunfmt命令即可完成这个需求,以下的例
C#写COM组件
求教求教求教求教求教求教求教
++运算符在C/C++与C#/JAVA中的差异
++ 运算符The increment operator (++) increments its operand by 1. The increment operator can appear before or after its operand 增量运算符 (++) 将操作数加 1。增量运算符可以出现在操作数之前或之后The first form is a prefix increme
android 编译C程序 在android下可执行
Android编译环境本身比较复杂,且不像普通的编译环境:只有顶层目录下才有Makefile文件,而其他的每个component都使用统一标准Android.mk. Android.mk文件本身是比较简单的,不过它并不是我们熟悉的Makefile,而是经过了Android自身编译系统的很多处理,因此要真正理清楚其中的联系还比较复杂,不过这种方式的好处在于,编写一个新的Android.mk来给And
linux下的二进制工具(反编译工具)
inux下的二进制工具(反编译工具) The GNU Binutils are a collection of binary tools. The main ones are: ld - the GNU linker. as - the GNU assembler. But they also include: addr2line - Converts a