逆向与安全学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010215167/article/details/82559497

在Android工程中,代码文件大致可以分成Java、Native和资源文件。拿到apk包就可以针对这三类文件进行破解。

一、常见app漏洞及风险

1、静态破解;
2、二次打包;
3、通过Root获取存储数据;
4、界面截取,获取聊天记录等敏感信息;
5、输入法信息的拦截和获取;
6、协议抓取;

二、混淆机制

通过Proguard工具进行二次打包
1、压缩,去除没有被引用到的,减少java字节码,减少包体大小;
2、优化;
3、混淆,将类、方法、属性的名称通过简易字母进行替换;
4、预校验;

生成四个文件
dump.txt:class文件的内部结构;
mapping.txt:混淆前后java文件的名称映射,在查看异常上报堆栈的时候,可以用来定位问题;
seeds.txt:未被混淆的对象,keep住不混淆;
usage.txt:没有被引用的对象,会被裁剪掉;

三、反编译机制

平时常用的反编译工具,apktool用于反编译出资源文件,也可以修改其中的文件,然后进行二次打包;
Dex2jar工具,将dex文件反编译成jar包,用于查看java源码;

四、敏感信息的隐藏

1、如果将重要string.xml,java文件,BuildConfig,一旦应用被反编译,信息就会泄露;
2、通过Base64将重要的信息进行编码,通过密钥加密;
3、将重要信息放在so文件里面也是一种方法,提高反编译的成本;
4、对apk进行加固;

五、加固技术

1、漏洞分析
1)文件检查;
2)漏洞扫描;
3)后门检测;

2、加密服务
1)防二次打包保护;
2)资源文件保护;
3)DEX加壳保护,防止静态反编译;
4)防调试器保护;

六、安全编码

1、实时关注Android系统暴露的漏洞,进行修补;
比如之前我分享过WebView远程执行恶意代码的漏洞,需要通过@JavaInterface注解的方式进行修复;
2、关键信息的非明文存储,比如使用加密数据库,编码或是加密存储sp等等,防止反编译或是root之后,可被查看到;
3、将一些有可能会出现边界情况,容易出现兼容性的代码,进行异常的处理,比如在世界杯设置系统闹钟的接口实现上,就有一些参数高版本的android版本才有,就需要进行版本的判断;在厂商高度定制的情况下,一些代码会被裁减、修改掉,也要做好ClassNotFound的异常处理;

七、总结

1、想要保护应用的安全,就需要在对应的破解方法下,提出相应反破解的技术方案,提高破解的成本;
2、混淆,静态分析;
3、检测调试器,检测模拟器,动态调试;
4、防止重编译,签名校验,apk,dex的完整性;

猜你喜欢

转载自blog.csdn.net/u010215167/article/details/82559497
今日推荐