• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

Visual Basic 6 逆向工程与反逆向工程 (1)

发布: 2007-7-01 21:48 | 作者: admin | 来源: | 查看: 12次 | 进入软件测试论坛讨论

领测软件测试网

Visual Basic 6 逆向工程与反逆向工程 (1)

作者  小楼

版权声明:本文作者拥有对此文章的所有版权,转载、翻译等都必须得到本人的书面同意。


简介

    自从微软公司推出VISUAL BASIC 5/6版本以来,摆脱了前版程序只是单纯调用vbrun*.dll的方式;在继续保留P-code编译同时也引入了native编译方式,使得生成本地二进制代码成为可能。
    以下将介绍目前对VB6的反编译研究情况;也将演示如何保护你的VB6程序。(因为VB6逆向工程资料的缺乏,我仅将在目前能得到的资料基础上结合个人研究所得进行演述)。关于vb.net,也就是所谓的“VB7”,其生成的exe程序完全可用.net反编译工具完成,此处不再介绍。


P-code传奇

      编译器的编译技术可以分为native-compile(自然编译)与pcode-compile(伪编译)两种。
      自然编译是编译器将高级语言转换为汇编代码,并经链接生成EXE程序的过程。
      伪编译是编译器将高级语言转换为某种编码后,将能解释、执行此编码的一段程序一同链接,生成EXE程序。
       伪代码p-code,最早应该叫做Pascal-Code,其名称起源于一个pascal编译器使用的“中间代码”编译技术。现在一般作为pseudo-code(伪代码),或packed-code(压缩代码)简称。
    此项编译技术的出现,最终导致了“虚拟机”的出现。而微软在其编程工具basic、c、vb中都使用了类似的编译技术。
        所谓伪代码,其基本工作原理是编译器先把执行程序编译为比80X86机器码紧凑得多的中间代码形式,然后在链接时把一个小工作引擎嵌入执行程序中,最后在运行时由此工作引擎把P-Code解释为本地机器码实际执行,所以叫做packed-code;同时又由于此代码并不是最终的机器码形式,实际上是“变形的源代码”,所以也被称为pseudo-code。依靠P-code编译技术,使得编程语言不依赖于机器或照作平台称为可能。
        目前实现伪代码编码方式的最流行方法是在特定硬件系统(比如x86,Mac)上,用基于“堆栈stack”的字节码编码实现。

        虽然目前伪代码编译形式大多见于vb,但java,powerbuilder的编译实质也是一样;最新的microsoft visual studio.net中,只是将名称换成“中间语言(Microsoft Intermediate Language)”。(不管怎么解释我还是不能理解IL与p-code的不同。(参考《Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg》))。

      因为vb3、4都是使用伪代码编译形式;也因为伪代码编译的代码实际只是“变形的源代码”,所以只要我们能理解其对应机制,就能做出反编译器来,所以Dodi´s vb3/4 disassembler来了。同样,java反编译器来了,对付最新microsoft .net的反编译程序也可以被得到。
    为什么见不到vb5/6 伪代码反编译器,现在已经有了几个“半个”,就是exdec及建立在其基础上的wkt vb p-code debugger,还有VBDE;2001年有人写出一个vb6 add-in来实现vb6源代码-> P-code转换。

注:本文的写作引用了很多书及网上资料,在本系列文章的最后将详细注明所参考的文章、书籍的名字及出处


延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网