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

MD5Init、MD5Update、MD5Final说明

MD5Init是一个初始化函数,初始化核心变量,装入标准的幻数
MD5Update是MD5的主计算过程,inbuf是要变换的字节串,inputlen是长度,这个函数由getMD5ofStr调用,调用之前需要调用md5init
MD5Final整理和填写输出结果

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

导语 

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

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

目录:

1、问题分析

2、流程图

3、so筛选

4、测试程序编写

5、test case生成

6、测试得出crash

7、未来的工作

[详细阅读…]

【原创】Android源码编译并烧录至Nexus4

环境准备:

宿主机OS:Windows 10

Vmware:11

虚拟机OS:Ubuntu-14.04(64位)

硬盘空间:150G+(一定要分150G以上,有条件的话最好直接分个200G,我最开始分配的50G,下载到一半就提示空间满了,后来不得已使用了Gparted,为Ubuntu重新分配了150G空间,说多了都是泪~)

虚拟机CPU:1CPU 2核 (有条件最好2CPU 4核,总之越高越好)

虚拟机内存:3G(建议有条件直接分4G以上,总之越高越好,因为我宿主机只有4G,所以我只能给虚机分了3G,因此编译过程中足足花了近20个小时,说多还是泪~)

当然,如果你有实体机,配个32G内存,8核CPU的话,那速度必须杠杠滴!^_^


操作步骤:

1.建立一个文件夹用于专门存放Android源码:

2.安装Git:

3.下载JDK:

先确认是否安装了OpenJDK

如果安装了,建议将其卸载

到JAVA官网下载JDK

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载“jdk-8u91-linux-x64.tar.gz”

4.安装JDK:

5.配置JDK环境:

在末尾添加:

 

然后执行

使其立即生效,然后输入“java -version”,看是否显示为新安装的JDK8

6.安装依赖环境:

7.配置ccache:

末尾加入:

export USE_CCACHE=1

8.安装repo:

创建目录

下载repo

对repo赋予执行权限

9.下载Android源码:

同样,由于被墙的原因,我这里选择了清华大学的镜像进行下载

如果出现中断,那就再重新repo就是了,或者直接写个sh脚本进行无人值守下载,脚本如下:

在经历了2个晚上的下载,终于将4.4.2源代码下载到了本地,此时在Android目录下可以看到你下载好的源代码了(而在下载过程中,你是看不到任何内容的,通过ls-a命令可以看到.repo的隐藏文件夹,其实这个就是你在repo源代码过程中的缓存了)

10.下载Nexus4硬件驱动(否则烧录进去img后启动会一直卡在google LOGO界面)

  1. 进入https://developers.google.com/android/nexus/drivers 根据手机型号选对应的驱动包
  2. 下载三个驱动包: broadcom-mako-krt16s-f54c9ff9.tgz, lge-mako-krt16s-23ef7d53.tgz, qcom-mako-krt16s-cc4bd932.tgz 
  3. 解压到源码根目录(也就是~/Android)
  4. 运行三个解压后的sh文件, 在根目录下会多出vendor目录, 这就是硬件驱动目录

11.Android源代码初始化及编译:

因为要烧录至Nexus4手机,按照官方指导,需要选择“full_mako-userdebug”版本,然后就可以make了。

编译过程会相当相当漫长,而在编译过程中也会出现一些报错,只要根据报错内容去网上搜索,你会找到解决办法,我遇到了以下的报错和卡死,比如CCache的报错,通过网上搜索得到答案:

比如在“target:dex framework”报错,同样通过网上搜索,发现要将内存设置大一些就可以了

再比如在“libwebviewchromium.so”这里卡了很久没响应,通过网上搜索得到解决方法:

用同样的方法,我增加了两个swap,并各设置为1G大小,终于在经历了近20小时的编译后,见到了编译完成的提示。(泪奔啊~)

12.烧录img至Nexus4:

编译成功后,会在out目录生成“system.img boot.img recovery.img userdata.img”等需要的文件

  1. 进入刷机模式: adb reboot bootloader
  2. fastboot oem unlock
  3. fastboot format cache
  4. fastboot format userdata

分别刷入img文件:

  1. fastboot flash recovery recovery.img
  2. fastboot flash boot boot.img
  3. fastboot flash system system.img
  4. fastboot flash userdata userdata.img
  5. fastboot oem unlock
  6. fastboot reboot

下图为烧录后的系统截图: