普通网友 2024-07-15 13:50 采纳率: 0%
浏览 9

Frida修改函数的返回值的问题

Frida修改函数的返回值的问题

功能描述:Windows下面的某个exe应用程序,基于MFC的对话框应用小工具。该工具与某个硬件(USB口,非安卓设备)进行通讯,其中有一个函数(比如abcde),用户获取硬件的状态信息,当检测到某个字段改变后,就能显示出全部功能,否则只能显示出一小部分功能。

问题描述:现在我用frida结合js脚本,已经实现了这个返回返回值的替换。然而在实际测试过程中,发现该功能并未真实生效。如下所示,返回值和真机上操作的返回值是相同的(把c7改为d7)。请问这个会是什么原因?我的目标是不用连接物理硬件而直接Hook该函数能显示出全部的完整功能。

onLeave structPtr: 0xf94f520

Original function return value: 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000050 aa bb cc dd ee ff c7 aa bb cc dd ee ff aa bb cc

00000060 00 38 f0 40 00 00 00 00 00 00 10 01 00 01 00 00

00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Modifying value at position 86 from 0xc7 to 0xd7.

Value at position 86 after modification: 0xd7

xxxxx value after modification: 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF

00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000050 aa bb cc dd ee ff d7 aa bb cc dd ee ff aa bb cc

00000060 00 38 f0 40 00 00 00 00 00 00 10 01 00 01 00 00

00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Function returned: 0

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-15 13:50
    关注

    引自免费微信小程序:皆我百晓生

    这个问题涉及到Frida的使用和JavaScript脚本编写,以及可能的软件内部逻辑问题。在查看你的问题描述时,我能看出你已经成功Hook了函数并替换了返回值中的某个值。但是实际功能并未生效,这可能有以下几个原因:

    1. 返回值只是表面现象:你的函数可能不仅仅依赖于这个返回值。可能有其他的内部状态变量或者全局变量控制着功能的开启和关闭。即使你改变了这个返回值,其他部分的代码可能依然没有处理这种改变,或者这个函数返回的结果可能是基于其他地方的值计算结果。所以只有更改这个返回值并不能实现你预期的功能。
    2. 依赖硬件状态:由于你的应用是与硬件交互的,可能存在一些硬件状态或硬件与软件的同步问题。即使你在软件层面修改了返回值,如果硬件状态没有同步更新,或者软件的某个地方还需要真正的硬件操作后才能完成某个功能的激活,那么你可能无法达到目的。你需要确认是否有这部分的逻辑在你的代码中,尤其是涉及到外部设备状态的读取或者中断处理的代码。
    3. Hook点可能不对:你的Hook点可能没有设置在关键的位置。如果这个函数在被调用之前或之后还有其他处理逻辑,可能在你替换返回值之后这部分逻辑没有被执行或者没有达到预期的效果。你需要确保你的Hook点是在正确的位置。
    4. 底层实现的细节:此外,因为Windows程序的复杂性以及可能存在的一些底层细节处理,某些函数的返回值不仅仅是表层数值的简单变化,还可能是底层数据结构的引用或者指针的改变等。在这种情况下,仅仅替换返回值可能无法达到期望的效果。你可能需要更深入地理解程序的内部逻辑和底层实现。

    针对上述问题,你可以尝试以下步骤来解决你的问题:

    • 分析软件的内部逻辑和与外部硬件的交互逻辑,确认是否有其他的因素在影响功能的开启和关闭。
    • 检查你的Hook点是否正确,尝试在关键位置添加更多的Hook点来观察程序的执行流程。
    • 使用调试工具(如Visual Studio等)来查看程序的运行状态和变量的变化,确认是否真的只修改了返回的值就可以影响功能的状态。如果存在外部设备的同步问题或者特定的执行顺序问题,可能需要对相关部分进行深入的了解和调整。
    • 考虑使用更底层的调试技术或者API层面的Hook技术来确保能够捕获到所有相关的操作和状态变化。

    最后,关于你的代码问题,如果你可以提供更多的关于你的JavaScript脚本的详细代码以及相关的软件信息(如程序的语言版本、编译环境等),我可以更具体地帮助你找到问题并给出解决方案。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月15日

悬赏问题

  • ¥15 关于将inet引入的相关问题
  • ¥15 关于一个倒计时的操作和显示设计
  • ¥15 提问STK的问题,哪位航天领域的同学会啊
  • ¥15 苹果系统的mac m1芯片的笔记本使用ce修改器使用不了
  • ¥15 单相逆变的电压电流双闭环中进行低通滤波PID算法改进
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 如何卸载arcgis 10.1 data reviewer for desktop
  • ¥15 共享文件夹会话中为什么会有WORKGROUP
  • ¥15 关于#python#的问题:使用ATL02数据解算光子脚点的坐标(操作系统-windows)
  • ¥115 关于#python#的问题:未加密前两个软件都可以打开,加密后只有A软件可打开,B软件可以打开但读取不了数据