吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5245|回复: 35
收起左侧

[Android Tools] YJ一款基于Frida的Android- SO动态库逆向命令行工具

[复制链接]
HNHuangJingYU 发表于 2023-8-1 00:36
本帖最后由 HNHuangJingYU 于 2024-1-17 23:03 编辑

前言

2024年 1月17日 星期三 23时00分15秒补充: 最新的源代码已经通过新仓库的形式上传,并提交了一些兼容代码,前段时间一直很忙很忙,不好意思大家

YJ是一款基于Frida框架的款Native层逆向分析的交互式工具,就像在GUN-LINUX上使用GDB工具一样,设计YJ的灵感来自GNU-GDB调试工具,它通过交互命令模式轻松地向展示你想要窥探的内存数据

Frida是一个底层hook工具及框架。提供了hook工具的同时也提供了大量的API操作,基于Frida框架的大多都是一些对Java代码层的一个Hook集成,而对于Native层方面较为全面的分析工具很零碎

安装

首先你得有Frida,我在开发和测试阶段分别采用了frida-15.2.2frida-16.0.0,而在完成开发的阶段已经发布了16.0.10,最后采用16.0.3是出于16.0.0发布的snapshots功能,它能提高YJ加载到交互界面的性能,目前该功能还在测试阶段,在不久后将会发布

pip3 install frida==16.0.0
git clone https://github.com/yang-datong/YJ-3.git

使用

通过ADB连接上已经开启了frida-serverAndroid手机

cd YJ
python3 exp.py [你的目标应用名称]

YJ_2_1.png

看起来有点意思,这是一个简单的内置shell交互模式

试用了一些python内置shell库都感觉不够轻量

YJ提供了一些在我用GDB调试时的一些常见命令,具体可以看help命令的输出文本,默认YJ启动的是attach模式直接附加到当前的App中:

可以通过python3 exp.py --help来查看spawn模式来调试目标进程,或者通过load来加载你的脚本(默认加载脚本为model/main.js)

  • 如果你有明确的逆向分析函数的话你可以直接使用breakpoint [functionName]来对目标地址下监控点(breakpoint支持对函数名、lib库名+具体偏移偏移、计算表达式下监控点,然后也可以删除当前监控点,重新监控到另一个地址)

YJ_2_2.png

  • 如果没有明确分析具体的函数,那么可使用watch命令来监控具体的lib库内存,如下:

YJ_2_3.png

如果该lib库是个热点库,那么立马会回收到监控的内存空间具体调用信息,

YJ_2_4.png

找到目标地址后,unwatch停止内存监控,进入一下操作,通过breakpoint [address]对目标地址下入监控点

YJ_2_5.png

当地址被执行时,那么就进入到我们的内存视图(arm64的寄存器非常多,这里一整页已经装不下了)

YJ_2_6.png

YJ_2_7.png

现在可以尽情享受了,你可以通过'print'、'hex'、'telescope'、'hexdump'等命令详细的查看指定的内存数据,比如

YJ_2_8.png

无Root

对于无root设备frida提供了frida-gadget库,之前将gadget.so用脚本一键注入到目标进行并使YJ调试上去的时候发现apktool重新打包的性能消耗太严重,考虑到稳定性现在只保留一键注入到lib库中,后续的打包以及绕过操作自行处理

YJ_2_9.png

通过bash inject.sh [gadgetInteractionType]可以选择你的gadget执行的模式,如监听模式脚本模式具体看https://frida.re/docs/gadget/

脚本模式中默认使用的脚本为explore.js 你可以在main()中定义你的规则

环境问题

电脑:目前只支持在bashpython环境中的机器,大众的来说Mac OSGUN-Linux可用,Windows不可用(以后会考虑在powershell中实现类bash的功能)

手机:目前只支持Android

调试目标:目前只支持Android Native层调试,Java层无任何支持

后续

  • 性能优化:会考虑热点功能函数使用全C实现
  • 自定义插件入口:扩展功能编解码器中直接从内存抽帧
  • 多平台支持:Windows
  • 数据结构详细分析:堆链条、内核结构、更详细完整的内存信息

开源协议

!!!免责声明!!!

因为设计到了逆向安全领域,所以不得不慎重声明,本项目使用Apache License 2.0开源协议

1.授权使用者免费使用个人专利

2.使用者必须放置协议说明

3.使用者需要对修改部分声明

4.禁止用作者的名号进行商业广告

5.原作者不承担代码使用后风险

本项目仅作为学习使用,一切后果本人概不负责


免费评分

参与人数 9吾爱币 +10 热心值 +9 收起 理由
debug_cat + 2 + 1 谢谢@Thanks!
肉蛋葱鸡 + 1 + 1 好的东西 谢谢@Thanks!
Tonyha7 + 2 + 1 用心讨论,共获提升!
laos + 1 + 1 我很赞同!
NPC2000 + 1 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
yp17792351859 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
skiss + 1 + 1 谢谢@Thanks!
iamshy520 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

爱飞的猫 发表于 2023-9-22 05:52
本帖最后由 爱飞的猫 于 2023-9-22 05:59 编辑
Hmily 发表于 2023-8-1 17:21
论坛只限制了最大尺寸,好像markdown的图片没有设置固定尺寸的方式。

截图应该是 200% (或更高)缩放下的截图,如果能用脚本在转换的时候处理一下就好了。即使用 <img srcset="xxx.png 2x" > 的写法。

Markdown 内确实没有这个支援,再加上论坛还是 Dz。也许可以扩展下渲染阶段,将文件名结尾为 @2x.png (包括其它后缀?)的附件图片自动将 src 改为带缩放信息的 srcset?(Dz 的图像元素下方有带原始文件名)

也可以加扩展,例如帖子顶部指定该贴所有图像的缩放值:

`md:{"imgScale":"2x"}`

然后整个脚本读每个楼层的发帖,如果第一个元素是 <code> 且内容为 md: 开头,则进行图像缩放处理。处理完毕后删除该元素。

// ==UserScript==
// @name         [52pojie] MD 图像缩放扩展
// @namespace    52pojie.爱飞的猫
// @version      0.1
// @description  将 `src` 改为 `srcset` 并带上缩放因子。
// @author       爱飞的猫
// @match        https://www.52pojie.cn/*
// @grant        none
// @run-at       document.start
// ==/UserScript==

function main() {
  const $$ = (query, root = document.body) => root.querySelectorAll(query);

  for (const post of $$('[id^="postmessage_"]')) {
    const config = {}; // 每个帖子都有自己的设定
    for (const md of $$(".parsedown-markdown", post)) {
      // 允许每一个 markdown 内容块更新扩展设定,应用到该帖当前和后续的内容。
      const configEl = md.firstElementChild?.firstElementChild; // p > code
      if (!configEl) continue;

      const configText = configEl.textContent?.trim() ?? "";
      if (configEl.tagName === "CODE" && configText.startsWith("md:{")) {
        try {
          Object.assign(config, JSON.parse(configText.slice(3)));
          configEl.remove();
        } catch (err) {
          console.error("[MD-EXT] could not parse md-config %o: %o", configEl, err);
        }
      }

      if (typeof config.imgScale === "string" && config.imgScale.endsWith("x")) {
        // 处理图像缩放
        for (const img of $$("img", md)) {
          const imgUrl = img.getAttribute("file") ?? img.getAttribute("src");
          img.removeAttribute("src"); // none.gif 可以删了
          img.setAttribute("lazyloaded", "true"); // 防止论坛的 lazy load 干扰

          img.srcset = `${imgUrl} ${config.imgScale}`;
          img.loading = "lazy"; // 改成 lazy load
        }
      }
    }
  }
}

addEventListener("DOMContentLoaded", main);
document.body && main();

md:{"imgScale":"3x"}

测试一下(3x):

测试一下


md:{"imgScale":"3.5x"}

测试一下(3.5x):

测试一下


点评

那还得单独添加一个MD  详情 回复 发表于 2023-9-22 10:23
故事散场 发表于 2023-10-12 14:04
请问大佬 提示
[Python] 纯文本查看 复制代码
    process.enable_debugger()
AttributeError: 'Session' object has no attribute 'enable_debugger'

这是测试版吗?

device = frida.get_usb_device()
process = device.attach('抖音')
process.enable_debugger()
 楼主| HNHuangJingYU 发表于 2023-8-1 00:51
这个图片好大啊,不知道怎么在这给它缩小显示。。。。。懂的朋友评论我再来修改。

点评

论坛只限制了最大尺寸,好像markdown的图片没有设置固定尺寸的方式。  详情 回复 发表于 2023-8-1 17:21
永远的永远 发表于 2023-8-1 11:21
感谢老哥分享
Shadow1005 发表于 2023-8-1 15:09
謝謝分享
GaryZong 发表于 2023-8-1 15:09
謝謝分享
xixicoco 发表于 2023-8-1 15:38
很牛的工具啊,感谢lz原创
Hmily 发表于 2023-8-1 17:21
HNHuangJingYU 发表于 2023-8-1 00:51
这个图片好大啊,不知道怎么在这给它缩小显示。。。。。懂的朋友评论我再来修改。

论坛只限制了最大尺寸,好像markdown的图片没有设置固定尺寸的方式。

点评

[md]截图应该是 200% 缩放下的截图,如果能用脚本在转换的时候处理一下就好了。即使用 `` 的写法。 Markdown 内确实没有这个支援,再加上论坛还是 Dz。也许可以扩展下渲染阶段,将文件名结尾为 `@2x.png` (包括  详情 回复 发表于 2023-9-22 05:52
zbx91 发表于 2023-8-1 20:05
本帖最后由 zbx91 于 2023-8-1 20:07 编辑

楼主的库源码分享不全面,很多内容没有。
zbx91 发表于 2023-8-1 20:27
不知道,你能坚持多久??
阿清 发表于 2023-8-1 21:11
支持手游不
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 01:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表