type
status
date
slug
summary
tags
category
icon
password
一、Java层分析
二、Native层分析
1、Java_cn_pojie52_cm01_MainActivity_check
首先分析入参出参和大体流程。
2、sub_B90
接下来看下sub_B90。
其中主要部分进行了两次循环,第一个大循环到256次,第二个里面有异或运算,这两个特征一出我们大概率可以确定是RC4。
使用frida hook一下,看下出入参。
3、sub_D90
接下来分析sub_D90,函数逻辑比较复杂就不先细分析,先上Hook,返回值v9会和v19做比较,既然这个部分在RC4异或处理后,那我们大胆猜测是base64(当然只是进行了某种假想并没有进行验证,有可能猜错,但是不影响分析)。
暂时不看sub_D90里面的逻辑,先根据猜测的来,那么整体逻辑大概如下。
在之前我们了解到,RC4是对称加密算法,就是说在进行流式加密/解密时,用的是相同的秘钥进行的异或运算,那么我们是否可以根据运算后的flag,去跟秘钥做一次异或运算,获得我们应该输入的字符串那?答案是:okkk!
4、获取v19
首先我们要找到v19的值,v19在比较的时候已经组装完毕了,所以我们要在此处hook,拿出v19的值。
看下汇编指令,v19的值在X9临时寄存器里面,只有hook 0xB30的位置就能取出X9的值。
5、获取结果
直接进行RC4解密逻辑。
总结:虽然RC4的特征看起来不是很明显,密钥流的产生过程及异或运算的特征来确定是否是RC4,当然,因为RC4属于流加密,所以也可以把明文的长度和加密后的长度是否相等作为入手点。apk样例来自52破解春节安卓题。
- 作者:404False
- 链接:https://blog.404nofoundx.top//article/9a087ac4-6ea5-4aa9-961c-fee39799524f
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。