java反编译api
A. 安卓应用的程序部分仅仅包含在APK根目录的classes.dex文件里面吗
1).AndroidManifest.xml
该文件是每个应用都必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等等信息,如要把apk上传到Google
Market上,也要对这个xml做一些配置。在apk中的AndroidManifest.xml是经过压缩的,可以通过AXMLPrinter2工具解开,具体命令为:java
-jar AXMLPrinter2.jar AndroidManifest.xml
目录
assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。具体的方法可以参考SDK中的例子:在sdk的
\SDK\1.6\android-sdk-windows-1.6_r1\platforms\android-1.6\samples\ApiDemos
例子中,有个com.example..android.apis.content
的例子,在这个例子中他把一个text文件放到工程的asset目录下,然后把这个txt当作普通文件处理。处理的过程在ReadAsset.java
中。同理,asset也可以放置其他文件。
(6).classes.dex文件
classes.dex是java源码编译后生成的java字节码文件。但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。目前常见的java反编译工具都不能处理dex文件。Android模拟器中提供了一个dex文件的反编译工具,dexmp。用法为首先启动Android模拟器,把要查看的dex文件用adb
push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexmp
xxx.dex。另,有人介绍到Dedexer是目前在网上能找到的唯一一个反编译dex文件的开源工具,需要自己编译源代码。classes.dex文件是Java源码编译后的代码文件。通常该文件里都有单词、语句需要汉化。
B. 如何进行ODEX反编译实例
0x00 前言
使用开源工具出现问题而且很难在网上查找到解决方案的时候,最好的解决方法就是研究它的源码,因为那样能为我们提供更多的信息。
0x01 搭建smali/baksmali源码调试环境
首先我们在github上拉取smali/baksmali的源码
git clone https://github.com/JesusFreke/smali.git
可以看出该项目采用了grade自动化构建工具来编译源码的,因此我们可以在android studio中导入该项目,如下图所示:
生成的baksmali在如下目录下面:
上图中的Program arguments中,-a选项代表api level,可以通过如下属性获得:
报错如下:
Error occurred while disassembling classLandroid.support.v4.util.TimeUtils; - skipping class
java.lang.RuntimeException: Invalid methodindex: 32
atorg.jf.dexlib2.analysis.InlineMethodResolver$InlineMethodResolver_version36.resolveExecuteInline(InlineMethodResolver.java:175)
atorg.jf.dexlib2.analysis.MethodAnalyzer.analyzeExecuteInline(MethodAnalyzer.java:1512)
atorg.jf.dexlib2.analysis.MethodAnalyzer.analyzeInstruction(MethodAnalyzer.java:982)
atorg.jf.dexlib2.analysis.MethodAnalyzer.analyze(MethodAnalyzer.java:205)
atorg.jf.dexlib2.analysis.MethodAnalyzer.<init>(MethodAnalyzer.java:140)
atorg.jf.baksmali.Adaptors.MethodDefinition.(MethodDefinition.java:463)
atorg.jf.baksmali.Adaptors.MethodDefinition.getMethodItems(MethodDefinition.java:371)
atorg.jf.baksmali.Adaptors.MethodDefinition.writeTo(MethodDefinition.java:238)
atorg.jf.baksmali.Adaptors.ClassDefinition.writeDirectMethods(ClassDefinition.java:282)
atorg.jf.baksmali.Adaptors.ClassDefinition.writeTo(ClassDefinition.java:112)
atorg.jf.baksmali.baksmali.disassembleClass(baksmali.java:225)
atorg.jf.baksmali.baksmali.access$000(baksmali.java:55)
atorg.jf.baksmali.baksmali$1.call(baksmali.java:149)
atorg.jf.baksmali.baksmali$1.call(baksmali.java:147)
atjava.util.concurrent.FutureTask.run(FutureTask.java:266)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
atjava.lang.Thread.run(Thread.java:745)
我们直接锁定出错的地方,在上面出错信息标红色的地方,并且在抛出异常处下断点,我们可以判断出错原因是因为反编译smali指令execute-line时传入了一个未知的Dalvik虚拟机的内部java方法索引inlineIndex=32:
然后,我们把inline.txt作为-T选项的参数传递进去:
完美反编译。
http://www.mengzhe.com/Androidkaifa/3129.html
C. java相关!我想要把别人的jar软件中的1个.class用Xjad反编译出来,修改里面的文字,再编译放回去怎么弄
用winRar解压缩文件方式打开你原来反编译的jar,把你编译好的某个.class文件放入就行。
D. 用JD-eclipse反编译出现 throw new RuntimeException("Stub!")
An interesting note on Android SDK is that the code in android.jar is stubbed out. This because the code inside the jar is never runs, so there’s no reason to make the SDK bigger because of this. To better undersand, if you look at these classes using a decompiler (with jad for example) you will only see: public void something(…){ throw new RuntimeException(“Stub!”); }. This means that you use android.jar only for the purpose of compiling the code, use autocomplete and imports in Eclipse.
Moreover, android.jar contains only the APIs exposed for the level of applications development. It’s a promise from Google that if you compile your application using this jar, you are guaranteed your application will run in future versions of Android. There is a part of the compilation process in the Android system that removes methods and classes of API. It’s used internally by the framework and should not be used for an Android developer. Why does Google do it? Well, I believe it’s because Google needs to write too much code to get API exposed. A lot of code starting in the hardware until to get a high-level API, which can be changed from one version to another, even codes that may no longer exist in future versions.
E. JAVAEE 5 API 中文文档
Java jdk1.6.0.02虚拟机
Java Development Kit(JDK) v1.5
JAVA JDK1.50的中文简体API文档
JAVA中文帮助文档jdk1.5
Java JDK5.0学习笔记(PDF)
Java SE Development Kit (JDK) for Windows 7 Build b26
Java Development Kit(JDK) v1.4.2
Java EE SDK 5 Update 5 (with JDK 6u6)-windows
jdk-6u6-windows-i586-p(JDK 1.6.0 u6 多国语言版)
Java开发工具包 JDK 1.5.02
JDK6API中文参考CHM
JDK 6.0 For Linux
jdk1.6中文帮助文档
jdk-1_5_0_14-windows-i586-p.exe(54278424 bytes)
jdk-1_5_0_15-windows-i586-p
jdk-7-ea-bin-b23-windows-i586-30_oct
Java SE Runtime Environment (JRE) 6 Update 5
Sun Java Runtime Environment V1.4.2.12
java虚拟机
Java 2 SDK 1.4.2.08
Java 2 Runtime Environment v5.0
JAVA通用模拟器MidpX
Java 2 Platform Standard Edition 5.0 Update 8
Sun Java SE Runtime Environment 6.0 Update 10
JAVA 反编译器-基于jad内核的Frontend 2.0 plus(cracked)
Java SE Runtime Environment (JRE) 6 Update 5
Java 2 SDK Standard Edition 1.4.2
手机java电子书阅读器
JAVA 2 1.4.2 编程工具
JAVA控件
Java V6 Update 5 for XP & Vista
Java电子图书制作工具
JAVA模拟器 DMIDP2 完美版
==============================
下载地址:
参考资料:
你看看这个地址行不,行的话记得给分,我也是查出来的,你看看可以不
F. 请问一下,我吧一个java软件反编译了,我应该怎么去了解这个软件的运行流程和类与类间的关系
你可以借助一些工具辅助你去分析和了解这些类的关系,比如用eclipse 就可以。
G. java加密
可以的,但是对jar包直接加密,目前只支持J2SE,还不支持J2EE。更多的还是用混编器(java obfuscator)。下面是关于HASP的介绍。
-----------------------------------------------------
针对java加密防止反编译的解决方案
众所周知,java开发语言提供了很方便的开发平台,开发出来的程序很容易在不同的平台上被移植,现在越来越多的人使用它来开发软件,与.net语言并驾齐驱。
Java有它方便的一面,同时也给开发者带来了一个不小的烦恼,就是保护程序代码变得困难,因为java语言编译和代码执行的特殊性,目前,除了HASP外,还没有一个更好的解决办法或保护方案,但如果不采取有力的措施,则自己辛辛苦苦开发出来的程序很容易被人复制而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱,以想达到防止反编译的目的,但是,这种方法在网上很容易找到相关的软件来重新整理,那么这个混编器工具也只能控制一些本来就没有办法的人,而对于稍懂工具的人几乎是透明的,没有任何意义。再说硬件加密锁,大多数厂商提供的加密锁只能进行dll的连接或简单的api调用,只要简单地反编译,就很容易把api去掉,这样加密锁根本起不了作用,那到底是否还有更好的解决办法呢?
现提供2种解决办法:
1、以色列阿拉丁公司的HASP HL加密锁提供的外壳加密工具中,有一个叫做数据加密的功能,这个功能可以很好的防止反编译而去掉api的调用,大家知道:硬件加密锁的保护原理就是让加密过的软件和硬件紧密地连接在一起,调用不会轻易地被剔除,这样才能持久地保护您的软件不被盗版,同时,这种方式使用起来非常简单,很容易被程序员掌握,要对一个软件实现保护,大约只需几分钟的时间就可以了,下面简单介绍一下它的原理:
运用HASP HL的外壳工具先把java解释器进行加密,那么,如果要启动这个解释器就需要有特定的加密锁存在,然后,再运用外壳工具中的数据加密功能把java程序(CLASS或JAR包)当作一个数据文件来进行加密处理,生成新的java程序(CLASS或JAR包),因为这个加密过程是在锁内完成的,并采用了128位的AES算法,这样,加密后的java程序,无论你采用什么样的反编译工具,都是无法反编译出来的。您的软件也只有被加密过的java解释器并有加密锁的情况下才能正常运行,如果没有加密锁,程序不能运行,从而达到真正保护您的软件的目的。
2、HASP HL提供专门针对java外壳加密工具,直接加密jar包,防止外编译,目前只支持J2SE,将来会进一步支持J2EE,如果情况适合则是最简单的方法。
H. api反编译怎么用windows系统
api函数使windows系统自动提供的软件调用接口。要反编译的话一般需要内核调试。可以使用windows系统提供的调试工具包windbg
I. Java反编译,再回编译的时候报错import javax.servlet.Filter
到java项目里
项目名-->右键
Property-->选择
Java Build Path-->选择
Add External JARs-->选择
把servlet-api.jar的路径输入即可 该包在tomcat里有 搜索即可找到
J. 如何使用Detour3.0来进行相应的API HOOK开发
[1] 反编译一个class文件:jad example.class,会生成example.jad,用文本编辑器打开就是java源代码
[2] 指定生成源代码的后缀名:jad -sjava example.class,生成example.java
[3] 改变生成的源代码的名称,可以先使用-p将反编译后的源代码输出到控制台窗口,然后使用重定向,输出到文件:jad -p example.class > myexample.java
[4] 把源代码文件输出到指定的目录:jad -dnewdir -sjava example.class,在newdir目录下生成example.java
[5] 把packages目录下的class文件全部反编译:jad -sjava packages/*.class
[6] 把packages目录以及子目录下的文件全部反编译:jad -sjava packages/**/*.class,不过你仍然会发现所有的源代码文件被放到了同一个文件中,没有按照class文件的包路径建立起路径
[7] 把packages目录以及子目录下的文件全部反编译并建立和java包一致的文件夹路径,可以使用-r命令:jad -r -sjava packages/**/*.class
[8] 当重复使用命令反编译时,Jad会提示“whether you want to overwrite it or not”,使用-o可以强制覆盖旧文件
