学习逆向第5天
背景:
刚接触Android漏洞挖掘,无意间看SharedPreferences存储用户密码,想着深入了解下,故写下这篇文章,其中还包括调用app自有的加解密函数,加解密。
正文:
定位SharedPreferences,解包apk找到加解密算法,hook加解密利用重载/调用两种方式加解密
1、定位SharedPreferences
SharedPreferences是什么?
Android系统提供了轻量级的数据存储方式——SharedPreferences存储。它屏蔽了对底层文件的操作,通过为程序开发人员提供简单的编程接口,实现以最简单的方式对数据进行永久保存。这种方式主要对少量的数据进行保存,比如对应用程序的配置信息,手机应用的主题,游戏的玩家积分等进行保存。例如,对微信进行通用设置后可以对相关配置信息进行保存。(简单说,就是存储用户密码,cookie、token等,方便用户不用每次打开app都要登陆一次)
1.1、接下来就是找 SharedPreferences
首先定位app包名
打开cmd
输入 adb shell dumpsys activity activities
如下找到包名 com.xxx.vipa
1.2、这里需要用到工具 MT管理器 https://mt2.cn/
安装到手机里,然后找到需要调试的app(美食Aapp)
默认路径(/data/data/里面)
点进去,如下,找到 shared_prefs
再次点进去,里面有可能会有很多文件,但是我们要找带 preference ,sp 等关键字的文件,一定是.xml结尾
我们查看这个带有 preference 的文件
如下,发现留存在本地的 账户密码,但是密码是加密了的
这就是寻找app sharedpreferences的方法
2、解包apk找到加解密算法
2.1、这里加密了我们目前需要的是找到加密算法。使用jadx打开apk
因为涉及账户密码,我们先看下登陆数据包是那个url
通过url路径在jadx查询到如下
2.2、点击 188 行的 login 查看被谁调用
只有一个调用,如下,182行
往下看看到有一个 saveUserNamePassword()
我们双击点进去
找到了加密过程,我们点进 encrypt()函数
成功找到加解密函数
接下来需要hook一下,看看是不是真的是用来加解密 sharedpreferences的
3、hook加解密利用重载/调用两种方式加解密
3.1、现附上代码
import time
import frida, sys
date_str = time.strftime('%m-%d %H:%M:%S')
def on_message(message, data):
if message['type'] == 'send':
print(f"[{date_str}] {message['payload']}")
else:
print(f"[{date_str}] {message}")
def run_all():
jscode1 = """
Java.perform(function() {
var targetClass='com.jnt.xxx.utils.DES';
var methodName='encrypt';
var gclass = Java.use(targetClass);
gclass[methodName].implementation = function() {
var i=this[methodName]("cccc");
console.log('\treturn '+i);
return i;
};
});
"""
# attach目标App进程
target_app = 30999
process = frida.get_usb_device().attach(target_app)
# 将JS代码注入进程,并附加监听方法,用来获取返回的日志信息
script = process.create_script(jscode1)
script.on('message', on_message)
# 打印起始日志
print(f'[{date_str}] Start Frida on {target_app}')
# 加载注入的JS代码逻辑
script.load()
# 使用系统输入语句阻止函数运行完毕自动退出
sys.stdin.read()
if __name__ == '__main__':
run_all()
如上,这里使用的是加密函数
我们这里运行下脚本
需要app调用下函数才可以。我们点击如下
点击记住账户,他就会调用DES函数做加解密
输出如下
感谢大家看到这里!有什么问题可以评论,我都会一一答复的。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课