关于防止android apk被反编译的技术我们前面已经讲了四种。
如果有不明白的可以查看我的博客的前四篇中关于这四种技术的介绍。接下来我们接着介绍另一种防止apk反编译的技术-完整性校验。
一、完整性校验原理
所谓完整性校验就是我们用各种算法来计算一个文件的完整性,防止这个文件被修改。其中常用的方法就是计算一个文件的CRC32的值或者计算一个文件的哈希值。我们在防止apk被反编译的方法中也可以采用这种方法。我们知道apk生成的classes.dex主要由java文件生成的,它是整个apk的逻辑实现。所以我们可以对classes.dex文件进行完整性校验,来保证整个程序的逻辑不被修改。如果我们想要保证整个apk文件的完整性,也可以对整个apk文件进行完整性校验。下面我们分别来实现对classes.dex文件和apk文件的完整性校验。
二、用crc32对classes.dex文件的完整性进行校验
(1)可以打印出来我们的apk生的classes.dex文件的crc32的值,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
public class MainActivity extendsActivity {
@Override protected void onCreate(BundlesavedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String apkPath = getPackageCodePath();
Long dexCrc = Long.parseLong(getString(R.string.classesdex_crc));
try
{
ZipFile zipfile = new ZipFile(apkPath);
ZipEntry dexentry = zipfile.getEntry( "classes.dex" );
Log.i( "verification" , "classes.dexcrc=" +dexentry.getCrc());
if (dexentry.getCrc() != dexCrc){
Log.i( "verification" , "Dexhas been modified!" );
} else {
Log.i( "verification" , "Dex hasn't been modified!" );
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} |
注意:R.string.classesdex_crc的值现在可以是个随机数。
(2)运行程序打印结果,我的apk程序的classes.dex的crc32的值为713769644
(3)将上面程序的classes.dex文件的crc32的值,保存在资源文件字符串中classesdex_crc中(当然也可以保存在服务器上,然后通过网络获取校验),然后再运行上面的apk程序,打印如下:
Dex hasn't beenmodified!
(4)这时我们在上面的代码中随便加一行或者一个空格,然后重新编译运行会看到我们的程序的crc32的值改变了。程序打印如下:
Dex has beenmodified!
三、用哈希值对整个apk完整性进行校验
由于我们要对整个apk的完整性进行校验,所以我们的算出哈希值就不能存在资源文件中了因为apk中任何的改动都会引起最终apk生成的哈希值的不同。
(1)首先实现apk中计算自身哈希值的代码,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
public class MainActivity extendsActivity {
@Override protectedvoid onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String apkPath = getPackageCodePath();
MessageDigest msgDigest = null ;
try {
msgDigest = MessageDigest.getInstance( "SHA-1" );
byte [] bytes = new byte [ 1024 ];
int byteCount;
FileInputStream fis = new FileInputStream( new File(apkPath));
while ((byteCount = fis.read(bytes)) > 0 )
{
msgDigest.update(bytes, 0 , byteCount);
}
BigInteger bi = new BigInteger( 1 , msgDigest.digest());
String sha = bi.toString( 16 );
fis.close();
//这里添加从服务器中获取哈希值然后进行对比校验
} catch (Exception e) {
e.printStackTrace();
}
}
} |
(2)用linux下的sha1sum命令计算我们的apk的哈希值,命令如下:
sha1sum verification.apk
(3)将(2)中生成的哈希值存到服务器上,然后在我们的代码中从服务器获取进行完整性比较。
上面我们用计算crc32和哈希值的方法分别对classes.dex文件和整个apk完整性进行了校验,当然两个校验方法也可以互换使用。根据上面的讲述相信大家对校验文件完整性的方法有了一定的了解,下一篇我们将讲解另一种android apk防止反编译技术,期待大家的捧场。
如果对这篇讲的技术有任何疑问及想要获得这篇文章讲的技术的工程源码
欢迎关注个人微信公众平台:程序员互动联盟(coder_online),扫一扫下方二维码或搜索微信号coder_online即可关注,我们可以在线交流。
相关推荐
"Android Apk一键反编译 (支持Mac 和 Windows)"是一个专为这一需求设计的工具,它简化了在不同操作系统上的反编译过程。 该工具的核心功能是提供了一键式的反编译体验,意味着用户无需进行复杂的命令行操作或手动...
### Android APK反编译知识点详解 #### 一、概述 Android平台因其开源性与灵活性而备受开发者喜爱。但在实际使用过程中,用户可能会遇到各种各样的问题,比如软件中烦人的广告或者游戏中的某些设定(如经验金币获取...
Android APK 反编译之有效防止破解和反编译加密方法 Android APK 反编译是一种常见的安全威胁,许多 Android 开发者都存在这个问题。那麼有什么办法能防止 Android APK 反编译和破解呢?本文将对 Android APK 反...
Android APK反编译是一个复杂而重要的过程,它涉及到对Android应用程序的源代码进行逆向工程,以便理解其内部工作原理、提取资源或者进行修改。在Android应用开发中,APK文件是应用程序的打包形式,包含了所有的代码...
Android APK一键反编译
android反编译APK----附-具体说明;工具压缩包:XJad2.2.zip,jd-gui-0.3.3.windows.zip,dex2jar-0.0.9.15.zip,AXMLPrinter2.jar
2. **APK反编译流程**:反编译APK通常包括以下几个步骤: - **提取.dex文件**:首先,我们需要使用解压工具(如7-Zip)打开APK文件,从中提取出.dex文件。 - **转换为.jar**:然后使用dex2jar将.dex文件转换为.jar...
本文将深入探讨Android APK反编译的原理、工具和相关知识点。 首先,我们需要理解APK文件的结构。APK包含资源文件(如图片、布局XML)、Java字节码(Dalvik Executable, .dex文件)、AndroidManifest.xml(应用配置...
- `Android逆向助手.exe`:这可能是一款中文图形化界面的APK反编译工具,它简化了对APK文件的操作,提供友好的用户界面,便于非技术背景的用户使用。 - 其他常用反编译工具:如Apktool、dex2jar、JD-GUI等,它们...
在学习和研究Android应用开发过程中,APK反编译是一种重要的技能。它可以帮助我们理解应用的架构、实现方式,从而提升自己的编程能力。同时,对于安全研究人员来说,通过反编译可以发现潜在的安全漏洞,为应用加固...
总的来说,Android APK反编译是一个涉及多种工具和技术的过程,旨在揭示APK内部的工作机制。在进行反编译时,既要掌握相关工具的使用,也要关注版权、安全和合法性问题,确保操作合规且有意义。
UnityAPK反编译工具,如UnityStudio和dnSpy-ne,是针对使用Unity引擎开发的Android应用程序(APK)的专业工具。这些工具主要用于游戏开发者、安全研究人员或逆向工程爱好者,他们希望查看、分析或修改Unity游戏的...
**APK反编译步骤:** 1. **安装JDK环境**:由于大部分反编译工具依赖Java环境,所以在开始之前,确保已安装并配置好Java Development Kit (JDK)。 2. **获取反编译工具**:本压缩包中的"apk-tools"是一个常用的反...
Apktool是一款开源的Android APK反编译工具,由IzzySoft开发。它能够解包APK文件,将二进制的.dex字节码文件转换为人类可读的Smali代码,并且可以重新打包和签名APK。Apktool的主要功能包括资源解析、框架重建以及...
3. `Android反编译工具.exe`:这可能是另一个用于Android APK反编译的工具,可能包含了更全面的功能,如资源提取、DEX文件解析等。 4. `logs`:可能包含JD-GUI或其他反编译过程的日志信息,用于诊断和问题排查。 5. ...
本文将详细介绍Android APK反编译工具及其重要性,以及如何使用集成aapt的res反编译、dex的反编译和class的反编译等技术来揭示APK的真实结构。 首先,让我们了解什么是反编译。反编译是将已编译的二进制代码转换回...
安卓Android APK反编译是开发者或逆向工程师为了查看、分析或修改APK内部代码和资源的一种技术。以下是一个详细的步骤,帮助你理解如何进行这个过程: 1. **准备工作**:首先,你需要下载两个关键工具,分别是`dex2...
在Android应用开发领域,了解如何对APK进行反编译是非常重要的技能,这有助于学习、调试和分析其他应用的工作原理。在Linux平台上,有几种工具可以帮助我们实现这一目标,其中包括apktool、jd-gui和dex2jar。这些...
在Android开发领域,APK反编译是一种常见的技术手段,用于理解APK应用程序的工作原理、逆向工程或安全分析。本文将深入探讨Android APK反编译工具及其应用。 首先,我们要明白什么是APK。APK是Android应用程序的...
安卓apk反编译工具,android app反编译工具。用于学习