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

reflutter工具实践之--xx一番赏app

此文章已经录制b站视频:

flutter逆向案例-某某一番赏_哔哩哔哩_bilibili

一、工具介绍--reFlutter

这个框架帮助 Flutter 应用逆向工程,使用 Flutter 库的补丁版本,该版本已经编译并准备好重新打包应用。此库修改了快照反序列化过程,允许您以方便的方式执行动态分析。

项目地址:ptswarm/reFlutter:Flutter 逆向工程框架 (github.com)

二、使用方式

这个其实在github项目里面有明确的使用介绍。我简单说一下步骤。以我们的某app为例。

这个里面有个sign的值,我们需要去进行处理,后来把apk后缀改成zip后 发现是个 flutter app

使用工具逆向他 这里需要挂梯子 我使用的是小猫clash 各位根据自己的代理设置即可

pip3 install reflutter
​
D:\Android_tools\Flutter>set HTTPS_PROXY=http://127.0.0.1:7890
D:\Android_tools\Flutter>set HTTP_PROXY=http://127.0.0.1:7890
D:\Android_tools\Flutter>reflutter ru.apk

具体操作如下:

这样会生成一个

生成的 apk 必须对齐和签名 我们根据 reflutter作者给出的方式签名:

地址:Release v1.2.1 · patrickfav/uber-apk-signer (github.com)

进行签名:

java -jar uber-apk-signer-1.2.1.jar --allowResign -a release.RE.apk

会出现:

安装这个apk安装好之后 在/data/data/

三、分析dump.dart

先用adb导出dump.dart 用vscode打开:

D:\Android_tools\Flutter>adb pull /sdcard/Download/dump.dart
/sdcard/Download/dump.dart: 1 file pulled, 0 skipped. 113.4 MB/s (5300482 bytes in 0.045s)
​
D:\Android_tools\Flutter>

结合 上面的sign值是32位加密 我们猜测 是md5,所以我们在dump.dart中进行搜索(MD5等模糊词):

发现有个encodeMd5

那么去hook 偏移地址了。

 //先去枚举导出var exports = Module.enumerateExports("libapp.so");
for(let i = 0; i < exports.length; i++){console.log(exports[i].name + " " + exports[i].address);}

hook encodeMd5偏移地址:

var addr =  Module.findExportByName("libapp.so", "_kDartIsolateSnapshotInstructions");
​
console.log(addr); //0xb696387d
var funcAddr = addr.add(0x16beb8);
​
console.log(funcAddr); //0xb6980000
//
Interceptor.attach(funcAddr,{onEnter:function (args){this.x1 = args[1];console.log('args0:',hexdump(args[0]))console.log('args1:',args[1])console.log('args2:',hexdump(args[2]))
​},onLeave:function(retval) {console.log("--------------------")// console.log(Memory.readCString(this.x1));// console.log(Memory.readCString(retval));console.log('返回值:',hexdump(retval))}
​
})

hook结果:

四、验证结果

完结撒花!

相关文章:

  • 卤货商家配送小程序商城是怎样的模式
  • docker desktop for mac os如何使用本地代理
  • SpringBoot Gradle和Vue 两个项目结构进行解释,说明其作用
  • MySQL支持的四种隔离级别
  • 【Linux】线程池
  • 【Linux】系统文件IO·文件描述符fd
  • Zookeeper 集群的应用场景
  • 【docker1】指令,docker-compose,Dockerfile
  • 刷题——比较版本号
  • Android招聘市场技术要求越来越高,从事三年开发是否应该考虑转行?
  • 【React 】折叠面板,点击展开时再请求数据
  • STM32CubeIDE提示找不到头文件(No such file or directory)的解决办法
  • python3GUI--ktv点歌软件By:PyQt5(附下载地址)
  • USB - USB在消费领域的应用
  • 【nest】puppeteer 使用 addScriptTag 在页面中添加方法的方式
  • 【Leetcode】101. 对称二叉树
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • angular2开源库收集
  • docker python 配置
  • Java 多线程编程之:notify 和 wait 用法
  • js
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Zsh 开发指南(第十四篇 文件读写)
  • 安装python包到指定虚拟环境
  • 给新手的新浪微博 SDK 集成教程【一】
  • 机器学习中为什么要做归一化normalization
  • 技术:超级实用的电脑小技巧
  • 如何解决微信端直接跳WAP端
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 在Mac OS X上安装 Ruby运行环境
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #NOIP 2014# day.1 T2 联合权值
  • (C++17) std算法之执行策略 execution
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (简单) HDU 2612 Find a way,BFS。
  • (南京观海微电子)——示波器使用介绍
  • (算法)Travel Information Center
  • (转)IOS中获取各种文件的目录路径的方法
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET : 在VS2008中计算代码度量值
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core WebAPI中封装Swagger配置
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net Memory Profiler的使用举例
  • .net 按比例显示图片的缩略图
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 解决重复提交问题
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .Net多线程总结
  • .net访问oracle数据库性能问题
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET正则基础之——正则委托
  • .Net组件程序设计之线程、并发管理(一)