??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一级大片,日韩av毛片,亚洲小说区图片http://www.aygfsteel.com/drjc/zh-cnWed, 18 Jun 2025 11:22:54 GMTWed, 18 Jun 2025 11:22:54 GMT60Java反编译的研究http://www.aygfsteel.com/drjc/archive/2005/12/09/23214.html(^_^)杨嘉(^_^)杨嘉Fri, 09 Dec 2005 12:12:00 GMThttp://www.aygfsteel.com/drjc/archive/2005/12/09/23214.htmlhttp://www.aygfsteel.com/drjc/comments/23214.htmlhttp://www.aygfsteel.com/drjc/archive/2005/12/09/23214.html#Feedback0http://www.aygfsteel.com/drjc/comments/commentRss/23214.htmlhttp://www.aygfsteel.com/drjc/services/trackbacks/23214.html一?h?/P>

  目前Q开发h员用的比较多的保护代码的方法是用؜淆器。؜淆器是采用一些方法将c,变量Q方法,包的名字改ؓ无意义的字符Ԍ使用非法的字W代替符P贴加一些代码反编译Y件崩溃;贴加一些无关的指o或永q执行不到的指o{反编译无法成功或所得的代码可读性很差。这样就实现了反反编译的目的。我们来做个演示。原始代码如下:

 

import java.io.*;

import java.security.*;

public class sKey_kb{

public static void main(String args[]) throws Exception{

FileInputStream f=new FileInputStream("key1.dat");

ObjectInputStream b=new ObjectInputStream(f);

Key k=(Key)b.readObject();

byte[] kb=k.getEncoded();

FileOutputStream f2=new FileOutputStream("keykb1.dat");

f2.write(kb);

for(int i=0;i
System.out.print(kb[i]+",");

} } }

 

  使用h器后Q再用jad反编译得代码如下Q?

import java.io.*;

import java.security.Key;

public class sKey_kb{

public skey() {}

public static void main(String args[]) {

FileInputStream fileinputstream=new FileInputStream(ma);

ObjectInputStream objectinputstream=new ObjectInputStream(fileinputstream);

Key key=(Key)b.readObject();

byte abyte0[]=key.getEncoded();

FileOutputStream fileoutputstream=new FileOutputStream(na);

fileoutputstream.write(abyte0);

for(int i=0;i
System.out.print(abyte0[i]+oa);

}

private static String a(String s){

int i=s.length();

char ac[]=new char[i];

for(int j=0;j
return new String(ac);

}

private static String ma="u5AA1u5AAFu5AF3u5AFBu5AE4u5AAEu5AABu5ABE";

private static String na="u5AA1u5AAFu5AB3u5AA1u5AA8u5AFBu5AE4u5AAEu5AABu5ABE";

private static String oa="u5AE6";

public static{

ma=a(ma);

na=a(ma)

oa=a(oa);

} }


 h后,再反~译所仍然能得到源代码Q但昄Q所得代码与原始代码比,变得难以LQ代码中多了其他的方法,文g名等信息也被打ؕ了。ƈ且,把以上代码写qsKey_kb.java中,无法通过~译?

  但是Q如果在~写软gӞ在Y件中写入某些注册信息Q或一些简单的法Q通过反编译,q是有可能得到这些信息的Q从而未能达C护Y件的目的。反~译器与h器之间的斗争是永无止的。所以从其他角度M护java的源代码是很有必要?


二?|络加蝲重要c?/P>

  在java中提供了一个ClassLoaderc,q个cd以让我们使用cd载器所需要的java字节码文件加载到jvm中。我们通过重写q个c,可以实现从网l通过url加蝲java字节码文件。这P我们可以把一些重要的Q隐U的class攑֜|络服务器上Q通过口oL验是否有权限下蝲该类。从而实现java代码保护的目的。其ơ在java中正好提供了URLClassLoaderq个c,通过此类Q正好可以实现我们的目的。URLClassLoadercȝ基本使用Ҏ(gu)是通过一个URLcd的数l告诉URLClassLoadercȝ对象是从什么地方加载类Q然后用loadclass()Ҏ(gu),从给定的URL中加载字节码文gQ获得它的方法,然后再执行?

  具体步骤如下Q?

  1.创徏URL

URL url[]={

new URL("file:///c:/classloader/web"),

new URL("

};

 

  2.创徏URLClassLoader对象

URLClassLoader cl=new URLClassLoader(url);

 

  3.使用URLClassLoader对象加蝲字节码文?

Class class=cl.loadClass("class1");

 

  4.执行静态方?

Class getarg[]={

(new String [1]).getClass() };

Method m=class.getMethod("main",getarg);

String[] myl={"arg1 passed","arg2 passed");

Object myarg[]={myl};

m.invole(null,myarg);

 


三?加密重要c?/P>

  使用|络加蝲重要cȝҎ(gu)固然有一定的用处Q但是,在遇到无|络的情冉|Q还是无法解x们的问题。对于这U情况,我们只能把所有文件放在本地计机上。那么,Ҏ(gu)我们该怎么做才能保护好java代码呢?

  其实Q要实现q一点,q不难,只需要对一些重要的cd行加密就可以了。当Ӟ在装载时Q加密的cL需要解密才能被ClassLoader识别的。所以,我们必须自己创徏ClassLoadercR在标准java api中ClassLoader有几个重要的Ҏ(gu)。创建定制ClassLoaderӞ我们只需覆盖其中的一个,即loadClassQ添加获取原始类文g数据的代码。这个方法有两个参数Q类的名字,以及一个表CJVM是否要求解析cd字的标记Q即是否同时装入有依赖关pȝc)。如果这个标CؓtrueQ我们只需在返回JVM之前调用resolveClass?/P>

 原代码如下:

public Class loadClass( String name, boolean resolve )

throws ClassNotFoundException {

try {

Class clasz = null;

//步骤1Q如果类已经在系l缓冲之中,我们׃需要再ơ装入它

clasz = findLoadedClass( name );

if (clasz != null)

return clasz;

byte classData[] = /* 通过某种Ҏ(gu)获取字节码数?*/;

if (classData != null) {

clasz = defineClass( name, classData, 0, classData.length );

}

//步骤2Q如果上面没有成功,

if (clasz == null)

clasz = findSystemClass( name );

//步骤3Q如有必要,则装入相关的c?

if (resolve && clasz != null)

resolveClass( clasz );

return clasz;

} catch( IOException ie ) {

throw new ClassNotFoundException( ie.toString() );

} catch( GeneralSecurityException gse ) {

throw new ClassNotFoundException( gse.toString() );

} }

 

  代码中的大部分对所有ClassLoader对象来说都一P但有一部分是Ҏ(gu)的。在处理q程中,ClassLoader对象要用到其他几个辅助方法:findLoadedClassQ用来进行检查,以便认被请求的cd前是否存?loadClassҎ(gu)应该首先调用它。defineClassQ获得原始类文g字节码数据之后,调用defineClass把它转换成对?MloadClass实现都必调用这个方法。findSystemClassQ提供默认ClassLoader的支持。如果用来寻扄的定制方法不能找到指定的c,则可以调用该Ҏ(gu)试默认的装入方式。resolveClassQ当JVM惌装入的不仅包括指定的c,而且q包括该cd用的所有其他类Ӟ它会把loadClass的resolve参数讄成true。这Ӟ我们必须在返回刚刚装入的Class对象l调用者之前调用resolveClass?

  接下来就是加密解密部分。Java加密扩展即Java Cryptography ExtensionQ简UJCEQ是Sun的加密服务YӞ包含了加密和密匙生成功能。我们可以用DES法加密和解密字节码。用JCE加密和解密数据是要遵循一些基本步骤的(可以参?lt;>,q里׃述??/P>

  加密完成?是通过解密来获取原始类的java字节码。可以通过一个DecryptStartE序q行l过加密的应用?

  具体Ҏ(gu)如下:

public class DecryptStart extends ClassLoader

{

private SecretKey key;

private Cipher cipher;

public DecryptStart( SecretKey key ) throws GeneralSecurityException,IOException {

this.key = key;

String algorithm = "DES";

SecureRandom sr = new SecureRandom();

System.err.println( "[DecryptStart: creating cipher]" );

cipher = Cipher.getInstance( algorithm );

cipher.init( Cipher.DECRYPT_MODE, key, sr );

}

// mainq程Q我们要在这里读入密匙,创徏DecryptStart?

static public void main( String args[] ) throws Exception {

String keyFilename = args[0];

String appName = args[1];

String realArgs[] = new String[args.length-2];

System.arraycopy( args, 2, realArgs, 0, args.length-2 );

System.err.println( "[DecryptStart: reading key]" );

byte rawKey[] = Util.readFile( keyFilename );

DESKeySpec dks = new DESKeySpec( rawKey );

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( "DES" );

SecretKey key = keyFactory.generateSecret( dks );

DecryptStart dr = new DecryptStart( key );

System.err.println( "[DecryptStart: loading "+appName+"]" );

Class clasz = dr.loadClass( appName );

String proto[] = new String[1];

Class mainArgs[] = { (new String[1]).getClass() };

Method main = clasz.getMethod( "main", mainArgs );

Object argsArray[] = { realArgs };

System.err.println( "[DecryptStart: running "+appName+".main()]" );

main.invoke( null, argsArray );

}

 

  虽然应用本nl过了加密,但启动程序DecryptStart没有加密。攻击者可以反~译启动E序q修改它Q把解密后的cL件保存到盘。降低这U风险的办法之一是对启动E序q行高质量的模糊处理。或者,启动E序也可以采用直接编译成机器语言的代码,使得启动E序h传统执行文g格式的安全?比如使用java的jini技术,来实现解密部分,可以作到。当Ӟq是需要付Z定的代h(hun)的,是丧失了java的最大特?-q_无关性。不q,jni技术可以用c语言在多U^台实玎ͼ我们可以在不同的q_~写不同的启动程序?/P>

(^_^)杨嘉 2005-12-09 20:12 发表评论
]]>
Eclips使用U技(l对l典) http://www.aygfsteel.com/drjc/archive/2005/12/08/22959.html(^_^)杨嘉(^_^)杨嘉Thu, 08 Dec 2005 04:06:00 GMThttp://www.aygfsteel.com/drjc/archive/2005/12/08/22959.htmlhttp://www.aygfsteel.com/drjc/comments/22959.htmlhttp://www.aygfsteel.com/drjc/archive/2005/12/08/22959.html#Feedback0http://www.aygfsteel.com/drjc/comments/commentRss/22959.htmlhttp://www.aygfsteel.com/drjc/services/trackbacks/22959.html前言Q?/STRONG>
  本来我都是用JBuilderX当主力IDE、但使用了Eclipse后发?..Eclipse原来也这么好?..渐渐的就׃了它......
 
 Eclipse优点Q免贏V程序代码排版功能、有中文化包、可增设许多功能强大的外挂、支持多U操作系l?Windows、Linux、Solaris、Mac OSX)..{等?

  开此篇讨论串的目的Q是希望能将Eclipse的一些用技巧集合v?..Ƣ迎大家l箋补充下去...׃Eclipse的版本众多,希望补充的先q们能顺便说明一下?zhn)所使用的版本~

  Eclipse|站Qhttp://www.eclipse.org/ ;
  Eclipse中文化教学:JavaWorld站内文章参?

  (使用版本QEclipse 2.1.2 Release + 中文?


热键:
  1.TemplateQAlt + /
  修改处:H口->喜好讑֮->工作?>按键->~辑->内容辅助?
  个h习惯QShift+SPACE(I白)?
  易说明:~辑E序代码Ӟ打sysout +Template启动键,׃自动出现QSystem.out.println(); ?
  讑֮Template的格式:H口->喜好讑֮->Java->~辑?>模板?

  2.E序代码自动排版QCtrl+Shift+F
  修改处:H口->喜好讑֮->工作?>按键->E序代码->格式?
  个h习惯QAlt+Z?
  自动排版讑֮Q窗?>喜好讑֮->Java->E序代码格式制作E序。样式页?>插入tab(而非I格?以内~,该选项取消N,下面I格数目?Q这样在自动~排时会以空?作羃排?
  
  3.快速执行程序:Ctrl + F11
  个h习惯QALT+X
  修改处:H口->喜好讑֮->工作?>按键->执行->启动前一ơ的启动作业?
  易说明:W一ơ执行时Q它会询问?zhn)执行模式Q设|好后,以后只要按这个热键,它就会快速执行?ALT+Z(排版?、ATL+X(执行)>..我觉得很手^___^

  4.自动汇入所需要的cdQCtrl+Shift+O
  易说明:假设我们没有ImportMcdӞ当我们在E序里打入:
  BufferedReader buf =new BufferedReader(new InputStreamReader(System.in));
  此时Eclipse会警C没有汇入cdQ这时我们只要按下Ctrl+Shift+OQ它?yu)׃自动帮我们Importcd?

  5.查看使用cd的原始码QCtrl+鼠标左键点击
  易说明:可以看到(zhn)所使用cd的原始码?

  6.选取的文字批注v来:Ctrl+/
  易说明:Debug时很方便?
  修改处:H口->喜好讑֮->工作?>按键->E序代码->Ҏ(gu)

  7.视景切换QCtrl+F8
  个h习惯QAlt+S?
  修改处:H口->喜好讑֮->工作?>按键->H口->下一个视景?
  易说明:可以方便我们快速切换编辑、除错等视景?


密技:
  1.一套Eclipse可同时切换,英文、繁体、简体显C:
  首先要先安装完中文化包?
  在桌面的快捷方式后面加上参数卛_Q?
  英文-> -nl "zh_US"
  J体-> -nl "zh_TW"
  ?> -nl "zh_CN"?
  (其它语系以此cL)
  像我2.1.2中文化后Q我在我桌面的Eclipse快捷方式加入参数-n1 "zh_US"?
  "C:\Program Files\eclipse\eclipse.exe" -n "zh_US"
  接口׃变回英文语系噜?

  2.利用EclipseQ在Word~辑文书时可不必程序代码重新编排:
  EclipseE序~辑区的E序代码整个复制下来(Ctrl+C)Q直接脓(chung)(Ctrl+V)到Word或WordPad上,(zhn)将会发现在Word里的E序代码格式Q跟Eclipse所讑֮的完全一P包括字型、羃排、关键词颜色。我曾试qJBuilder、GEL、NetBeans...使用复制贴上Ӟ只有~排格式一P字型、颜色等都不会改变?
外挂:
  外挂安装Q将外挂包下载回来后Q将其解压羃后,(zhn)会发现features、pluginsq?个数据夹Q将里面的东襉K复制或移动到Eclipse的features、plugins数据夹内后,重新启动Eclipse卛_?

  让Eclipse可以像JBuilderX一样用拖拉方式徏构GUI的外挂:
  1.Jigloo SWT/Swing GUI Builder Q?
  http://cloudgarden.com/jigloo/index.html ;
  下蝲此版本:Jigloo plugin for Eclipse (using Java 1.4 or 1.5)
  安装后即可由档案->新徏->其它->GUI Form选取要徏构的GUIcd?

  2.Eclipse Visual Editor ProjectQ?
  http://www.eclipse.org/vep/ ;
  炚w下方Download PageQ再炚wLatest Release 0.5.0q入下蝲?
  除了VE-runtime-0.5.0.zip要下载外Q以下这2个也要:
  EMF build 1.1.1: (build page) (download zip)
  GEF Build 2.1.2: (build page) (download zip)

  3.0 M8版本Q请下蝲Q?
  EMF build I200403250631
  GEF Build I20040330
  VE-runtime-1.0M1

  安装成功后,便可由File->New->Visual Class开始UI设计?
  安装成功后,卛_由新?>Java->AWT与Swing里选择所要徏构的GUIcd开始进行设计。VE必须配合着对应版本Q才能正怋用,否则即安装成功Q用上仍会有问题?

  使用Eclipse来开发JSPE序Q?
  外挂名称Qlomboz(下蝲面)
  http://forge.objectweb.org/project/showfiles.php?group_id=97 ;
  请选择适合自己版本的lomboz下蝲Qlomboz.212.p1.zip表示2.1.2版,lomboz.3m7.zip表示M7版本....以此cL?
  lomboz安装以及讄教学Q?
  Eclipse开发JSP-教学文g


Java转exe:
  实现方式QEclipse搭配JSmooth(免费)?
  1.先由Eclipse制作包含Manifest的JAR?
  制作教学

  2.使用JSmooth做好的JAR包装成EXE?
  JSmooth下蝲面Q?
  http://jsmooth.sourceforge.net/index.php ;

  3.制作完成的exe文gQ可在有装置JRE的Windows上执行?

  Eclipse-Java~辑器最佌定:
  ~辑器字型设定:工作?>字型->Java~辑器文字字型?
  (讑֮Courier New -regular 10)

  ~辑器相兌定:H口->喜好讑֮->Java->~辑?

  外观Q显C受强调对U显C的Ҏ(gu)受强调显C现行行、显C打印边距,其N,Tab宽度?Q打印编距字D设80?
  E序代码协助Q采预设卛_?
  语法Q可讑֮关键词、字W串{等的显C颜艌Ӏ?
  附注Q采预设卛_?
  输入Q全部字D都N?
  动说明Q采预设卛_?
  DQ采预设卛_?

  使自动排版排出来的效果,最W合Java设计惯例的设定:
  自动排版讑֮Q窗?>喜好讑֮->Java->E序代码制作格式?

  换行Q全部不N?
  分行Q行长度上限设:80?
  样式Q只强制{型后插入I白N?
  内羃I格数目Q设??

  Eclipse的教学文Ӟ
  Eclipse 3.0pd热键?- 中英对照解说?(by sungo) ~New~
  Window+GCC+CDT用Eclipse开发C、C++ (by sungo) ~New~

  其它Q?
  扩充Eclipse的Java 开发工?中文)
  使用Eclipse开发J2EE 应用E序(中文)
  使用Eclipseq_q行除错(中文)
  用Eclipseq行XML 开?中文)
  开发Eclipse外挂E序(中文)
  国际化?zhn)的Eclipse外挂E序(英文)
  Swing~辑器加入Eclipse(英文)
  如何试你的Eclipse plug-inW合国际市场需?英文)

  Eclipse的相关网站:
  http://eclipse-plugins.2y.net/eclipse/index.jsp ;
  http://www.eclipseplugincentral.com/ ;
  Eclipse相关教学[体]
  写程序写到很累了Q想休息一下?Q玩玩小Game是不错的选择Q下面介l用Eclipse玩Game的Plug-in?


转蝲Q?A >http://www.5i58.net/news/html/3955.htm


(^_^)杨嘉 2005-12-08 12:06 发表评论
]]>
վ֩ģ壺 ̶| | | ͨ| | | | | | | | | | ױ| | Ӫ| ɽʡ| | | ͨ| | | ƽ| ˳| ľ| | ʯɽ| | | | SHOW| פ| | | | | Զ| Ͻ| | կ| |