技术标签: java android 工具 dos jar class Android
防止反编译
作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。
Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹
proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。
在工程的"default.properties"中添加这样一句话“proguard.config=proguard.cfg”
打包签名后的.apk就是混淆的,其实我们只要做一步就可以了就是在"default.properties"中添加这样一句话“proguard.config=proguard.cfg”就可以了。
如果想要更加复杂地混淆代码,可以详细地对该文件进行配置.
由于apk是Android虚拟机加载的,它有一定的规范,加密apk后Dalvik无法识别apk了。完全避免是不可能的,总有人能够破解你的代码。但是有几种
方式来提高被反编译取代码的难度:
网上开源的java代码混淆工具较多,一般是用ant的方式来编译的
-injars androidtest.jar【jar包所在地址】
-outjars out【输出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的库的jar,用于解析injars所指定的jar类】
-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆时不会产生形形色色的类名 】
-dontskipnonpubliclibraryclasses 【指定不去忽略非公共的库类。 】
-dontpreverify 【不预校验】
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【优化】
-keep public class * extends android.app.Activity 【不进行混淆保持原样】
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public abstract interface com.asqw.android.Listener{
public protected <methods>; 【所有方法不进行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【对该方法不进行混淆】
}
-keepclasseswithmembernames class * { 【保护指定的类和类的成员的名称,如果所有指定的类成员出席(在压缩步骤之后)】
native <methods>;
}
-keepclasseswithmembers class * { 【保护指定的类和类的成员,但条件是所有指定的类和类成员是要存在。】
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {【保护指定类的成员,如果此类受到保护他们会保护的更好 】
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {【保护指定的类文件和类的成员】
public static final android.os.Parcelable$Creator *;
}
反编译apk文件
安装ApkTool工具,该工具可以解码得到资源文件,但不能得到Java源文件。
安装环境:需要安装JRE1.6
1> 到http://code.google.com/p/android-apktool/下载apktool1.3.2.tar.bz2 和apktool-install-windows-2.2_r01-3.tar.bz2 文件。解压两个文件,然后把解压后的文件放在一起,如:c:\apktool
2> 在系统变量PATH中添加进aapt.exe,如:;c:\apktool\aapt.exe
3> 在DOS窗口下进入apktool.jar所在目录。执行DOS命令:apktool d -s c:\soft\xxx.apk c:\soft\source。
命令格式:apktool d [opts] <file.apk> [dir] 中的d代表解码,[opts]代表选项,-s选项代表不解码源文件。
Apktool工具只能反编译成smali的中间代码文件,这里需要借助另外一个开源工具Dex2Jar,该工具可以把dex文件转换成jar文件。这个工具不能直接翻译成java文件,但是可以把dex文件转换成jar文件
下载地址:http://code.google.com/p/dex2jar/。
1> 把APK安装包中的classes.dex解压到某个目录下,如:c:\soft
2> 在DOS窗口下进入dex2jar.bat所在目录,执行DOS命令:dex2jar.bat c:\soft\source\classes.dex c:\soft\source,命令生成classes.dex.dex2jar.jar文件。
安装jd-gui工具,该工具可以把jar文件反编译成Java源文件
下载地址:http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip。
运行该软件,直接打开classes.dex.dex2jar.jar文件即可看到java源代码。
函数public class HelloWorld { //定义了一个方法名为 print 的方法,实现输出信息功能 public void print() { System.out.println("Hello World"); } public static void main(String[] args){ ...
我认为对于面试以及进阶最佳的学习方法莫过于刷题+博客+书籍+总结!前三者我将淋漓尽致地挥毫于这篇文章中,至于总结要靠个人。实际上越到后面你越会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。我总结了一系列大厂面试中常问的面试技术点、深入解析以及答案,将为最近准备面试的各位去大厂保驾护航!何谓面试?我所理解的面试,它是一个过程,是不断沉淀、不断总结、善于传达自己的专业领域技术以及解决问题能力的过程。以下是我总结的一些Java面试..
代理模式 package cn.it.cast;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * Proxy模式又叫做代理模式,是构造型的设计模式之一, * 它可以为其他对象提供一种代理(Proxy)...
○ ●要点总结在技术革新与娱乐方式的转变下,漫画行业经历了传统的纸媒漫画-PC端漫画-移动端漫画的发展历程。相较于传统纸媒漫画不易携带、不环保等缺点,网络漫画传播速度快、...
文章目录1. 简介2. 标签元素属性3. 表格4. 列表ol 有序ul 无序自定义列表5. 表单输入域标记 ``选择域标记 `, `文字域标记 ``6. 综合练习learning from 《python web开发从入门到精通》1. 简介HTML 是描述网页的一种标记语言,Hyper Text Markup Language<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"
程序运行中会Segmentation fault (core dumped),这时报UserWarning: semaphore_tracker: There appear to be 4 leaked semaphores to clean up at shutdown 需要忽略这个警告就可以了,在运行代码之前加入这一句:export PYTHONWARNINGS='ignore:semaphore_tracker:UserWarning' ...
@[TOhttp://yang-zhipeng-1.gitee.io/xiaomi3/C](这里写自定义目录标题)欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面
Spring-boot + Spring-data-jpa在配置多数据源时,第二个数据源不可写入,只能读报的主要异常是no transaction in process,也有roll-back only等异常spring-boot版本为2.1.4spring-data-jpa版本为2.1.6spring-framework版本为5.1.6我第一和第二数据源配置都一样,除了第一个数据源上...
问题最近项目做的boot,模块交互用的list,于是就有了这样的问题,同一个类,里面包含的list&lt;Man&gt;和Man 不能转换;原因然后也看了不少博客,大概了解了一点信息,总的就是说Dubbo 对List, Map, Number,Date, Calendar等接口不支持序列化,而且这些个接口在jdk里面自身也没有实现序列化。笨拙的解决办法我在服务层将list转化的时候...
java的HelloWorldpublic class Hello{public void main(String[] args){System.out.pritln("Hello World!!!");}}
package org.xxpay.mch.paydemo.ctrl;import java.io.IOException;import java.io.InterruptedIOException;import java.io.UnsupportedEncodingException;import java.net.UnknownHostException;import java.u...
1 简介在使用电脑解压了Mysql8.0.11-winx64之后,进入bin目录,使用管理员权限进入命令行模式下,提示缺少vcruntime140.dll,该问题如何解决呢? 2 问题描述MySQL安装过程中出现的vcruntime140.dll缺失 之前自己曾经安装过mysql并且运行过,但不知道为什么再次运行时弹出了这个问题,花了不少的时间。 3 错误解决方式弹出...