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