攻防世界app2 frida获取密钥
环境准备
安装mumu模拟器
pip安装frida,这里到最后一步setup需要很长时间。
在frida github下载对应服务端。
apk下载:https://adworld.xctf.org.cn/media/task/attachments/2554cf208cfb4cdf9218a840fa9bf237.apk
分析代码
使用jadx打开app,并来到MainActivity。
在click事件的处理当中,startActivity一个新的SecondActivity,进入它的onCreate
这里使用了Encryto.doRawData对数据进行处理,对这个函数进行查看,发现是从so文件中导入的函数。使用ida分析这个so文件。
打开后来到doRawData这个函数的位置,发现是使用了AES_128_ECB_PKCS5Padding_Encrypt进行加密。这里需要一个16位的密钥。使用frida,hook住该函数,取出对应的值就可以了
获取密钥
使用adb连接mumu。adb路径在:\MuMu\emulator\nemu\vmonitor\bin
当前无连接设备
连接设备
将之前下载的文件传到mumu里,并修改权限位777 。这里需要传入32位的文件。
直接运行,无报错即可
编写python脚本
import sys
import threading
import frida
PACKAGE = 'com.tencent.testvuln' def get_device():
mgr = frida.get_device_manager()
changed = threading.Event() def on_changed():
changed.set()
mgr.on('changed', on_changed) device = None
while device is None:
devices = [dev for dev in mgr.enumerate_devices() if dev.type == 'usb']
if len(devices) == 0:
print('Waiting for usb device...')
changed.wait()
else:
device = devices[0] mgr.off('changed', on_changed)
return device if __name__ == '__main__':
jscode = """
Java.perform(function () { var nativePointer = Module.findExportByName("libJNIEncrypt.so", "AES_128_ECB_PKCS5Padding_Encrypt");
send("native: " + nativePointer);
Interceptor.attach(nativePointer, {
onEnter: function(args){
send(args);
console.log("args[0]",Memory.readByteArray(args[0],20))
console.log("args[1]",Memory.readByteArray(args[1],20))
},
onLeave: function(retval){
send(retval);
console.log("output",Memory.readByteArray(retval,30))
}
}); });
""" def message(message, data):
if message["type"] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message) device = get_device()
print(device)
process = device.attach(PACKAGE)
print(process)
script = process.create_script(jscode) script.on("message", message)
script.load()
sys.stdin.read()
运行结果
找到了输入的值,密钥,和输出的值
攻防世界app2 frida获取密钥的更多相关文章
- CTF--web 攻防世界web题 get_post
攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...
- XCTF攻防世界Web之WriteUp
XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...
- 攻防世界Web新手解析
攻防世界入门的题目 view source 禁用右键,F12审查元素 get post hackbar进行post robots 直接访问robots.txt,发现f1ag_1s_h3re.ph文件, ...
- 异或加密 - cr2-many-time-secrets(攻防世界) - 异性相吸(buuctf)
Crib dragging attack 在开始了解 Crib dragging attack 之前,先来理一理 异或. 异或加密 [详情请戳这里] XOR 加密简介 异或加密特性: ① 两个值相同时 ...
- RSA(攻防世界)Rsa256 -- cr4-poor-rsa
RSA256 [攻防世界] 题目链接 [RSA256] 下载附件得到两个文件. 猜测第一个 txt 文件 可能为RSA加密密文 ,第二个估计就是密钥.依次打开看看: 果然如此. 目标: 寻找 n.e. ...
- 维吉尼亚密码-攻防世界(shanghai)
维吉尼亚密码 维吉尼亚密码是使用一系列 凯撒密码 组成密码字母表的加密算法,属于多表密码的一种简单形式. 加密原理 维吉尼亚密码的前身,是我们熟悉的凯撒密码. 凯撒密码的加密方式是依靠一张字母表中的每 ...
- RSA脚本环境配置-攻防世界-OldDriver
[Crypto] 题目链接 [RSA算法解密] 审题分析 首先拿到一个压缩包,解压得到文件enc.txt. 先不用去管其他,第一眼enc马上联想到 RSA解密.接着往下看 [{"c" ...
- pwn篇:攻防世界进阶welpwn,LibcSearcher使用
攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...
- 攻防世界 reverse evil
这是2017 ddctf的一道逆向题, 挑战:<恶意软件分析> 赛题背景: 员工小A收到了一封邮件,带一个文档附件,小A随手打开了附件.随后IT部门发现小A的电脑发出了异常网络访问请求,进 ...
随机推荐
- 【事件中心 Azure Event Hub】Event Hub Java SDK的消费端出现不消费某一个分区中数据的情况,出现IdleTimerExpired错误消息记录
问题情形 使用Java SDK编写的Event Hub消费端应用,随机性遇见了某个分区没有消费消息的情况,在检查日志时候,有发现IdelTimeExpired的错误记录.在重启应用后,连接EventH ...
- C# URL编码
#region URL编码 /// <summary> /// URL编码 /// </summary> /// <param name="str"& ...
- OpenCV(c++)-1 安装和配置OpenCV4.4(Windows+visual studio 2019)
@ 目录 安装OpenCV4 在Windows系统安装OpenCV4 配置visual studio 2019 配置包含路径 验证配置结果 安装OpenCV4 OpenCV是一个基于BSD许可(开源) ...
- js 日期格式、内容合法、比较大小、表单提交验证
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"/> 5 &l ...
- 6个冷门但实用的pandas知识点
1 简介 pandas作为开展数据分析的利器,蕴含了与数据处理相关的丰富多样的API,使得我们可以灵活方便地对数据进行各种加工,但很多pandas中的实用方法其实大部分人都是不知道的,今天就来给大家介 ...
- 01 . Go框架之Gin框架从入门到熟悉(路由和上传文件)
Gin框架简介 Gin是使用Go/Golang语言实现的HTTP Web框架, 接口简洁, 性能极高,截止1.4.0版本,包含测试代码,仅14K, 其中测试代码9K, 也就是说测试源码仅5k左右, 具 ...
- Java Web中解决乱码的方式
Java Web中解决乱码的方式 方式一:添加编码过滤器 package com.itmacy.dev.filter; import javax.servlet.*; import javax.ser ...
- 这篇文章揭开python进程、线程、协程神秘的面纱
1.概念 [关注公众号"轻松学编程"了解更多. 回复"协程"获取本文源代码.] 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务. 一个CPU,在 ...
- JS中使用for-each遍历数组
1 let array = [1, 3, 6, 8, 9, 0, 5]; 2 /* 3 index是数组索引 4 value代表数组的值 5 arr是指整个数组 6 */ 7 array.forEac ...
- Navicat无法直连MySQL怎么办?
本文背景 Navicat是图形化操作MySQL的强大工具,但是当数据库的服务器没有开放3306端口给办公网络时,在办公网使用navicat连接数据库是连不上的.要操作数据库,只能先ssh登陆到数据库服 ...