写点什么

程序员如何解决中年危机?资深 Android 开发带你入门 Framework,醍醐灌顶!

发布于: 2021 年 01 月 04 日

前言


春招已经接近尾声了,不知道各位小伙伴有没有找到自己心仪的工作呢。


笔者前几天内推刚刚收获了腾讯高级开发岗的 offer,得益于内推朋友面试时的面试经验,照着他给的方向复习刷题,顺利的通过了面试。在这里也无偿分享给广大网友们,喜欢也能帮助到你们。如果觉得文章不错,烦请点个关注转发,谢谢!


今天本文主要讲解:


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.**{*;}
复制代码


最后说一下我的学习路线


其实很简单就下面这张图,含概了 Android 所有需要学的知识点,一共 8 大板块:


  1. 架构师筑基必备技能

  2. Android 框架体系架构(高级 UI+FrameWork 源码)

  3. 360°Androidapp 全方位性能调优

  4. 设计思想解读开源框架

  5. NDK 模块开发

  6. 移动架构师专题项目实战环节

  7. 移动架构师不可不学习微信小程序

  8. 混合开发的 flutter



Android 学习的资料


我呢,把上面八大板块的分支都系统的做了一份学习系统的资料和视频,大概就下面这些,我就不全部写出来了,不然太长了影响大家的阅读。需要的小伙伴可以私信我【进阶】我免费分享给大家,或者直接点击下面链接领取,谢谢大家这么久以来的支持。


Android学习PDF+架构视频+面试文档+源码笔记


如果你有其他需要的话,也可以在 GitHub 上查看,下面的资料也会陆续上传到 Github


330 页 PDF Android 学习核心笔记(内含上面 8 大板块)



Android 学习的系统对应视频



总结


我希望通过我自己的学习方法来帮助大家去提升技术:


  • 1、多看书、看源码和做项目,平时多种总结

  • 2、不能停留在一些基本 api 的使用上,应该往更深层次的方向去研究,比如 activity、view 的内部运行机制,比如 Android 内存优化,比如 aidl,比如 JNI 等,并不仅仅停留在会用,而要通过阅读源码,理解其实现原理

  • 3、同时对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习

  • 4、android 的方向也很多,高级 UI,移动架构师,数据结构与算法和音视频 FFMpeg 解码,如果你对其中一项比较感兴趣,就大胆的进阶吧!


希望大家多多点赞,转发,评论加关注,你们的支持就是我继续下去的动力!加油!


用户头像

VX公众号:编程进阶路 2020.11.28 加入

还未添加个人简介

评论

发布
暂无评论
程序员如何解决中年危机?资深Android开发带你入门Framework,醍醐灌顶!