public static int myReadFileInt(int off,RandomAccessFile raf){ int ret=0; try { for(int i=0;i<4;i++){ raf.seek(off+i); int tmp = raf.readUnsignedByte()<<(i*8); ret+=tmp; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ret; } public static int myReadFileShort(int off,RandomAccessFile raf){ int ret=0; try { for(int i=0;i<2;i++){ raf.seek(off+i); int tmp = raf.readUnsignedByte()<<(i*8); ret+=tmp; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ret; } public static boolean fileIsExe(String fpath){ boolean bret = false; try { RandomAccessFile raf = new RandomAccessFile(fpath,"r"); int offDosHeader=0; int offCommon=0; int offFileHeader=0; int offOptHeader=0; raf.seek(offDosHeader); byte[] mz = new byte[2]; raf.read(mz, 0, 2); if((char)mz[0]!='M' && (char)mz[1]!='Z'){ raf.close(); //非PE return false; } offCommon = myReadFileInt(60, raf); offFileHeader = offCommon+4; offOptHeader = offCommon+24; int pe = myReadFileInt(offCommon, raf); if(pe!=0x00004550){ raf.close(); //非PE return false; } int Characteristics = myReadFileShort(offFileHeader+18, raf); if((Characteristics & 0x0002)==0){ raf.close(); //非PE return false; } int Machine = myReadFileShort(offFileHeader, raf); if(Machine!=0x14c){ raf.close(); //64位 return false; } int Subsystem = myReadFileShort(offOptHeader+68, raf); if(Subsystem==1){ raf.close(); //sys文件 return false; } int MajorSubsystemVersion = myReadFileShort(offOptHeader+48, raf); int MinorSubsystemVersion = myReadFileShort(offOptHeader+50, raf); if(MajorSubsystemVersion > 5 || (MajorSubsystemVersion == 5 && MinorSubsystemVersion > 1)){ raf.close(); //子系统版本过高 return false; } if(Subsystem==2 || Subsystem == 3){ if((Characteristics&0x2000)>1){ raf.close(); //dll return false; } else { //exe bret = true; } } raf.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); return false; } return bret; } public static int bytestoint(byte[] b,int off,int cnt){ int ret=0; for(int i=0;i<cnt;i++){ ret += (b[off+i]&0xff)<<(i*8); } return ret; } public static boolean fileIsExe(InputStream ism){ try { byte[] dosheader = new byte[64]; ism.read(dosheader,0,64); if(bytestoint(dosheader,0,2) != 0x5a4d){ return false; //不是MZ头 } int offcomheader = bytestoint(dosheader,60,4); byte[] tmp = new byte[offcomheader-64+24+70]; ism.read(tmp,0,offcomheader-64+24+70); offcomheader = offcomheader-64; int offfileheader = offcomheader+4; int offoptheader = offcomheader+24; if(bytestoint(tmp,offcomheader,4) != 0x00004550){ return false; //签名不是PE } int Characteristics = bytestoint(tmp,offfileheader+18,2); if((Characteristics&0x0002)==0){ return false; //非PE } if(bytestoint(tmp,offfileheader,2) != 0x014C){ return false; //64位 } int Subsystem = bytestoint(tmp,offoptheader+68,2); if(Subsystem == 1){ return false; //sys驱动 } int MajorSubsystemVersion = bytestoint(tmp,offoptheader+48,2); int MinorSubsystemVersion = bytestoint(tmp,offoptheader+50,2); if(MajorSubsystemVersion > 5 || (MajorSubsystemVersion == 5 && MinorSubsystemVersion > 1)){ //子系统版本过高 return false; } if(Subsystem==2 || Subsystem == 3){ if((Characteristics&0x2000)>1){ //是dll return false; } else { //exe return true; } } } catch (IOException e) { log.error("fileIsExe is error :"+e.getMessage()); } return false; }
相关推荐
而.exe文件是编译后的机器码,可以直接由操作系统执行。因此,将Java转换为.exe的过程实际上是创建一个封装了JVM和Java字节码的外壳程序。 总结,通过适当的工具和配置,我们可以将Java应用程序转化为.exe文件,...
在上面的代码中,我们首先判断 `Desktop` 是否支持当前平台,然后获取 `Desktop` 对象,最后使用 `open` 方法打开注册表编辑器。 使用 `Runtime` 类调用其他.exe 可执行程序 `Runtime` 类是 Java 的一个核心类,...
描述中提到的“清除EXE病毒文件的代码”,意味着这个Java程序设计用于扫描、检测并可能消除在EXE文件中发现的恶意软件。EXE病毒通常会自我复制并附着到其他可执行文件上,影响系统运行,甚至可能导致数据丢失或系统...
在IT行业中,将Java应用程序打包成可执行的.exe文件对于非Java环境的用户来说非常方便。这个主题涉及到了Java编程、图形用户界面(GUI)设计、编译与打包技术,以及可能的跨平台兼容性问题。以下是关于"五子棋 Java ...
exe4j是一个流行的工具,它允许Java开发者将Java应用打包成Windows原生的.exe文件,以便非开发人员也能方便地运行。 【标签】"java 贪吃蛇" 指出这个项目的核心技术是Java语言,而游戏的主题是经典的“贪吃蛇”。...
Java实现MD5大文件校验码详细解析: 包括具体方法解释、注释 通俗易懂、易于理解
7. **EXE文件**:在Windows操作系统中,`.exe`文件是可执行文件的扩展名,意味着这个Java日历程序已经被编译并打包成可以在Windows上直接运行的二进制文件,无需安装Java环境。 8. **学习与实践**:对于学习Java...
在这个项目中,开发者使用Java语言构建了一个完整的可执行程序,包括一个jar文件(Java Archive)和一个exe文件(Windows可执行文件)。 首先,`Tetris.jar`是一个Java应用的打包文件,它包含了所有运行该程序所需...
本资源主要关注如何判断一个文本文件是否采用UTF-8编码。 在Windows系统中,比如Windows 7旗舰版,我们经常使用Notepad.exe(记事本)来查看和编辑文本文件。在编程环境中,有时候我们需要编写代码来检查文件的编码...
文件类型判断1.0.exe 用vb编写的判断未知文件类型的软件。可以用于恢复数据,如硬盘扫描生成的*.chk文件。可以用于识别google浏览器临时文件夹下的没有文件后缀名的文件,还可以用于更正某些网站为了不让大家看的...
本主题中提到的两个Java文件,RarDecode.java和RarEncode.java,很可能是实现了这些功能的Java代码。 对于文件的压缩,WinRAR命令行工具可以通过指定参数实现。例如,`rar a -m5 -p[密码] [压缩文件名] [源文件或...
在提供的压缩包文件中,“如何判断文件类型.pdf”和“Java判断文件类型.pdf”很可能是关于这两个主题的详细教程,可以帮助用户深入了解如何进行文件类型的识别。而“triddefs_xml.rar”可能包含TrIDNet的识别规则库...
在Windows系统中,用户通常更习惯于执行.exe文件,而不是通过命令行运行Java程序。为了满足这一需求,开发者可能使用了像JAR2EXE这样的工具,将编译后的Java应用打包成.exe格式,这样非开发人员也能直接双击运行,...
"Java判断题解析.pdf" Java语言具有较好的安全性、可移植性及与平台无关等特性。Java是编译型和解释型语言的结合体,具有高安全性和跨平台的特点。Java语言的安全性体现在于其沙箱机制和内存管理机制,保护用户免受...
本资源摘要信息对Java判断题.pdf文件进行了详细的知识点解析,涵盖了Java语言的基本特性、安全性、可移植性、平台无关性、基本数据类型、运算符、变量初始化、强制类型转换、对象赋值、垃圾回收、抽象方法、接口继承...
### Java 判断题知识点解析 #### 1. Java 核心源码包位置 - **题目**: Java 核心源码包存放在 JDK 安装目录的 bin 目录下。 - **答案**: 错误 - **解析**: 实际上,Java 的核心源码包(`src.zip` 文件)位于 JDK ...
3. **Java的编译与解释**:Java源代码(.java文件)先由Java编译器(javac.exe)编译成字节码,然后在JVM中解释执行。同时,现代JVM如HotSpot也采用即时编译(JIT)技术,将频繁执行的代码编译为本地机器码,提高...
### Java 判断题知识点解析 #### 第一章 Java 概述 1. **Java 语言具有良好的安全性与可移植性及平台无关性** 正确。Java 设计之初就考虑到了跨平台的需求,通过Java虚拟机(JVM)实现了“一次编写,到处运行”...
Java语言入门是一个针对初学者的...在提供的压缩包中,"readme.txt"可能包含了学习指南或注意事项,而"java"可能是源代码文件或教程资料。通过这些资源,初学者可以逐步学习和实践Java编程,逐步迈入编程世界的大门。
MyEclipse和Struts是Java开发环境和框架,它们与LL(1)判别和语法树的直接关系可能不大,但在实际编程项目中,理解文法和解析技术有助于编写更高效、更健壮的代码,特别是当你需要处理用户输入或自定义配置文件时。...