wnagzihxa1n

wnagzihxa1n

iOS/Android Security

© 2021

大土豆安全笔记 2019.12.13

这几天我一直在看大佬们的分析文章,在读到一篇文章的时候,我想通了一些事情,不掌握一个引擎的设计和基本思想,又如何融汇贯通呢?以OpCode为单位进行优化,以Block为单位进行优化,以Function为单位进行优化,不掌握编译器的基本思想,直接读源码去学习引擎怕是事倍功半,连这些概念都听不到

IMAGE

我之前搞脱壳,一开始啥都不懂,跟着别人的分析文章调试,别人给个样本,告诉我在dvmDexFileOpenPartial函数下断点,一代壳轻松脱掉,有的壳弱一点,二代壳也可以脱掉,但是如果壳升级了呢?从一开始的解密Dex文件进行动态加载变成了类抽取,函数抽取呢?这时候需要什么能力才能自己研究出新的脱壳方法?

不懂脱壳的还是只会在dvmDexFileOpenPartial函数下断点,脱出来的必然是空Dex,因为函数指令没有恢复,肯定是脱不出来的,后来我系统的分析了APP的安装过程源码,如何加载Dex,Dalvik和ART如何执行Method,整套源码其实不多,所以可以直接上手阅读,在读完之后,我就对虚拟机执行Opcode的整个流程有了一个清晰的认识,我也知道为什么要在dvmDexFileOpenPartial函数下断点,以及还有哪里可以下断点

回到刚才说过的一个问题,如果从单纯的Dex加载变成类抽取,函数抽取该如何脱壳?

在掌握了虚拟机执行流程之后,这个问题便轻松解决,因为加载Dex前我们进行一次主动加载,就可以拿到所有的真实数据,因为壳只是保护作用,当系统要加载这个类里的某个方法或者函数,必然是要主动恢复真实指令的,那些提出脱壳点的大佬肯定都是把安卓虚拟机源码研究的滚瓜烂熟才能找到脱壳的方法,尤其是后期的指令替换等加固方式,需要在一个整体的角度进行思考,而不是单纯的下个断点就可以解决的,这里就不过多深入讨论了

所以我觉得我现在就处于盲目跟着别人学习漏洞分析的情况,我不知道为什么要定位到大佬说的函数,不知道如何进入这个函数,哪个阶段进来的,JIT优化的入口在哪里,我知道JIT优化要先生成IR,但是它是如何生成的呢?数据流分析是什么?在哪里实现?大佬们文章里提到的kill机制是什么?为什么要有kill机制,这个机制都用在了哪里?

以上这一连串的问题就是我最近学习浏览器时候思考的,当然还有更多的问题没有写出来,其实这些问题有很多在我掌握了编译原理,掌握一个引擎的设计之后就很轻松解决了

下面这些在之前一篇安全周报里提过一次,但是后来因为学习漏洞逐渐就跑偏了,现在再回过头来想想,确实如此

RednaxelaFX写的文章/回答的导航帖

  • https://zhuanlan.zhihu.com/p/25042028

新手上路学习JavaScript引擎实现——路线图

  • https://zhuanlan.zhihu.com/p/20505562

各JavaScript引擎的简介,及相关资料/博客收集帖

  • https://hllvm-group.iteye.com/group/topic/37596

学习编程语言与编译优化的一个书单

  • https://zhuanlan.zhihu.com/p/20130808

有哪些常用 JIT 算法?

  • https://www.zhihu.com/question/54748092/answer/141903877

以上说的都是我个人想法,不接受任何反驳,你拿了千万Bounty也好,你是谷歌名人堂也罢,大家的目的不一样,对我而言,我要对JS引擎实现有一个整体的认识,把知识学的扎实最重要

本周一些浏览器资料

大佬开始搞WebKit了?

  • https://i.blackhat.com/eu-19/Thursday/eu-19-Wang-Thinking-Outside-The-JIT-Compiler-Understanding-And-Bypassing-StructureID-Randomization-With-Generic-And-Old-School-Methods.pdf

Firefox CVE-2019-11708 & CVE-2019-9810 Exploit

  • https://github.com/0vercl0k/CVE-2019-11708

前几天盘古发了一篇文章,学习了一波

  • https://mp.weixin.qq.com/s/UBZv0pd7Nr-o-NMxjV53RQ

我发现自己现在看东西都看的很仔细,可能是因为学习浏览器的后遗症,最早学习开发的时候,教程一大把,看啥都很快的看过去了,有些不懂的知识点跳过也就忘了,后来学习浏览器的时候,发现资料真的少,就只能一个词一个词的仔细看,我有时候跟大佬们聊天也是,我问大佬一个知识点或者一个漏洞,大佬给我哇啦哇啦讲一堆,然后我就把大佬给我讲的仔细的记录下来,尽可能的学习透彻,虽然笨但是感觉还是学到了很多东西的

比如这篇文章里的第二段,ASLRDEP/W^X我之前学习过,也掌握的还行,所以没有太多关注,ROP/JOP/Data-only attack我只知道ROP,后面提到的论文我也没看过,既然有这么一篇论文,其它同类型的研究论文也应该找出来仔细读读,再后面的控制流完整性技术等等,我发现我现在真的是珍惜这种大佬们的经验分享,能学到特别多的东西

2000年代后期,地址空间随机化(ASLR)和数据执行保护(DEP/W^X)成为两项通用的基础性漏洞利用缓解机制。不幸的是,利用漏洞实现内存信息泄漏绕过ASLR进而基于ROP/JOP/Data-only attack等攻击技巧实现任意代码执行成为攻击者的标配 (更多内存漏洞攻防技术信息,参考《SoK: Eternal War in Memory》,https://people.eecs.berkeley.edu/~dawnsong/papers/Oakland13-SoK-CR.pdf)。面对大量绕过ASLR和(DEP/W^X)的漏洞利用样本,学术界再次掀起了针对细颗粒度ASLR和Anti-ROP的研究高潮。最终,在诸多潜在技术解决方案中,(粗颗粒度的)控制流完整性技术赢得了市场 (不同CFI机制实现细节和对比,参考 《Control-Flow Integrity: Precision, Security, and Performance》https://nebelwelt.net/publications/files/17CSUR.pdf)。为此,英特尔芯片中新增了CET特性(Control-flow Enforcement Technology),支持粗颗粒度前向跳转地址验证和基于Shadow Stack Register的返回地址验证,ARM V8.3标准中增加了PAC(Pointer Authentication Code)特性,支持对数据或者代码指针完整性的验证;LLVM、GCC、VisualStudio等主流编译器中支持开启CFI特性的编译选项;Windows、Android、iOS等操作系统都已经在用户态和内核态实现不同粒度的CFI机制。

最近感觉状态不太好,年底想稍微休息下,看点简单的东西,就先不学习浏览器相关的漏洞了

打算回归下老本行,看看Frida的一些好玩的利用,看看大佬们写的逆向文章,再看看编译原理的优化部分,到元旦之后再开始计划下2020年想做的事情