Java安全编程笔记【1】------基本工具简介。

1.1 J2SE 的主要工具

基本工具:
javac    Java 编程语言的编译器。本书各章的程序都是在 DOS 窗口中通过执行 "javac 文件名来编译 Java 程序的。文件名必须以 .java 为后缀,编译以后生成 .class 为后缀的字节码文件。
java 用于执行 Java 应用程序。本书各章的程序大都通过在 DOS 窗口输入 “java 字节码文件名称来运行 javac 编译好的程序。输入命令时,字节码文件名称的后缀不输入。
javadoc 用于生成 API 文档。在编写程序时将注释语句写在 “/**” “*/” 之间,则其内容便可被 javadoc 识别,执行 “javadoc *.java” ,自动生成 API 文档。
appletviewer 没有 Web 浏览器时可用来运行和调试 Java Applet 程序。
jar 管理 jar 文件。本书多次使用该工具将 Java 程序打包成为一个文件,并进而进行进一步的处理。
jdb Java 调试器
javah C 头文件和存根的生成器,用于编写本地文件。
javap 类分解器。可显示字节码文件的包、标记为 public protected 的变量和方法等信息。

extcheck 检测 jar 文件的版本冲突
RMI 工具:
rmic 生成远程对象的架构和存根。执行后可根据给定的字节码文件 XX.class 可生成 XX__Stub.class XX_Skel.class 文件部署在 RMI 系统中。
rmiregistry 提供远程对象的注册服务。 RMI 客户程序可通过该服务找到远程对象。
rmid 启动激活系统后台程序。
serialver 返回类的 serialVersionUID
国际化工具:
native2ascii 将本地编码的文本转换为 Unicode 编码

安全工具
keytool 管理密钥库和证书。本书自第 5 章起大量使用该工具。
Jarsigner jar 文件进行签名,并验证 jar 文件的签名。
policytool 管理策略文件的图形界面工具。
Java IDL and RMI-IIOP 工具
tnameserv 提供访问名字服务
idlj 根据给定的 IDL 文件生成 Java 绑定,使 Java 程序可以使用 CORBA 功能
orbd CORBA 环境中使客户透明地定位和执行服务器上 persistent 对象
servertool 应用程序编写者注册、取消注册、启动、关闭 persistent 服务器的命令行工具。

Java Plug-in 工具:
unregbean 用于取消 Java Bean 组件的注册
HtmlConverter 修改调用 Applet HTML 网页,将其中的 <applet> 标记按照一定格式转
换为 <Object> 标记,以便让浏览器使用 Java Plug-in 运行 Java Applet 程序。
1.2 反编译器的安装

Jad Java 著名的反编译器,下载地址: http://www.varaneckas.com/jad

下载后将其放到 java/bin 的目录下,即可使用了。

1 ) 最简单的用法

JAD 的最简单用法是直接输入“ Jad 字节码文件名称”,如

Jad example.class

Jad example

则将 example.class 反编译,反编译得到的源代码保存为 example.jad 。如果 example.jad 已经

存在,会提示是否覆盖。使用命令选项 -o 可跳过提示。

2 ) 使用通配符

JAD 支持通配符,如可输入:

Jad *.class

则将当前目录所有字节码文件进行反编译。

3 ) 指定输出形式

如果希望反编译结果以 .java 为后缀,可输入

jad -sjava example.class

但此时要注意不要覆盖了原有的源代码,尤其加上 -o 选项后,覆盖原有文件不会出现提示,

更应小心。类似地,可以指定任意后缀。

使用 -p 选项可以将反编译结果输出到屏幕,如

jad –p example.class

进一步可将其重定向到任意文件名,如

jad –p example.class >my.java

使用“ -d 目录名”选项可指定反编译后的输出文件的目录,若没有目录会自动创建。

jad -o -dtest -sjava *.class

jad -o -d test -s java *.class

将当前目录所有字节码文件反编译到 test 目录。

4 ) 设置输出内容

使用 -a 选项则可以使用 JVM 字节码注释输出结果。使用 -stat 选项可以最后统计类、方法、成员变量等的数量。

<!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} @font-face {font-family:楷体_GB2312; mso-font-alt:微软雅黑; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:幼圆; mso-font-alt:微软雅黑; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 680460288 22 0 262145 0;} @font-face {font-family:"/@幼圆"; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} @font-face {font-family:"/@楷体_GB2312"; mso-font-charset:134; mso-generic-font-family:modern; mso-font-pitch:fixed; mso-font-signature:1 135135232 16 0 262144 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} h2 {mso-style-next:Normal; margin-top:24.0pt; margin-right:0in; margin-bottom:24.0pt; margin-left:0in; text-align:justify; text-justify:inter-ideograph; text-indent:21.0pt; mso-line-height-alt:15.7pt; mso-pagination:lines-together; page-break-after:avoid; mso-outline-level:2; mso-layout-grid-align:none; font-size:18.0pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:幼圆; mso-bidi-font-weight:normal;} p.MsoBodyTextIndent, li.MsoBodyTextIndent, div.MsoBodyTextIndent {margin-top:0in; margin-right:0in; margin-bottom:0in; margin-left:42.0pt; margin-bottom:.0001pt; mso-para-margin-top:0in; mso-para-margin-right:0in; mso-para-margin-bottom:0in; mso-para-margin-left:4.0gd; mso-para-margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:10.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} -->

1.3 混淆器的安装

本书使用的混淆器为 Marvin Obfuscator 1.2b ,可在 http://www.drjava.de/obfuscator/下载,将其直接解压缩到某个目录即可。

该混淆器使用 Java开发,提供了一个 jar文件。为了便于运行程序, Marvin Obfuscator 1.2b提供了一个批处理文件 obfuscate.bat。其内容如下:

@echo off

set JAVALIB=c:/java/jdk1.3/jre/lib/rt.jar

java -cp marvinobfuscator.jar;%JAVALIB% drjava.marvin.Obfuscate %1 %2 %3 %4 %5 %6 %7 %8 %9

该批处理针对的是 JDK1.3,对于本书的环境需要将 JAVALIB环境变量作些修改,将新增的类库加入 JAVALIB,如可改为:

set JAVALIB=C:/j2sdk1.4.0/jre/lib/rt.jar;C:/j2sdk1.4.0/jre/lib/jce.jar

混淆器使用时的配置放在 marvinobfuscator1_2b安装目录的 dummyproject子目录下的 config.txt文件中。需要混淆的类要先用 jar打包,如打包为 My.jar,然后需要将 config.txt开头几行的 "somelibrary.jar"改为需要进行混淆操作的打包文件名称“ My.jar”。此外,需要将 config.txt中“ mainClasses=(("myapp.Main"))”改为 My.jar文件中包含 main( )方法的字节码文件,如改为“ mainClasses=(("xx.class"))”。然后将该 config.txt文件保存在 My.jar所在目录中。

以后就可以执行

obfuscate    目标目录    混淆以后的文件名

进行混淆操作了。

                                             欢迎交流哈…………


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值