Android ARM32 ROP level8学习笔记

首先Android上的ASLR是伪ASLR,因为所有程序都是由zygote fork出来的,因此系统中的所有library的基址都是相同的,并且和zygote的内存布局一样,可以通过cat /proc/xxx/maps得到证实:

[详细阅读…]

Android ARM 32 ROP学习&爬坑记

一、首先编写level6.c文件,代码如下:

二、使用arm-linux-gcc编译,开始使用的是win10自带的ubuntu16.04编译,发现死活安装不了arm-linux-gcc的交叉编译环境,各种报错(坑)。最后果断用了自己的Centos虚拟机,妥妥的一次OK(编译时这里有个坑,开始没有使用-static参数编译,发现编译后的level6执行时提示错误):

三、需要使用socat这个神器,但是android的LINUX上没有该工具,于是又是一番Google(继续跳坑),找到一个android下使用的socat,另外还有两个神器,一起打包的下载地址:

打包下载

[详细阅读…]

初试Frida JS hook

根据网上教程,基本是写Python代码进行hook,但根据群里大牛指引,可以直接使用frida – U “com.example.test.XXX” -l xxx.js 直接注入。
JS代码编写规则
JS模板代码:

 

然后frida – U “com.example.test.XXX” -l xxx.js,开启HOOK,接着开启相应的APP,就会看到打印信息了。

Tea轮函数加密逆向笔记

部分加密环节逆向

  • REV R1 R1 //是指对R1的字节进行反转,如R1中本来保存的是744308C2,经过REV反转后,R1保存的字节为C2084374
  • JAVA传入的参数有两个,暂且称之为传参1、传参2
  • 传参1为8位字节长,分别保存在R0、R1两个寄存器中,传参2为16位字节长(疑似加密密钥),分别保存在R5、R6、R7、R12四个寄存器中

关键轮函数加密部分

R0 = C2084374 R1 = C500F400 R2 为栈缓冲区,主要用于字节中转 R3 = 0 R4 = E3779B90 R5 = 574B5A79 R6 = 54446575 R7 = 3146736B R8 = 78486E41

R3 = R3 + 0x9F000000 R8 = R12 + (R1 << 4 ) (左移4位)

R3 = R3 – 0xC80000

R3 = R3 – 0x8600

R3 = R3 – 0x47

R9 = R3 + R1

if (R3 = R4): R8 = R9 ^ R8 (位异或) R9 = R7 + (R1 >> 5) R8 = R8 ^ R9 R0 = R0 + R8 R9 = R6 + (R0 << 4) R8 = R5 + (R0 >> 5) R8 = R0 + R3 R9 = R9 ^ R9 R8 = R8 ^ R9 R1 = R1 + R8

循环结束后,R0 = E980238E (其实是R2反转后写入),R1 = BCDC6241

【转载】AndroidNative层文件解析漏洞挖掘指南

导语 

本文以手Q的一次文件解析类漏洞挖掘为例,叙述了Android Native层文件解析类型漏洞挖掘的过程

手Q这个应用从功能来说十分的庞大,如果使用类似MFFA的框架去挖掘文件解析类漏洞,效率低,而且文件入口在哪儿、如何利用脚本进行自动化都是非常大的问题。本文在一次手Q的文件解析类漏洞挖掘的过程中,提出了一种可能的解决问题的方案,妄称指南不吝赐教。

目录:

1、问题分析

2、流程图

3、so筛选

4、测试程序编写

5、test case生成

6、测试得出crash

7、未来的工作

[详细阅读…]