大白使用案例之 --- 修改返回值
本帖最后由 wtujoxk 于 2023-9-21 10:13 编辑大白修改返回值有三种方法
1、保存当前上下文并在返回时修改
2、函数返回时修改上下文
3、函数直接返回修改上下文
这里只讲第三种,并且在函数内部任意一个位置下断。因为第三种懂了,前两种自然就没问题了。
下面使用论坛的一个软件作为案例。
使用案例:https://www.chinapyg.com/thread-148241-1-1.html
软件具体分析过程略……
软件内有一个多通道使用,在压缩包里提供的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
感谢分享 ~ 学习学习学习 感谢分享,很喜欢这样的文章。 x谢谢分享
页:
[1]