JBuilder2006打包的PE文件

 今天想浅谈一下JB打包的程序是如何运行的。众人皆知,在windows系统上一个

程序要想运行就必须是PE格式的,我们又知道JAVA的类要想运行就必须要虚拟机

的支持,(在JRE中就是将这个作为参数传递给java.exe).这两个要求是必须同时

满足的,那么我们现在就来看看JBuilder2006中的打包功能是如何做到这点的。
 首先启动JB2006,由于我的系统只有256M的内存,所以启动那是相当的慢,趁此

机会去了趟WC,回来时它已经启动完成了,关闭上次的工程并新建工程,然后再

建三个类文件,其中一个main函数,另外两个没有,按照我最初的想法,这种组

合应该是最正常的,因为入口函数只应该有一个,首先将其打包成jar文件,然后

再:File--->New--->Build--->NativeExecutableBuilder(Missing setup

information),然后再一路OK最后ReBuilder一下就行了。此时在工程目录下会有

两个EXE文件:***.exe是命令行启动的而***W.exe是GUI启动的,但前须是这些类

是GUI的(继承于JFrame)。OK前奏已经结束,下面切入正题:
  1、PE格式
首先来看一下那个带W的可执行文件有多少,结果为110K,呵呵这应该算是比较大

的了(我是JBuilder我怕谁!),下面用PEID来扫描一下,结果又出来了:


结果是BCB1999的编译器,而且还是SFX(自解压)的 ,其实仔细想一下应该是可以

解释的,JB和这个编译同属于Borland公司的产品,该公司也生产了Delphi的IDE

环境,但它和BCB使用的却是同一套VCL的库文件,不同的只是语法而已,科普完

毕。即然它补识别为BCB那么它的VCL特性有没有被加入其中呢?
 现在打开DEDE来对它进行分析,发现是可以的,难道真的可以这样?不过在选扩

展分析和VCL函数识别时我们都失望了,它得到的可用信息数为0。再用OD加载看

看其入口代码:
004010F8 J> $ /EB 10            jmp short JavaMail.0040110A           

;  入口
004010FA      |66               db 66                                 

;  CHAR 'f'
004010FB      |62               db 62                                 

;  CHAR 'b'
004010FC      |3A               db 3A                                 

;  CHAR ':'
004010FD      |43               db 43                                 

;  CHAR 'C'
004010FE      |2B               db 2B                                 

;  CHAR '+'
004010FF      |2B               db 2B                                 

;  CHAR '+'
00401100      |48               db 48                                 

;  CHAR 'H'
00401101      |4F               db 4F                                 

;  CHAR 'O'
00401102      |4F               db 4F                                 

;  CHAR 'O'
00401103      |4B               db 4B                                 

;  CHAR 'K'
00401104      |90               nop
00401105      |E9               db E9
00401106    . |98C04100         dd offset JavaMail.___CPPdebugHook
0040110A    > /A1 8BC04100      mov eax,dword ptr ds:[41C08B]
0040110F    .  C1E0 02          shl eax,2
00401112    .  A3 8FC04100      mov dword ptr ds:[41C08F],eax
00401117    .  52               push edx
00401118    .  6A 00            push 0                                

; /pModule = NULL
0040111A    .  E8 BFA30100      call <jmp.&KERNEL32.GetModuleHandleA> 

; /GetModuleHandleA
0040111F    .  8BD0             mov edx,eax
00401121    .  E8 02B90000      call JavaMail.0040CA28

这种入口再熟悉不过了,的确是BCB程序的,到现在为止我们已经知道它只一个拥

有BCB程序PE头信息的EXE文件.
   2、虚拟机
应该还记得刚我们在新建类的时候已经做了点额外的工作,现在我们重新建立一

个工程,再建立三个类,并且每个类都有自已的main函数,单独配置都可以运行

并在其中一个类中加入对另外两个类调用的代码。再重复第一次的工作,竟然也

可以得到一个EXE文件,运行可以,它会首先启动那个对其它产生调用的类。
现在打开FileMon对它的执行进行临视,就会了现一些有用的信息,它会在:
C:/Documents and Settings/thinkSJ/Local Settings/Temp
这个临时目录中放出JEn**.tmp那个**的地方是数字,它并不会在执行完时将这个

文件删除,重启时再放出同样的文件,而是不删除文件文件名中的数字部分每次

都加1,这个文件中的内容是什么呢?打开它,就会了现只有一行话:
mainclass javamail.FrameMain,看来它就是靠这句话得到正确的执行顺序的,

而向文件中写入什么就应该是JBuilder的事了,果然是神奇的JBuilder。另外程

序的执行在依赖JRE而不是JBuilder的环境,如果JDK没有安装,即使装有JBuilde

r也是无法运行的,它会搜索环境变量path,得到JDK的安装目录,然后启动虚拟机

,传递参数,就OK了。
让我感到奇怪的一件事是,它为什么会识别为SFX型的文件,而事实证明它的确可

以用WinRar之类软件解压缩,它释放出来的文件与JAR中的文件是相同的,奇怪啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值