首页
社区
课程
招聘
[分享]加固与脱壳-加固介绍
发表于: 2022-2-2 15:28 8625

[分享]加固与脱壳-加固介绍

2022-2-2 15:28
8625

  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直播授课

收藏
免费 4
支持
分享
最新回复 (2)
雪    币: 413
活跃值: (637)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
谢谢,正在学习当中。
2022-2-6 21:17
0
雪    币: 280
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
奈斯
2022-2-28 11:49
0
游客
登录 | 注册 方可回帖
返回
//