当前位置: 首页 > news >正文

【flutter对抗】blutter使用+ACTF习题

最新的能很好反编译flutter程序的项目

1、安装

git clone https://github.com/worawit/blutter --depth=1

图片

 

然后我直接将对应的两个压缩包下载下来(通过浏览器手动下载)

不再通过python的代码来下载,之前一直卡在这个地方。

如果读者可以正常运行init_env_win.py,手动这一步可以省略。

cd .\blutter\
python .\scripts\init_env_win.py

图片

再次运行就可以安装成功

图片

2、blutter反编译使用

图片

 

运行该工具,进入目标文件夹

提供libapp.so 和 libflutter.so 的目录

图片

 

图片

 

python blutter.py C:\Users\Le\Desktop\flutter\chall\lib\armeabi-v7a .\output

然后报错。。。

图片

 

但是问题不大,好像是我们的架构不支持,我们换一个

图片

 

再次运行,发现正在下载对应Dart版本的信息

图片

 

全程代理!

图片

 

要不然还会报错

正常情况下:

图片

 

安装完成后,再次运行命令:

图片

 

报错:0x22说明权限不够,使用管理员模式运行即可

图片

 

反编译成功

查看文件目录:

图片

 

到此,blutter模块反编译flutter成功!

3、IDA恢复libapp.so符号

图片

 

拖进IDA64

发现符号全无,不利于我们分析,此时blutter工具的用法就体现出来了

图片

 

运行生成的脚本:

图片

 

见证奇迹的时刻到了

图片

 

4、分析

图片

 

flutter中:onTap函数是按钮点击响应函数,CTF中以此作为入口进行分析

进入1DE500函数

图片

 

进入分析发现一堆代码

图片

 

目前不知道什么加密,因为“面目全非”(有256,%符号)

图片

 

使用blutter生成的frida脚本,对该函数进行hook,观察其返回结果

frida -U -f com.example.flutter_application_1 -l blutter_frida.js

图片

 

图片

 

hook目标函数

图片

 

然后发现没有触发

图片

 

猜测flag长度有限制,后面知道了原来是模拟器有bug,我换了真机才可以

图片

 

得到了比较的数组,也就是密文

Unhandle class id: 46, TypeArguments
GrowableList@750038d0f1 = [188698,0,{"key": "Unhandle class id: 46, TypeArguments"},34,{"key": [184,132,137,215,146,65,86,157,123,100,179,131,112,170,97,210,163,179,17,171,245,30,194,144,37,41,235,121,146,210,174,92,204,22]},0,0,0
]

接下来使用IDA进行so的一个动调

图片

 

图片

 

选择same

图片

 

找到module

图片

 

运行程序

图片

 

读者可以使用高级语言来看,为了理解更深刻,我这里采用了汇编来看

图片

 

可以看到比较256次

RC4的经典特征

图片

 

图片

 

图片

 

在异或出添加输出断点:

图片

 

搜索指令

  EOR             X5, X3, X2

图片

 

import idc
print(idc.get_reg_value("X2"),",",end="")

图片

 

图片

 

拿到异或的所有值

xor = [14, 14, 68, 80, 29, 201, 241, 46, 197, 208, 123, 79, 187, 55, 234, 104, 40, 117, 133, 12, 67, 137, 91, 31, 136,177, 64, 234, 24, 27, 26, 214, 122, 217]

然后还有密文

这里使用了oacia师傅的脚本

final = [184, 132, 137, 215, 146, 65, 86, 157, 123, 100, 179, 131, 112, 170, 97, 210, 163, 179, 17, 171, 245, 30, 194,144, 37, 41, 235, 121, 146, 210, 174, 92, 204, 22]
xor = [14, 14, 68, 80, 29, 201, 241, 46, 197, 208, 123, 79, 187, 55, 234, 104, 40, 117, 133, 12, 67, 137, 91, 31, 136,177, 64, 234, 24, 27, 26, 214, 122, 217]flag = [chr(xor[i]^final[i]^0xff) for i in range(len(final))]
print(''.join(flag))

感谢oacia师傅的分享

相关文章:

【flutter对抗】blutter使用+ACTF习题

最新的能很好反编译flutter程序的项目 1、安装 git clone https://github.com/worawit/blutter --depth1 然后我直接将对应的两个压缩包下载下来(通过浏览器手动下载) 不再通过python的代码来下载,之前一直卡在这个地方。 如果读者可以正…...

OpenHarmony 如何去除系统锁屏应用

前言 OpenHarmony源码版本:4.0release / 3.2 release 开发板:DAYU / rk3568 一、3.2版本去除锁屏应用 在源码根目录下:productdefine/common/inherit/rich.json 中删除screenlock_mgr组件的编译配置,在rich.json文件中搜索th…...

Python - 搭建 Flask 服务实现图像、视频修复需求

目录 一.引言 二.服务构建 1.主函数 upload_gif 2.文件接收 3.专属目录 4.图像修复 5.gif2mp4 6.mp42gif 7.图像返回 三.服务测试 1.服务启动 2.服务调用 四.总结 一.引言 前面我们介绍了如何使用 Real-ESRGAN 进行图像增强并在原始格式 jpeg、jpg、mp4 的基础上…...

C#基础——构造函数、析构函数

C#基础——构造函数、析构函数 1、构造函数 构造函数是一种特殊的方法,用于在创建类的实例时进行初始化操作。构造函数与类同名,并且没有返回类型。 构造函数在对象创建时自动调用,可以用来设置对象的初始状态、分配内存、初始化字段等操作…...

jmeter 如何循环使用接口返回的多值?

有同学在用jmeter做接口测试的时候,经常会遇到这样一种情况: 就是一个接口请求返回了多个值,然后下一个接口想循环使用前一个接口的返回值。 这种要怎么做呢? 有一定基础的人,可能第一反应就是先提取前一个接口返回…...

VLAN 详解一(VLAN 基本原理及 VLAN 划分原则)

VLAN 详解一(VLAN 基本原理及 VLAN 划分原则) 在早期的交换网络中,网络中只有 PC、终端和交换机,当某台主机发送一个广播帧或未知单播帧时,该数据帧会被泛洪,甚至传递到整个广播域。而广播域越大&#xff…...

Android - 分区存储 MediaStore、SAF

官方页面 参考文章 一、概念 分区存储(Scoped Storage)的推出是针对 APP 访问外部存储的行为(乱建乱获取文件和文件夹)进行规范和限制,以减少混乱使得用户能更好的控制自己的文件。 公有目录被分为两大类:…...

Shiro框架权限控制

首先去通过配置类的用户认证,在用户认证完成后,进行用户授权,用户通过授权之后再跳转其他的界面时,会进行一个验证,当前账号是否有权限。 前端权限控制显示的原理 在前端中,通常使用用户的角色或权限信息来…...

centOS7 安装tailscale并启用子网路由

1、在centOS7上安装Tailscale客户端 #安装命令所在官网位置:https://tailscale.com/download/linux #具体命令为: curl -fsSL https://tailscale.com/install.sh | sh #命令执行后如下图所示2、设置允许IP转发和IP伪装。 安装后,您可以启动…...

spring 项目中如何处理跨越cors问题

1.使用 CrossOrigin 注解 作用于controller 方法上 示例如下 RestController RequestMapping("/account") public class AccountController {CrossOriginGetMapping("/{id}")public Account retrieve(PathVariable Long id) {// ...}DeleteMapping(&quo…...

importlib --- import 的实现

3.1 新版功能. 源代码 Lib/importlib/__init__.py 概述 importlib 包具有三重目标。 一是在 Python 源代码中提供 import 语句的实现(并且因此而扩展 __import__() 函数)。 这提供了一个可移植到任何 Python 解释器的 import 实现。 与使用 Python 以…...

【PyTorch】现代卷积神经网络

文章目录 1. 理论介绍1.1. 深度卷积神经网络(AlexNet)1.1.1. 概述1.1.2. 模型设计 1.2. 使用块的网络(VGG)1.3. 网络中的网络(NiN)1.4. 含并行连结的网络(GoogLeNet)1.5. 批量规范化…...

用python编写九九乘法表

1 问题 我们在学习一门语言的过程中,都会练习到编写九九乘法表这个代码,下面介绍如何编写九九乘法表的流程。 2 方法 (1)打开pycharm集成开发环境,创建一个python文件,并编写第一行代码,主要构建…...

Google Gemini 模型本地可视化

Google近期发布了Gemini模型,而且开放了Gemini Pro API,Gemini Pro 可免费使用! Gemini Pro支持全球180个国家的38种语言,目前接受文本、图片作为输入并生成文本作为输出。 Gemini Pro的表现超越了其他同类模型,当前版…...

数据修复:.BlackBit勒索病毒来袭,安全应对方法解析

导言: 黑色数字罪犯的新玩具——.BlackBit勒索病毒,近来成为网络安全领域的头号威胁。这种恶意软件以其高度隐秘性和毁灭性而引起广泛关注。下面是关于.BlackBit勒索病毒的详细介绍,如不幸感染这个勒索病毒,您可添加我们的技术服…...

拓扑排序实现循环依赖判断 | 京东云技术团队

本文记录如何通过拓扑排序,实现循环依赖判断 前言 一般提到循环依赖,首先想到的就是Spring框架提供的Bean的循环依赖检测,相关文档可参考: https://blog.csdn.net/cristianoxm/article/details/113246104 本文方案脱离Spring Be…...

Java的NIO工作机制

文章目录 1. 问题引入2. NIO的工作方式3. Buffer的工作方式4. NIO数据访问方式 1. 问题引入 在网络通信中,当连接已经建立成功,服务端和客户端都会拥有一个Socket实例,每个Socket实例都有一个InputStream和OutputStream,并通过这…...

一个简单的光线追踪渲染器

前言 本文参照自raytracing in one weekend教程,地址为:https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪? 光线追踪模拟现实中的成像原理,通过模拟一条条直线在场景内反射折射,最终…...

C++学习笔记(十二)------is_a关系(继承关系)

你好,这里是争做图书馆扫地僧的小白。 个人主页:争做图书馆扫地僧的小白_-CSDN博客 目标:希望通过学习技术,期待着改变世界。 提示:以下是本篇文章正文内容,下面案例可供参考 文章目录 前言 一、继承关系…...

DC电源模块的设计与制造技术创新

BOSHIDA DC电源模块的设计与制造技术创新 DC电源模块的设计与制造技术创新主要涉及以下几个方面: 1. 高效率设计:传统的DC电源模块存在能量转换损耗较大的问题,技术创新可通过采用高效率的电路拓扑结构、使用高性能的功率开关器件和优化控制…...

Sketch for Mac:实现你的创意绘图梦想的矢量绘图软件

随着数字时代的到来,矢量绘图软件成为了广告设计、插画创作和UI设计等领域中必不可少的工具。在众多矢量绘图软件中,Sketch for Mac(矢量绘图软件)以其强大的功能和简洁的界面脱颖而出,成为了众多设计师的首选。 Sket…...

ReactNative0.73发布,架构升级与更好的调试体验

这次更新包含了多种提升开发体验的改进,包括: 更流畅的调试体验: 通过 Hermes 引擎调试支持、控制台日志历史记录和实验性调试器,让调试过程更加高效顺畅。稳定的符号链接支持: 简化您的开发工作流程,轻松将文件或目录链接到其他…...

SVN忽略文件的两种方式

当使用版本管理工具时,提交到代码库的文档我们不希望存在把一些临时文件也推送到仓库中,这样就需要用到忽略文件。SVN的忽略相比于GIT稍显麻烦,GIT只需要在.gitignore添加忽略规则即可。而SVN有两种忽略方式,一个是全局设置&#…...

手写VUE后台管理系统10 - 封装Axios实现异常统一处理

目录 前后端交互约定安装创建Axios实例拦截器封装请求方法业务异常处理 axios 是一个易用、简洁且高效的http库 axios 中文文档:http://www.axios-js.com/zh-cn/docs/ 前后端交互约定 在本项目中,前后端交互统一使用 application/json;charsetUTF-8 的请…...

JavaScript装饰者模式

JavaScript装饰者模式 1 什么是装饰者模式2 模拟装饰者模式3 JavaScript的装饰者4 装饰函数5 AOP装饰函数6 示例:数据统计上报 1 什么是装饰者模式 在程序开发中,许多时候都我们并不希望某个类天生就非常庞大,一次性包含许多职责。那么我们就…...

C++学习笔记01

01.C概述&#xff08;了解&#xff09; c语言在c语言的基础上添加了面向对象编程和泛型编程的支持。 02.第一个程序helloworld&#xff08;掌握&#xff09; #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;//标准命名空间int main() {//co…...

【UE5】初识MetaHuman 创建虚拟角色

步骤 在UE5工程中启用“Quixel Bridge”插件 打开“Quixel Bridge” 点击“MetaHumans-》MetaHuman Presets UE5” 点击“START MHC” 在弹出的网页中选择一个虚幻引擎版本&#xff0c;然后点击“启动 MetaHuman Creator” 等待一段时间后&#xff0c;在如下页面点击选择一个人…...

物流实时数仓:数仓搭建(DWD)一

系列文章目录 物流实时数仓&#xff1a;采集通道搭建 物流实时数仓&#xff1a;数仓搭建 物流实时数仓&#xff1a;数仓搭建&#xff08;DIM&#xff09; 物流实时数仓&#xff1a;数仓搭建&#xff08;DWD&#xff09;一 文章目录 系列文章目录前言一、文件编写1.目录创建2.b…...

MATLAB安装

亲自验证有效&#xff0c;多谢这位网友的分享&#xff1a; https://blog.csdn.net/xiajinbiaolove/article/details/88907232...

C语言——预处理详解(#define用法+注意事项)

#define 语法规定 #define定义标识符 语法: #define name stuff #define例子 #include<stdio.h> #define A 100 #define STR "abc" #define FOR for(;;)int main() {printf("%d\n", A);printf("%s\n", STR);FOR;return 0; } 运行结果…...

网站做的优化 怎么排名靠后了/nba排名2021最新排名

Pig...

公司做公司网站广告/谷歌网站推广

Spring应用的几种事务处理机制 Java Transaction API和XA协议是Spring常用的分布式事务机制&#xff0c;不过你可以选择选择其他的实现方式。理想的实现取决于你的应用程序使用何种资源&#xff0c;你愿意在性能、安全、系统稳健性、数据完整方面做出何种权衡。在这次JavaWorld…...

wordpress卸载 数据库/seo整站优化服务教程

点击蓝字关注我们UDExpo-Display2月28日消息 2020 年 6 月 19 日&#xff0c;三星电子向 WIPO(世界知识产权局)申请了一项名为 “包括子显示屏及其操作方法的电子设备”的专利&#xff0c;描述了一种手机&#xff0c;其前置摄像头部分可通过切换屏幕分层进行隐藏。该专利已于 1…...

徐州市水利工程建设有限公司网站/网络营销公司好不好

1.什么是分布式锁 线程锁主要用来给方法&#xff0c;代码加锁。当某个方法或代码使用锁&#xff0c;在同一时刻仅有一个线程执行改方法或改代码段。线程锁只在同一JVM中有效果&#xff0c;因为线程锁的实现在根本上是依靠线程之间共享内存实现的&#xff0c;进程锁是为了控制…...

wordpress优秀中文主题/怎样做一个网页

直播概要 直播演讲主题&#xff1a;远程办公有点上头&#xff1f;解锁云上应用现代化的奥秘 直播时间&#xff1a;5月31日19:00 直播地址&#xff1a;微信视频号、哔哩哔哩、知乎搜索亚马逊云科技&#xff0c;三大平台同步直播。 话题介绍 在新挑战频发的动荡变革时期&…...

会做网站的公司/2345网址导航智能主板

工具 window10 django2.2.2 mysql5.6 django默认使用mysqlclient连接mysql&#xff0c;但是在window下直接安装mysqlclient不容易成功&#xff0c;可以使用pymysql 代替。 但使用如下方式报错&#xff1a; #settings.py import pymysql pymysql.intall_as_MySQLdb()django 3.…...