wtujoxk 发表于 2023-9-18 18:08

Baymax Patch Tools 大白使用案例之 --- 修改函数返回值

本帖最后由 wtujoxk 于 2023-9-21 10:11 编辑

Baymax Patch Tools 大白修改函数返回值有三种方法
1、保存当前上下文并在返回时修改
2、函数返回时修改上下文
3、函数直接返回修改上下文
这里只讲第三种,并且在函数内部任意一个位置下断。因为第三种懂了,前两种自然就没问题了。

下面使用个软件作为案例。
https://nns.lanzoub.com/iOHLv18ytuad

软件具体分析过程略……

软件内有一个多通道使用,在压缩包里提供的key中只是单一通道,如果想使用多通道,可以一补丁通杀; 略……
但是这里为了使用大白修改返回值,使用多通道时,只要将SoftDog.dll的GetAppendNum函数返回值修改为对应的通道数即可,
这里以3通道为例。只需将GetAppendNum的返回值修改为3

打开x32dbg.exe加载程序,并在GetAppendNum下断,首先得到GetAppendNum的返回ESP
函数进入的ESP,如下图:

将函数运行到返回,并查看ESP位置,返回后的ESP是进入时+4,记录下这个位置,后面有用

重新载入程序,并来到GetAppendNum断点位置,现在在函数内A位置下断进行操作
程序每次载入时,地址会不一样,那个不用管,我们只看ESP的位置就行

注意这四个值
函数内下断的位置 --> 对应大白偏移值 填A
当前断点ESP的位置-->用这个值计算偏移
函数进入时ESP的位置--> 对应大白返回地址栈偏移 当前的ESP+4
函数返回时ESP的位置--> 对应大白栈调整 当前的ESP+8

注意:因为在这个位置下断,做修改,破坏了栈平衡,所以要恢复平衡

如下图,恢复栈平衡


最后,大白补丁设置如下



附上软件成功后三通道的截图!


Nisy:
这个玩法在于 任意地址都属于函数内 并且可以返回堆栈的某个地址(直接返回或在返回地址设置中断),可以返回到调用方的调用方,堆栈中有返回地址 就可以指定返回到那,当然堆栈要自己去平衡!

测试返回值案例:https://nns.lanzoub.com/ikbZQ199py2b

liusu277 发表于 2023-9-18 22:03

感谢大牛分享思路

ff963738610 发表于 2023-9-18 22:08

提供新思路了 ,谢谢

Networktest2022 发表于 2023-9-19 07:50

多出点64位的案例

wtujoxk 发表于 2023-9-19 08:43

Networktest2022 发表于 2023-9-19 07:50
多出点64位的案例

64位是一样的,只要你在调试时能找到函数的返回值,计算方法一样,

zjy131458 发表于 2023-9-19 08:46

大白补丁是非常强大的工具,楼主的方法值得学习

Owner_Cracker 发表于 2023-9-19 10:27

本帖最后由 Owner_Cracker 于 2023-9-19 10:48 编辑

问个比较小白的问题:CPU中这列是怎么设置的

wtujoxk 发表于 2023-9-19 10:50

Owner_Cracker 发表于 2023-9-19 10:27
问个比较小白的问题:CPU中这列是怎么设置的

这个位置鼠标双击

andydau 发表于 2023-9-19 18:29

可以负责任的告诉你,不是这么用的。

paulbaby3000 发表于 2023-9-19 21:56

感谢大牛的技术分析
页: [1] 2
查看完整版本: Baymax Patch Tools 大白使用案例之 --- 修改函数返回值