首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >干货--加密流量APP的渗透准备

干货--加密流量APP的渗透准备

作者头像
黑伞安全
发布2021-01-29 14:16:44
1K0
发布2021-01-29 14:16:44
举报
文章被收录于专栏:黑伞安全黑伞安全

感觉宋哥可以出一套APP渗透测试教程 从小白到老鸟

点个 在看 破30,直接写个app端渗透测试教程 m0nst3r YYDS

涉及工具

•JEB

•DDMS

•frida

•frida-dexdump

•burpy

过程

又是喜闻乐见的加密流量!搞它。

APP是加壳的,先上frida-dexdump脱壳。

这么多有encrypt关键字的,不好找,我们上DDMS:

通过profilling,我们很容易就能定位到加密函数:

上JEB,打开我们已经脱掉的dex文件:

恩,剩下的就是写脚本了。1. 为方便测试,我们使用burpy,这样就能直接在burpsuite上操作加密解密了。2. 为方便burpy调用加密和解密,需要把hook写成rpc的形式。

Talk is cheap, show me the code

import frida import sys import os import json class Burpy: def __init__(self): device = self._get_android_usb_device() pid = device.spawn("xxxx") self.session = device.attach(pid) device.resume(pid) self.rpc = self._load_rpc() def _get_android_usb_device(self): for x in frida.get_device_manager().enumerate_devices(): if "AOSP" in x.name: return x def _load_rpc(self): with open("/run/media/m0nst3r/SSD/work/scripts/xxxx.js") as f: myScript = self.session.create_script(f.read()) myScript.load() return myScript.exports def decrypt(self,header,body): body_json = json.loads(body) if body.startswith('{"request"'): data = body_json.get('request').get('body') dec_data = self.rpc.dec(data) body_json.get('request').update({"body":dec_data}) else: data = body_json.get('response') dec_data = self.rpc.dec(data) body_json.update({"response":dec_data}) body = json.dumps(body_json) return header,body def encrypt(self,header,body): body_json = json.loads(body) data = body_json.get('request').get('body') enc_data = self.rpc.enc(data) body_json.get('request').update({"body":enc_data}) body = json.dumps(body_json) return header,body

上面是burpy脚本,主要提供frida脚本的加载和加解密功能函数,主要实现在下面的frida hook的js代码中:

setTimeout(()=>{ rpc.exports = { dec: function(data) { let res = null Java.perform(()=>{ let instance = null Java.choose("xxxx.SecurityManager", { onMatch: function(x) { console.log("GetAESKey", x.getAesKey()) instance = x }, onComplete: function(x) {} }) res = instance.decypt(data) }) return res }, enc: function(data) { let res = null Java.perform(()=>{ let instance = null Java.choose("xxxx.SecurityManager", { onMatch: function(x) { console.log("GetAESKey", x.getAesKey()) instance = x }, onComplete: function(x) {} }) res = instance.encrypt(data) }) return res }, }; },5000)

由于目标函数是非静态函数,为了避免类实例化时会随机生成密钥,我们使用Java.choose从内存中查找已经实例化的对象。

另外,使用setTimeout的方式进行hook是为了给壳一些时间,不然会提示找不到目标类。

成果

配置好Burpy:

可以愉快的渗透了:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑伞攻防实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档