1. Android开发工具

配置环境,开发工具,测试机或者虚拟机,adb

2. 实践app安全

2.2 检查app的证书和签名

解压apk文件

1
2
3
4
5
6
7
8
输出证书内容
keytool -printcert -file META-INF/CERT.RSA

查看签名文件内容
cat META-INF/CERT.SF

查看证书
openssl pkcs7 -inform DER -in META-INF/CERT.RSA -noout -print_certs -text

2.3 对Android app签名

1
2
3
4
5
生成keystore
keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore

对APK重新签名
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore demo.keystore -signedjar demo_signed.apk

2.4 验证app的签名

1
2
验证APK签名
jarsigner -verify -verbose demo_signed.apk
  • Androidmanifest.xml文件

  • adb与Activity交互(也可使用drozer)

  • adb pull和push,文件管理

3. Android安全评估工具

集成环境:Santoku(基于Ubuntu,集成部分移动安全工具)

drozer

1
2
3
4
5
6
7
8
9
10
11
12
启动drozer agent
adb forward tcp:31415 tcp:31415
drozer console connect
run app.package.list
run app.package.list -f app名
run app.package.info -a 包名
run app.activity.info -a 包名
run app.provider.info -a 包名
run app.service.info -a 包名
run app.broadcast.info -a 包名
run app.package.attacksurface 包名
run app.activity.start --action *** --category *** --component ***

编写drozer模块

4. 利用app中的漏洞

  • logcat
  • 网络流量:tcpdump
  • 使用drozer攻击导出的组件
  • 对app做中间人攻击(Burpsuite或其他MITM工具

5.保护app

  • 组件,不必要导出
  • 定制权限
  • content provider路径
  • 防御sql注入
  • 验证app的签名(防篡改)
  • 反逆向工程(检测安装程序,模拟器,调试标志位)
  • Proguard删除日志和/或进行混淆
  • DexGuard进行高级混淆

6.逆向app

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
java To dex
javac -source 1.6 -target 1.6 Example.java

#dx路径:D:\AndroidSDK\build-tools\22.0.1\lib\dx.jar
dx --dex --output=Example.dex Example.class

dex文件格式
dex文件解析:
#dexdump路径:D:\AndroidSDK\build-tools\22.0.1\dexdump
dexdump Example.dex
dx --dex --verbose-dump --dump-to=outfile.txt Example.class

dex To smali
baksmali.jar Example.dex -o out

smali To dex
smali.jar out -o out.dex

dex2java
dex2jar Example.dex
jd-gui

NDK so库
objdump -D ×××.so
gdbserver+gdb

7.网络安全

  • 验证SSL自签名证书(注意不要使用网络上的错误代码)
  • 使用onionkit库中的StrongTrustmanager
  • SSL pinning–限定受信SSL的范围

8.原生代码中漏洞的利用和分析

  • 溢出及root漏洞,略
  • 自动fuzzing测试Android原生代码:
  • Radamsafuzzer
  • busybox

9.加密与在开发时使用设备管理策略

  • 使用加密库
  • 生成对称加密密钥
  • 保护SharedPreferences数据
  • 基于口令的加密
  • 用SQLCipher加密数据库
  • Android Keystore provicer
  • 在开发时使用设备管理策略