背景
坐标广州,五年iOS开发经验。
最近面试了一位工作12年的程序员,
这位老哥有3年java开发经验,2年H5,7年iOS开发经验,简历上写着精通Java,iOS,熟悉H5开发。没有具体的技术点。
说实话我很期待这位老哥的面试,于是让人事邀约了他。
老哥面试的气场很足,我也很尊敬他,一大波的自我介绍之后,我们进入了正题。
我问了他Runloop,他说几乎没用过Runloop,于是我给他举了个小例子,老哥给我的答案是百度可以解决。
于是我有问了他KVC,老哥还是说不清楚,于是我问了最基础的copy,weak等几个关键词,依旧说不清楚,老哥依旧那么强势霸气,他给到我的感觉就是“为啥都会做,你别问这些没用的”。
看着他简历上写着,精通安卓iOS开发,熟悉跨平台开发,js交互,我问了一句了解Flutter吗?他说不知道没听过,最后问了一句期望薪资他说25k,我不知道问什么了,于是匆匆结束了面试。
今天本文主要讲解:
APK文件反编译
- 什么是反编译
- 如何防止反编译
- APK文件的基本构造
APK加固的方案原理
- APK加固总体架构
- APK打包基本流程
- Dex文件的意义
AES加密项目实战
- APK加固项目实战
- APK脱壳技术实战
一.APK文件反编译
1.什么是反编译
- 定义:
利用编译程序从源语言编写的源程序产生目标程序的过程
2.怎么进行反编译?
先了解apk的文件构造结构
二.加固方案思想
一个程序员的故事:
辛辛苦苦找到一个对象,结婚后发现是个母夜叉。不给管钱就闹,晚上睡觉她趴着睡,导致这程序员无法去洗脚了。然而这个程序员很努力,平时除了上班,还能够做点外包,赚点外快。所以他就想到了把工资卡上交,而把赚到的外快放到了自己的小金库。从此过上了性福生活
一个加密的故事:
通过将非核心的dex文件进行暴露来达到保护核心dex文件的目的。
三.基本原理
3.1Apk打包流程
加壳是在原来apk的基础上加一层保护壳,dex文件修改了就需要重新打包,否则apk安装不了。这就需要我们详细学习apk如何打包的
3.2Dex文件是什么
加固的目的是保护dex,直接而言就是对dex文件进行操作,对dex文件动刀子,必须知道dex文件是什么,能否直接动刀子
3.3Dex文件加载流程
加壳后的文件是不能直接用的,dex文件是加密的,所以我们需要对他进行解密,解密后的dex文件如何加载?
3.4APK文件是怎么生产的
四.加固总体框架
那么问题来了:
- 如何达到加密效果?
- 为什么是两个系列的dex?
- 壳dex 怎么来的
- 壳dex如何保护源dex?
- 如何签名?
- 如何运行新dex(如何脱壳)?
4.1加密过程
4.2APK文件如何签名
4.3APK文件如何运行(脱壳)
4.4如何制定某些类在 main dex中
multiDexKeepFile
:手动加入要放到Main.dex中的类
com.umeng.analytics.Abb.class
multiDexKeepProguard
:以Proguard的方式手动加入要放到的Main.dex中的类
-keep public class com.tencent.bugly.**{*;}
最后
今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。
最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
还有?高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。
【Android核心高级技术PDF文档,BAT大厂面试真题解析】
【算法合集】
【延伸Android必备知识点】
【Android部分高级架构视频学习资源】
Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录