java反编译之 基础篇(class未加密未混淆)
常用的工具有两个:jd-jui,DJ java Decomplier ,
第一个工具最为常用,但有时候,译的也不准备,第二个工具不认带有中文的目录。两个一起用,可以减少语法错误。
从class文件到java源文件,这是一个完全可逆的过程。
将class文件托到jd-jui上,File->save all sources将会把所有class文件打包,存在指定路径。
1. 如果你要修改一两个类,则不必将所有class类都调出来,保证你要改的class类语法正确却可!修改完再生成class后,替换原系统中的文件。如果出现引用问题,可以建立空的目录!
注意:编译后的class文件的jdk的版本必须你原系统的统一!否则会出一些莫名其妙的错误!使用 UE 打开 class 文件,第一行内容:
00000000h: CA FE BA BE 00 00 00 32 00 A9 07 00 02 01 00 37 ;漱壕...2.?....7
前四个字节为固定的 CA FE BA BE ,接下来的四个字节为次版本号(0000)和主版本号(00032)。
32:JDK1.6
31:JDK1.5
30:JDK1.4
2F:JDK1.3
2. 如果你需要将安装好的项目工程做导出原文件,做二次开发,要比上面费点力。但比你自己开发省力的多了.
新建一个web工程,jd-jui导出的java 类,全部放到src下。把tomcat工程里的jsp直接的放到新建工程的webroot下。这一步大家都知道。下面主要介绍一些逆向生成的常见错误:
以cas-client-core-3.1.1.jar为例
导入后图为:
逆向工具并不是十全十美的,错误存在是很正常的。
1> 缺少jar包.第一步把它所需要的jar包给他。如图:
2> 结构复杂的内部类会报错。需要手动调一下变量参数。如图:
修改后图:
3> 循环变量缺少声明,如图:
4> true和1,false和0分不清楚。方法返回一个boolean,往往会return 1.返回类型不对!
5> bytd[],这个类型为被译成乱码。。。遇过一次,查了很久才查到,这里标注一下!
一般的java项目这个文档足够把源码调出来了。但是遇到混淆的,加密的怎么办?
研究中,略有心得,后续中。。。
给大家看一下什么是变态混淆!
请看目录:
下面是从反编译工具jd-uid得到的代码:
没有语法问题,只是把类名,变量只用用0和O或1,I做了难以理解的名称,有专门的混淆工具!给反编译起到了一定的阻碍功能。
还有一个是class文件加密,反编译工具将无法打开!后续中。。。