首页
社区
课程
招聘
[原创]一个基于x86的C/C++语言反编译c-decompiler
发表于: 2009-10-2 04:42 135417

[原创]一个基于x86的C/C++语言反编译c-decompiler

2009-10-2 04:42
135417
收藏
免费 7
支持
分享
最新回复 (220)
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
51
這是一套 Decompiler, source code 為 C.
我轉載自 http://www.debugmode.com/dcompile/disc_dos.zip
kawar 大大基於某種理由無法公開它的源碼,所以希望透過這些文件能提升整體 information ability.

    ---------------------------
     DisC Decompilation Wizard
    ---------------------------

  You have downloaded the source for DisC Decompilation Wizard. This
archive contains the following files

        sample1.c
        sample2.c
        sample3.c
        sample4.c
        dv.cpp
        exe2sym.cpp
        udtypes.cpp
        tcwiz0.cpp
        variable.cpp
        tcwiz2.cpp
        tcwiz1.cpp
        strlist.cpp
        program.cpp
        mystring.cpp
        libwiz.cpp
        instinfo.cpp
        disc.cpp
        disasm.cpp
        beautify.cpp
        wizard.h
        variable.h
        udtypes.h
        tcwizard.h
        strlist.h
        program.h
        mystring.h
        libwiz.h
        instinfo.h
        global.h
        disc.h
        disasm.h
        beautify.h

  To build the executable, just open a new project in Borland C++ (or
Turbo C++) for DOS and add the source files (*.cpp and *.h). Then choose
Project->Build.

  Make sure you also have the TurboC version 2.01 compiler from Borland.
If you do not have this, please look at the Downloads section in the
DisC webpage at http://www.crosswinds.net/~sskr/dcompile/disc.htm.

  Before you execute DisC, compile the file "prepdisc.c" (available in
this archive itself) using TurboC and have the executable "prepdisc.exe"
in the same directory as the DisC executable.

  You can also copy the standard C libraries of TurboC (cs.lib) to the
DisC directory, so that DisC will do an automatic search for library
functions in the input executable file.

Command line
-------------
  The command line syntax is...

    disc <input_program.exe>

  The output is written to the file "_DISC.C" always.

Sample C programs
------------------
  Four sample C programs named "sample1.c".."sample4.c" are also included.
Compile each of them using TurboC and get the executables. These can then
be given to DisC for decompilation, and you can check the output.
上传的附件:
2009-10-8 23:31
0
雪    币: 303
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
感谢rockinuk的理解和支持
2009-10-8 23:33
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
强人就是多啊,服了
2009-10-9 10:00
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
可谓神器啊,希望尽早看到BETA
2009-10-9 10:50
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
55
支持原创, 支持楼主的努力和热诚
2009-10-9 11:02
0
雪    币: 303
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
这是我所能找到的一些资料,有这方面其他资料的朋友也提供提供。大家一起研究研究

上面的资料,有兴趣的朋友看看,一起讨论讨论。
2009-10-9 11:14
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
57
反编译整个程序意义不大
能做成ida插件代替hexray更实用一些
2009-10-9 11:29
0
雪    币: 303
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
当前版本,hexray对着汇编看,能发挥其作用,除此之外,意义不是很大。

反编译整个程序可以从大的方面来分析其架构,程序流程,以及漏洞分析,逻辑分析。。。
具体到细小的某段代码,直接看汇编就可以了,无需反编译。
源码之前,了无秘密。
关键是看这反编译能做到什么程度,目标是反编译出来的代码无需大修改就可以直接编译链接,然后就可以debug跟踪调试了。呵呵,到时候就是共产主义社会了

该反编译器的目的是能自动化程度较高地产生可重新编译的代码,中间可能会内嵌汇编,或者手工反编译。

复杂数据类型识别,C++反编译都是难点。
2009-10-9 11:51
0
雪    币: 23
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
59
2009-10-9 12:00
0
雪    币: 1185
活跃值: (2041)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
60
有了这个,大家就不用研究逆向了,
2009-10-9 12:26
0
雪    币: 303
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
这倒不是,反编译器对那些加壳加密,花指令等等无法处理。很容易被欺骗过去。
以后应该是先脱壳,解密,去除花指令等等,
接着才能开始反编译
2009-10-9 12:36
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
62
用这个东西去实现共产主义太理想化了
可以先做个自残版本,把自己反编译成共产主义状态
2009-10-9 13:06
0
雪    币: 303
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
还没有能力自残。。。
该演示版本用的是一个多月前的代码,在最新的代码上,我用XP自带的记事本程序Notepad.exe试了一下。效果还是可以的。只是C++的反编译还没做完,STL的识别也没有做,产生的代码跟hexray好不到哪来去。
2009-10-9 13:17
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
64
聽說 ccfer 比賽又奪得第一名~真是太利害了~
請問哪時要開班授課!?

言歸正傳~
我記得 有一套軟件可以將 *.asm 轉成 *.c
很多deassembler 可以將 exe 轉成 asm
所以~只要那兩套軟件~就能完成很多工作~
2009-10-9 13:20
0
雪    币: 303
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
x86的反汇编技术已成熟,反汇编器有很多的。
但有asm->c的软件吗? 我一直没找到。
2009-10-9 13:24
0
雪    币: 1227
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
对于C代码编译的二进制而言,asm2c还有点价值,对于C++编译的二进制代码而言太多的难题不好解决,做一个通用的dec很困难。

大家可以参考一下boomerang。

姑且认为hex-rays这样的方式才是正道,没有必要非要bin->c,重新实现的成本划不来,对用户而言也没这个必要。
2009-10-9 13:37
0
雪    币: 303
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
67
从反编译角度来看,bin2c or asm2c其实都是一样的,都需要将asm或者bin转成IR(中间表示),由于反汇编技术已成熟,扫描Bin或者扫描asm都是一样的开销代价。
dcc的实现是直接将Bin转成IR,需要生成asm时,从IR生成asm

boomerang用了很多算法,也有相应的论文支撑。跟踪其代码调试,发现其对自带的测试例子都无法很好支持。不知大家试过没有? 我反正下载其release出来的版本,做了下验证,例子过不了

C++的反编译是个难题啊!有本《逆向C++.PDF》讲了一些。主要是根据编译器的特性来做出判断。确实能识别类,类之间的关系,对RTTI更是作用明显!
但对STL就无能为力了。。。。。。

有种很笨的方法:
模板具体化后,会生成不同的函数。根据这些函数的共同特征,还原出其模板?
或者干脆不还原模板,呵呵。
2009-10-9 14:06
0
雪    币: 1227
活跃值: (106)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
68
>但有asm->c的软件吗? 我一直没找到。
说boomerang就是这样的软件,自然还有很多bug,作者已经停止开发了。应该还是有很多值得借鉴的,从开发时间和代码规模上来看,成熟度可能比你这个还高些。

>发现其对自带的测试例子都无法很好支持
最新的版本没试过,早期的一个版本试用过ms还可以。当然能处理的也都是些小程序。

所以说,我不认为这种直接转C的方法是工程上节约的方法,而基于IDA的hex-rays才是正确的做法。所以要和hex-rays对抗任重道远。

C++反编译在某些情况下(如存在RTTI)会有不错的效果,但不能在通用地解决间接调用-模板-类继承问题。至少在目前来还看不到解决的希望。

编译好的二进制反编译这种东西,属于投入和产出不成正比的项目,所以建议如果是为了兴趣,请继续。如果是为了赚钱,趁早换项目。
2009-10-9 15:46
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
69
呵呵,支持。下来试了一下,蛮不错~~
2009-10-9 16:22
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
我是来膜拜高人的!
2009-10-9 17:07
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
71
我依稀記得大約在 16~18 年前,也就是 1991~1993 年左右。
我使用過一套軟件,叫 Sourcer ,至於是幾版,我倒忘了。
Sourcer 是一套 Deassembler 軟件,它有 com2asm, 也有 exe2asm, 這其中還會產生 lst 及 xrf file foramt.
它當然還有 support real mode 及 protection mode.
聽說現在不少人都用 Olly Debug 及 IDA 等很多 utilities.
我個人認為,想接觸 Reverse Engineering 的朋友,不妨也去 run run Soucer 那套軟件。
2009-10-9 19:26
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
72
我硬盘还有这个
上传的附件:
2009-10-9 20:11
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
73
接觸 Sourcer ,有助於 Programming Language, System Program 及 Reverse Engineer 這方面的知識與實作能力。
上传的附件:
2009-10-9 20:35
0
雪    币: 303
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
74
rockinuk您贵庚啊?16~18年前俺都不知道在干啥呢。
向老一辈程序员致敬!
2009-10-9 20:51
0
雪    币: 303
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
75
ccfer大牛果然牛啊。工具这么齐全。
2009-10-9 20:53
0
游客
登录 | 注册 方可回帖
返回
//