安卓音视频开发,字节跳动Android实习面试凉凉经,年薪超过80万!_手游利用hook 封包网络数据反馈回来给我-程序员宅基地

技术标签: 程序员  android  

前言

前几天去参加了一场面试。面试的题目大多很基础,有一道关于埋点的问题,面试官问我如果不用第三方SDK进行埋点,自己埋点的话,如何减少埋点对业务代码的入侵。

当时没想太多,就说创建一个 BaseView 类,在这个类中进行埋点的操作,然后使需要进行埋点操作的 View 继承这个 Base 类。后来想想,这个方案其实存在很多问题,因为让每个需要埋点的 View 去继承 BaseView 类,说明 View 需要自定义,会耗费很多的时间和精力,对于自带的 Button 等控件的埋点,这种方法又无法实现。所以说,其实在这个问题上,我答的不是很好,但可能之前的几个问题答得不错,面试官也没说什么,就说行,然后继续问下面的问题。

对于埋点,减少业务代码入侵这个问题,我回来想了想,或许用代理模式来实现,会是一个很好的选择。

第一阶段:Android 基础知识回顾:

  • 回顾Android 开发编程,深入理解Android系统原理和层次结构,深入分析Handler源码和原理;
  • 回顾Java,C/C++,Kotlin、dart 在Android开发中必用的语言,熟悉一下几种语言混淆后的特性;
  • 回顾Android IPC和JNI的底层原理和热更新技术回顾Native开发要点,使用C++结合NDK完成Android Native开发;
  • 回顾Android开发中常用的 AMS、PMS、WMS原理和App启动中服务加载的流程;
  • 回顾Android开发中必用的 Google的MVVM框架:DataBinding+LiveData+ViewModel;
  • 回顾Android开发中必用的 Google的MVP框架:Dagger2;
  • 回顾Android开发必用的网络架构:Okhttp3+RxJava2+Retrofit2+Rxdownload4+Rxcache+Glide;

Android 逆向基础知识:

  • 熟悉Android逆向工具的使用,如apktool,IDA,dex2jar,JEB,Androidkiller,Androguard等;
  • 深入分析APK中包含的各文件格式,分析Android系统源码中解析APK的相关代码;学习和熟悉smali语言(重点);
  • 仿微信写一个APP,并利用工具逆向出apk内的代码,并对比源码分析。

入门知识总结和实战(逆向入门):

  • 知识梳理,常用工具安装,adb命令与Linux常用命令,常见登录逻辑分析;
  • 分析ELF可执行程序,调式ELF可执行程序;ARM汇编与寄存器,ARM反汇编速成,ARM指令机器码,常用ARM指令集;
  • 反编译ELF文件与ObjDump,ELF文件解析与readelf,ELF文件解析与010Editor,深入分析ELF文件结构;IDA静态分析,IDA动态调式;
  • 简易计算器实现及分析(练习);
  • 字符串加密与解密,冒泡排序算法分析;
  • 关键android_server文件检测,IDA调试端口检测;
  • ELF可执行程序加载so库,DEX解析与dexDump,DEX解析与010Editor;
  • 实现自己的Dex解析工具与GDA(练习);
  • Androidkiller动态调试smali代码插件,AS+smalidea调式smali代码;
  • Log注入实现免注册,如何定位关键代码,去除java层签名验证,去除广告和弹窗(实战);
  • 推荐阅读《AndroidXXXXXX……》随便找本系统源码讲解的书看看吧;

Android 基础算法和安全协议:

  • 密码学,对称加密算法,非对称加密算法,散列函数;
  • 数字签名,数字证书,SSL证书检测,协议与安全协议;
  • 了解服务器端与客户端通信协议分析;
  • 使用Charles抓登录封包和验证码,协议构造与Java层MD5算法,动态调式smali代码与sign字段;
  • 协议构造类与SO层DESCBC算法,协议关键字段SIGN与SO层MD5算法,动态调试协议字段,动态调式协议关键字段SIGN;
  • 协议关键字段pwad和sign,动态调式协议字段拼接与MD5加密,分析so层OpenSSLSHA1算法;
  • 封包加密与反编译失败,使用方法跟踪分析加密;java层逆向分析,分析so层TEA算法;
  • 练习:抓取验证码和登录封包,分析协议关键字段与RSA算法,证书与RSA原理及源码分析;
  • 对称加密AES、PBE与CRC算法,数字签名RSA、DSA算法;

第二阶段:Android 逆向进阶学习:

  • Android 系统结构深入分析,自定义 ClassLoader,自定义注解和元注解原理分析;
  • 了解AndroidNDK,静态注册,动态注册,SO加载分析,
  • App保护策略去除霸哥磁力搜素APK签名验证,一键去除签名验证,静态代{过}{滤}理,动态代{过}{滤}理Hook Activity启动函数,
  • Hook签名验证函数介绍xposed框架:Xposed框架:
  • 绕过验证码注册Xposed框架:
  • 登陆劫持Xposed框架:
  • 篡改IMEI信息介绍CydiaSubstrate框架:
  • Java层Hook:
  • 篡改系统文字颜色Java层Hook:
  • 修改方法返回值绕过登录Java层Hook:
  • 篡改游戏金币Java层Hook:
  • 篡改主机名和端口号
  • Native层Hook:
  • ADBI框架:ELFARMHOOK框架内存抠取Dex文件过反调试技巧C++游戏
  • 逆向练习:动态调试2048纯算法游戏,Zygote+Hook使2048游戏秒过关;

Android NDK与JNI全面剖析:

  • so动态库的介绍
  • JNI动态注册和静态注册
  • NDK Build 工具介绍
  • Cmake工具介绍
  • JNI.h介绍
  • Android 源码工具和技巧
  • ijkplayer 源码分析及原理讲解
  • AndFix 源码分析及原理讲解
  • Java调用so库的动态流程解析
  • NDK实现增量更新
  • 案例:NDK实现换脸等工业级图像识别
  • 案例:NDK文件实现拆分和加密处理

Android 加固防护和脱壳简介:

  • DEX文件、ODEX文件与OAT文件;
  • XML文件与ARSC文件;
  • 分析App加固的产生及背景,最初加固方式,加固技术的发展;
  • HOOK制作脱壳机,定制自己的脱壳系统;
  • DexClassLoader动态加载分析,DEX自解析重构技术;
  • 三代梆梆加固原理分析;爱加密加固原理分析;
  • 360加固与脱壳机,360加固VM与置换表;
  • 辅助脱壳机,IDA动态调式脱爱加密壳;
  • IDA动态调式脱360壳,IDA动态调式脱SO壳;
  • 脱360壳-dex2oat,脱360壳-drizzleDumper;
  • 百度加固DD大法,百度加固VM与置换表;
  • 阿里加固与脱壳机,腾讯乐固;
  • ARSC资源保护与注解;
  • 脱壳神器ZjDroid:
  • 捕鱼达3加固技术总结;

Android 脱壳与反脱壳分析:

  • Android脱壳中的思路,技巧elf结构详解:
  • 动态运行库so文件的文件组成结构elf结构详解:
  • 加载so文件的流程elf文件变形与保护,elf文件修复分析,so加壳文件修复常用调试检测方法与过检测方法
  • Android源码定制添加反反调试机制Android dvm 脱壳,Dalvik dex处理分析IDA脱壳脚本编写,Odex修复方法,
  • IDAOdex修复脚本编写

进阶知识总结和企业级实战(逆向进阶):

  • 病毒分析与脱壳学习,用Ransomware类和木马类进行学习;
  • 手动脱壳《王者X耀》练习;
  • 从0开始打造自己的破解代码库;

第三阶段:Android 漏洞分析和挖掘:

  • 学习常见的漏洞类型和原理。例如堆溢出,栈溢出,UAF等,可以参考漏洞分析相关书籍;
  • 关注Android Security Bulletin,根据提供的diff分析漏洞成因;
  • 学习并调试以前的经典漏洞;
  • 学习漏洞挖掘fuzzing思路,参考书籍推荐《Android安全XXXX》;
  • 病毒分析与病毒脱壳实战;

Android 虚拟机技术、系统源码分析、刷机机制介绍、制作ROM刷机包:

  • ASP代码注入式写法;
  • Android 免root进行hook;
  • Android虚拟机原理,Android多开原理讲解;
  • 在apk内部写一个虚拟机,在apk内安装apk;
  • 虚拟机适配Android 10和64位系统;
  • 从0开始开发自己的虚拟机库;
  • 最完善的刷机工具 :魔趣 ROM;
  • 最完善的刷机工具 :Devices - TWRP;

最后

这里我特地整理了一份《Android开发核心知识点笔记》,里面就包含了自定义View相关的内容

除了这份笔记,还给大家分享 Android学习PDF+架构视频+面试文档+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。

如果你有需要的话,可以点击我的腾讯文档免费获取!

分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~

!](https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF)**

[外链图片转存中…(img-dIBefWFp-1619266420489)]

分享上面这些资源,希望可以帮助到大家提升进阶,如果你觉得还算有用的话,不妨把它们推荐给你的朋友~

喜欢本文的话,给我点个小赞、评论区留言或者转发支持一下呗~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dajie1213/article/details/116103304

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签