首发安全客 链接:https://www.anquanke.com/post/id/246020
因为发完之后发现,某些地方描述不精确,所以这里做了一点微调。
文章太长 所以准备分7个部分发出来。
正文开始:
大家好,我是王铁头 一个乙方安全公司搬砖的菜鸡,持续更新移动安全,iot安全,编译原理相关原创视频文章。
因为本人水平有限,文章如果有错误之处,还请大佬们指出,诚心诚意的接受批评。
简介
这篇文章详细讲解了,安卓面试经常会问到的几个技术问题。
以及相关的背景知识,技术原理。
文章中用到的资料代码 看这里:https://github.com/wangtietou/Wtt_Mobile_Security
本菜鸡大概面试了30多家公司,因为学历比较差(大专),很多公司看了简历直接就把我刷了。或者简历没看就把我刷了,在boss直聘上看到大佬已读不回 简直是常规操作了。
很多时候根本走不到技术那里。
走到技术那里后,面试失败的概率大概30%左右,有时候是因为我技术菜,有时候是因为要做的细分领域不太一致不太想干,有时候是因为谈不拢工资(我想多要一点,对方不给,哈哈哈哈)。
除了面试经验比较多,面试别人的经验也比较多。
因为我在公司时间也比较长,把之前招我进来的同事成功熬走了,所以现在android逆向面试,移动安全面试这块也是我当面试官。
所以,不管是面试还是被面试,我铁头多少也有一些经验。
安卓逆向面试题汇总 技术篇
面试官经常问的几个问题如下:
-
常见的加固手段有哪些
-
安卓反调试一般有哪些手段,怎么去防范
-
arm汇编 b bl bx blx 这些指令是什么意思
-
ida xx操作的快捷键是哪个?
-
Xposed hook 原理 frida hook 原理
-
inline hook原理
-
ollvm 代码混淆你了解吗?要怎么去处理
上面是一个汇总的目录,下面一个一个仔细拆分 详细说说
安卓逆向面试题详解
1)常见的加固手段
网上有的人把安卓壳分成五代壳,有人分成三代壳。
不同的人对这块的,具体的区分和看法不同,但是五代壳更细分一些。
在加固厂商内部,用的是五代壳的标准,当然他们PPT已经出现了第6 ,7 ,8代壳。我入行以及搬砖的时候,周围人用的基本都是下图的标准,所以我这里用五代壳来描述。
上面的图把安卓五代壳的优缺点,实现逻辑讲的非常好。大佬们理解了上面这两张图,回答第一个问题基本就ok了。
但是,大哥们既然看到了我这个文章,大佬们就可以风骚一点多说一些,说些面试官也不知道的。毕竟, 唬不住5k,唬得住50k。
说完上面的大概就是个及格分,说点下面的,面试官如果不了解这块的话当时就被你给唬住了。
大佬们如果在公司负责甲方安全,采购过企业版加固,或者在加固厂商搬过砖的话就会知道。加固虽然大体上分为免费版和企业版。免费版里面有的公司基本没啥加固选项,上传个apk应用包梭哈就完事了。
比如这种。
有的公司还是 比较人性化的,用户可以根据自己需求选择加固选项。比如这种
可以看到,免费版这里,厂商玩的花样并不多,有的就是上传一个包,啥加固选项没有,有的虽然有,加固选项也就几个。
但是企业版这里,厂商们花样都比较多。假设某加固公司,企业版实现了6个功能(一般是十几个 二十几个 我这里做个比喻)。功能如下:
-
签名校验。
-
密钥白盒
-
反xposed frida
-
源代码深度混淆
-
h5加固
-
内存防dump
这上面的功能是插件化的,你可以根据实际应用场景选择其中几个功能,也可以都要。比如你的app根本么有h5页面,你选个h5加固不是白花钱吗?
这里套餐不同,价格也是不同的。(企业壳大概一年几万吧)。
销售那里不同的功能组合有不同的报价,就像A公司选了1,3,5。 你选了 2,4,6. 虽然都是企业版,但是你和别人的企业版还是有区别的。
说这些就是表示,不同apk即使用了同一家厂商的企业版加固,选择的加固方式也是不一样的。
而且,一些行业的客户,加固厂商各自也会有针对行业的一些加固手法。
比如一些手游,加固厂商就会有一些反外挂的操作,针对内存读写的强检测,一些金融客户,因为对用户信息保密程度要求高,就会做一些安全键盘和防录屏截屏操作。
这里一些加固公司还把加固方式也做成了插件化。
比如一个apk,同时把2代壳和4代壳的加固方式都用上。
2代壳不落地加载,结合4代壳dexvmp。或者3代壳指令抽取结合4代壳dexvmp,这里混合也是他们的常用套路,不会影响app正常运行。
说到这里有的大佬可能会疑惑,2代3代4代不是不同的加固方式吗?
是怎么结合的哪?
这里我解释一下假设加固厂商拿到了一个未加固的dex, 那么2 3 4代壳子是怎么结合的。
1) dex比较重要的部分,比如算法部分,登录模块,这块的方法内容被抽取转换成自定义的指令格式,然后调用系统底层的jni方法执行。(4代壳dexvmp)
2) 其他不重要方法体直接抽空, 单独加密,运行的时候方法体内容再动态还原(3代抽取)。
3) 加载这个dex的时候(现在的dex已经经过了上面2步处理 里面的方法很多被抽空,一些被dexvmp保护), 并不是写出到文件系统用 dexclassloader这样的api去加载, 而是读到内存中直接加载,直接调用c层API加载内存中的dex(2代不落地加载)
还有一些更深度的定制,反正有钱就是大爷,你钱多干啥都可以商量,一般企业壳加固后你还是可以看到厂商的特征加固文件。
比如你看到libjiagu.so就觉得是360 ,深度定制后,特征文件你一个都找不到,而且还可以实现一些定制化的需求。
企业版功能插件化,套餐化,加壳方式组合这些东西,一般来说很多人是不知道的,所以说说这些,能很快的把你从众多普通面试者中区分出来。
把这一点说上,到时候面试官说不定因为过于欣赏你,把他大学刚毕业,没有男朋友的妹妹介绍给你了。
所以,当面试官问加固方式这块的时候,你除了把两张图的内容说清楚,还可以清清嗓子,一脸高手寂寞的神情。
悠悠地说:
其实吧,很多我搞过的企业壳,看的出来挺多都是定制化的,有的是2代壳结合4代壳的加固,有的是2代3代混合4代。
感觉很多企业壳,根据不同的业务场景,买了不同的加固套餐,比如xx应用,我脱壳的时候,发现有 清场sdk, ollvm混淆。另一个企业壳根本就没有这些,大部分逻辑在后端,不过也搞了密钥白盒和H5加固。
还有一些游戏的企业壳,内存读写明显防护是比较厉害的。金融这块的也基本都有安全键盘,和防截屏的一些保护。这时候,状若无意的对面试官说:“你说是吧”。
perfect.
本文始发于微信公众号(移动安全王铁头):安卓逆向面试题汇总 技术篇(1)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论