最近又在学习app有关的知识,学习了xposed、frida还有objection,简单记录下。
之前写过一篇笔记,关于app渗透的,当时的知识面实在太狭隘了,也了解的很少,导致花了蛮多的时间去弄。最近又在着重看了安卓的知识,这里有两个比较快捷的方法(xposed与Inspeckage组合
以及frida与http Decrypt组合
),简单介绍下
去年的时候就想装xposed这个框架了,mumu模拟器装不上,真机的安卓版本太高,导致这个想法一直搁浅了,最近装了genymotion模拟器,装xposed也挺顺利的
打开inspeckage,找到需要逆向的应用,点击LAUNCH APP
这时候记得转发一下端口,否则访问不到web页面
adb forward tcp:8008 tcp:8008
记得打开这个
然后在crypto模块就可以看到key和iv
直接拖出来,再把抓到的密文放到工具里解密:
得到明文,整个过程下来半小时不到
这个应该是2019年的工具了,可惜今年才发现
直接手机端运行frida以后,电脑运行http decrypt
打开http://127.0.0.1:8088/
在Home
模块填入需要hook的app包名,点击confirm
在Hooks
模块填入需要hook的方法关键字,点击confirm
进入app,下面就会显示hook到的结果
往下翻,就可以看到加密的方法
还有解密的方法
后续按照作者对工具的讲解(见https://www.t00ls.net/articles-51070.html),使用该工具的toBurp模块,发现在burp中调用app的方法的时候,会卡住,究其原因,在于http decrypt调用app方法的时候请求会一直无响应,导致burp卡死。(可能也是本地环境的原因)
后面研究发现工具作者是通过frida-rpc来调用的,在toBurp
模块将方法Generate export instance script
即可在Custom
模块看到相应的代码(作者还贴心地将context获取注释了)
既然本地工具会卡死,那么我们就自己通过frida-rpc进行调用就行了
使用HTTP Decrypt获取加密函数如下:
com.xxxx.xxx.encrypt.EncryptManager.encrypt
解密函数如下:
com.xxxx.xxx.encrypt.EncryptManager.decrypt
直接调用app类的加解密就行 python脚本如下
# -*- coding: utf-8 -*-
# @Time : 2022/10/14 2:57 下午
# @Author: f0ng
import frida
import json
from flask import Flask, jsonify, request
def on_message(message, data):
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message)
js = open('test.js', 'r', encoding='utf8').read()
session = frida.get_usb_device().attach('xxx.xxx.xxxxxx')
script = session.create_script(js)
script.on('message', on_message)
script.load()
app = Flask(__name__)
@app.route('/decrypt', methods=['POST']) # data解密
def decrypt_class():
data = request.get_data()
json_data = json.loads(data.decode("utf-8"))
postdata = json_data.get("data")
res = script.exports.decrypt(postdata)
return res
@app.route('/encrypt', methods=['POST']) # data解密
def encrypt_class():
data = request.get_data()
json_data = json.loads(data.decode("utf-8"))
postdata = json_data.get("data")
res = script.exports.encrypt(postdata)
return res
if __name__ == '__main__':
app.run()
js文件如下:
'use strict';
var rpc_result = null;
function decrypt (arg0){
var result = null;
Java.perform(function () {
console.log("begin");
try{
Java.choose("com.xxxx.xxx.encrypt.EncryptManager",{
onMatch: function (x) {
console.log("find instance :" + x);
console.log("result of fun(string) encrypt:" + arg0);
result=x.decrypt(Java.use("java.lang.String").$new(arg0));
},
onComplete: function () {
console.log("end");
}
});
}catch(e){send("xxxx, " + e + "-er00roo000r-")}
});
return result;
}
// Added Function
function encrypt(arg0){
var result = "";
Java.perform(function () {
console.log("begin");
try{
Java.choose("com.xxxx.xxx.encrypt.EncryptManager",{
onMatch: function (x) {
console.log("find instance :" + x);
console.log("result of fun(string) encrypt:" + arg0);
result=x.encrypt(Java.use("java.lang.String").$new(arg0));
},
onComplete: function () {
console.log("end");
}
});
}catch(e){send("xxxx, " + e + "-er00roo000r-")}
});
return result;
}
rpc.exports = {
decrypt: decrypt,
encrypt: encrypt,
};
直接调用加密:
直接调用解密:
后续发现objection也可以进行主动调用实例的方法,这里也提一下
首先使用objection去加载app
objection -g com.xxx.xxxxx explore
查找类
android hooking search classes com.sz
使用关键字匹配
android hooking list class_methods com.szxx.lib.encrypt.c
查看调用的方法
android hooking watch class_method com.szxx.lib.encrypt.c.a --dump-args --dump-backtrace --dump-return
操作app,得到运行的结果
解密函数如下
com.szxx.lib.encrypt.c.a
加密函数如下
com.szxx.lib.encrypt.c.d
获得类实例
android heap search instances com.szxx.lib.encrypt.c
进入实例,主动调用
# 进入该实例
android heap evaluate 13780587# 实例用clazz表示,所以调用加密的代码如下:
clazz.d("{\"app_type\":\"local\",\"mod\":\"system\",\"code\":\"getNoticeAll\",\"app_status\":\"xxxxxxxxxxxxxxxxxxxxxx:1\",\"build_id\":\"a1000\",\"oauth_type\":\"android\",\"oauth_id\":\"f618ff3a11beb6520b268addfa9388b4\",\"version\":\"5.3.1\",\"apiV2\":\"v2\",\"token\":\"\"}", "OTkZOVoPAAkIWAgICl1bDFgOXAkBSFwOAF8KDgBDX0oPDVhfAiQVNCE2AAkLKw==")
也可以得到最终结果,后续查阅资料发现objection也可以进行rpc调用,下篇文章会提到
https://github.com/rovo89/Xposed [Xposed框架]
https://github.com/ac-pm/Inspeckage [Inspeckage工具]
https://github.com/frida/frida [frida框架]
https://github.com/lyxhh/lxhToolHTTPDecrypt [httpdecrypt工具]
https://mp.weixin.qq.com/s/W2sVlbjKvWbFaZU7EfZqPw [httpdecrypt使用实例]
https://www.t00ls.net/articles-51070.html [httpdecrypt使用方法]