这题给的是一个apk文件,刚接触安卓,简要学习了一下安卓逆向的大致流程

反编译代码的工具下载:

反编译资源的工具:

  • APKTool: APK逆向工具,使用简单下载地址: http://ibotpeaches.github.io/Apktool/install/
  • 简单介绍下大概流程,首先把后缀为.apk的文件改为.zip的一个压缩文件,方便解压。dex2jarjd-gui配套使用,用于逆向代码部分,APKTool用于逆向res文件夹下的图片布局等部分。.apk 修改成.zip文件解压后的目录树长这样:

KdPb28.png

反编译代码

用到dex2jar包中三个文件d2j_invoke.bat, d2j-dex2jar.bat, lib,将上面解压的classes.dex文件和这三个文件一起复制到同一文件夹。

在当前窗口运行d2j-dex2jar.bat classes.dex,即可得到classes-dex2jar.jar文件

KdiUit.png

再运行jd-gui,将classes-dex2jar.jar拖入,即可得到想要的 java 代码

Kdi7w9.png

反编译res资源部分

apktool跟着官网的安装步骤即可完成安装

在find.apk文件目录下cmd运行 apktool find.apk可得到同名文件夹

这个文件夹下会得到若干文件,主要内容介绍如下:

  • AndroidManifest.xml:描述文件
  • res:资源文件
  • smail:反编译出来的所有代码,语法与java不同,类似汇编,是Android虚拟机所使用的寄存器语言

KdFJ6U.png

查看MainActivity.smali文件,得到以下关键信息,结合.line 22.line 23可知两串字符串分别对应上面java代码中的arrayOfChar1arrayOfChar2

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
.line 22
:array_0
.array-data 2
0x54s
0x68s
0x69s
0x73s
0x49s
0x73s
0x54s
0x68s
0x65s
0x46s
0x6cs
0x61s
0x67s
0x48s
0x6fs
0x6ds
0x65s
.end array-data

.line 23
nop

:array_1
.array-data 2
0x70s
0x76s
0x6bs
0x71s
0x7bs
0x6ds
0x31s
0x36s
0x34s
0x36s
0x37s
0x35s
0x32s
0x36s
0x32s
0x30s
0x33s
0x33s
0x6cs
0x34s
0x6ds
0x34s
0x39s
0x6cs
0x6es
0x70s
0x37s
0x70s
0x39s
0x6ds
0x6es
0x6bs
0x32s
0x38s
0x6bs
0x37s
0x35s
0x7ds
.end array-data

分析java代码,判断对arrayOfChar2中字母进行凯撒加密,爆破脚本如下

1
2
3
4
5
6
7
8
9
10
11
model = "abcdefghijklmnopqrstuvwxyz"

str1 = "pvkq{m164675262033l4m49lnp7p9mnk28k75}"

for i in range(1,27):
for s in str1:
if s.isalpha():
n = model.find(s)
s = model[n-i]
print(s, end='')
print('\n')

KdkfrF.png