1.App主要面临威胁有
App主要面临威胁有,反编译,二次打包,动态调试,hook等
2.为什么需要加固?
加固是为了保护APK不被别人逆向分析,保护程序核心代码。
1.加壳概念
加壳通常是对dex文件进行加密存储,在程序运行的时候由壳程序将dex文件解密到内存执行
2.壳程序和加密和的dex重新打包生成apk文件,加密后使用apktool工具反编译经常只能看到很少的代码(多数是壳程序代码),程序运行时通过壳程序解密dex文件到内存中执行。
3.加壳的发展阶段
dex动态加载:破坏头等方法
代码抽取:将一部分函数放到so文件中
动态解密:只有函数被程序调用,才会解密
vmp虚拟机加密:只有vmp虚拟机才能执行代码
4.代码混淆
名称混淆:将类名函数名替换为随机字符串
逻辑混淆:打乱代码执行流程,增加逆向人员分析程序流程的难度
1.java层反调试
逆向工程师可以通过jdb调试工具对apk进行java代码调试,为了防止apk被调试,在配置文件清单加入AndroidMainfest.xml, Android: debuggable=false/true(false就是不允许调试)
针对这种反调试可以通过反编译修改属性false为true重新打包。
2.so反调试实现
1)Ptrace防护,app运行后,还会产生一个子进程,对app进行附加,这个时候我们就不能使用动态调试工具对他附加了。
针对这种情况,我们可以开两个ida,先对子进程附加,这样子进程就处于暂停状态了,再用另外一个ida去附加app就没问题了。
2)为了解决上面的问题,出现了右边图示,app创建一个子进程,子进程创建一个子子进程,子进程就app附加,子子进程对子进程附加,app对子子进程附加,形成“黄金铁三角”。
针对这种情况,只能想办法修改安装系统源码,修改fork函数,让fork函数失效。
3.tracePID反调试
通过检查TracePid的值是否为0来判断当前进程是否被调试(app运行时的状态)
可以看到TracerPid: 0说明没有被别的进程附加调试(如果被调试TracerPid的值就是调试器进程id),pid是自己的id,ppid是父进程的id
1.概念
程序在运行时会加载自身依赖的so文件,注入就是我们可以让程序加载我们自己定义的一些so文件,反注入检查当前加载的一些so文件,如果被注入,程序就结束。
2.输入cat /proc/2004/maps,查看当前进程加载的哪些so文件。
3.可以将系统so文件加入白名单,如果加载了非白名单so文件,就可以判断被注入了。
adb devices
adb shell
ps
/
/
列出进程
cat
/
proc
/
2004
/
status
/
/
查看进程状态
Name: sh
State: R (running)
Tgid:
2004
Ngid:
0
Pid:
2004
PPid:
1078
TracerPid:
0
Uid:
0
0
0
0
Gid:
0
0
0
0
FDSize:
256
Groups:
1004
1007
1011
1015
1028
3001
3002
3003
3006
3009
VmPeak:
4680
kB
VmSize:
4680
kB
VmLck:
0
kB
VmPin:
0
kB
VmHWM:
2508
kB
VmRSS:
2508
kB
VmData:
932
kB
VmStk:
136
kB
VmExe:
280
kB
VmLib:
2868
kB
VmPTE:
16
kB
VmSwap:
0
kB
Threads:
1
SigQ:
2
/
28209
SigPnd:
0000000000000000
ShdPnd:
0000000000000000
SigBlk:
0000000000000000
SigIgn:
0000000000381000
SigCgt:
000000000801e4ff
CapInh:
0000000000000000
CapPrm:
0000003fffffffff
CapEff:
0000003fffffffff
CapBnd:
0000003fffffffff
CapAmb:
0000000000000000
Seccomp:
0
Cpus_allowed:
3
Cpus_allowed_list:
0
-
1
voluntary_ctxt_switches:
76
nonvoluntary_ctxt_switches:
8
adb devices
adb shell
ps
/
/
列出进程
cat
/
proc
/
2004
/
status
/
/
查看进程状态
Name: sh
State: R (running)
Tgid:
2004
Ngid:
0
Pid:
2004
PPid:
1078
TracerPid:
0
Uid:
0
0
0
0
Gid:
0
0
0
0
FDSize:
256
Groups:
1004
1007
1011
1015
1028
3001
3002
3003
3006
3009
VmPeak:
4680
kB
VmSize:
4680
kB
VmLck:
0
kB
VmPin:
0
kB
VmHWM:
2508
kB
VmRSS:
2508
kB
VmData:
932
kB
VmStk:
136
kB
VmExe:
280
kB
VmLib:
2868
kB
VmPTE:
16
kB
VmSwap:
0
kB
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课