首页
社区
课程
招聘
未解决 [求助]如何破解次数限制?
发表于: 2024-2-14 23:22 1998

未解决 [求助]如何破解次数限制?

2024-2-14 23:22
1998

最近尝试一款小软件,有免安装版,软件名称为Aba Search and Replace,下载地址:https://www.abareplace.com/download/

时间限制与注册提醒弹窗,均可去除,但它的未注册版限制只能替换3次搜索到的字符。本人实在找不到修改点,特发帖求助。

限制只能替换3次的弹窗代码如下:
0000000140003FA3 | FF15 97170500 | call qword ptr ds:[<MessageBoxW>] |

请高手帮忙分析一下,这个3次的限制在哪? 学习一下,感谢……


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 25966
活跃值: (5042)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
弹窗代码上面有判断紧接着跳转:
0000000140003F34  | 83FE 03                 | cmp esi,0x3                                  |
0000000140003F37  | 0F86 C7000000           | jbe abareplace64.140004004                   |
将此处跳转改为 jmp 后弹窗跳过,但发现 3 次限制未解除
在 API WriteFile 下断,定位到写入替换字符的指令:
0000000140029B9C  | FF15 96B70200           | call qword ptr ds:[<WriteFile>]              |
堆栈回溯一级找到调用 call,此 call 只执行了 3 次,猜想这里是关键点:
000000014000FB7B  | E8 809C0100             | call <abareplace64.sub_140029800>            |
向上看有判断跳过这个 call:
000000014000F99A  | 41:85C4                 | test r12d,eax                                |
000000014000F99D  | 74 04                   | je abareplace64.14000F9A3                    |
000000014000F99F  | 45:8957 24              | mov dword ptr ds:[r15+0x24],r10d             |
000000014000F9A3  | 41:837F 24 00           | cmp dword ptr ds:[r15+0x24],0x0              |
000000014000F9A8  | 0F84 59020000           | je abareplace64.14000FC07                    |
改为:
000000014000F99D  | EB 04                   | jmp abareplace64.14000F9A3                   |
3 次替换限制解除
2024-2-15 02:07
0
雪    币: 4615
活跃值: (2862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢指导
但不明白的是,为何说je abareplace64.14000F9A3是跳过下面很远的这个call <abareplace64.sub_140029800> 呢?
通过调试得到的?直观看跳转关系,好像看不出来
2024-2-15 05:16
0
雪    币: 4615
活跃值: (2862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
huangyalei 弹窗代码上面有判断紧接着跳转: 0000000140003F34 | 83FE 03 | cmp esi,0x3 ...
请教不知您是如何调试的?我没法调试(用的是x64dbg),经常调试到半途就停止了!上述的弹窗call,是通过附加,再查看堆栈得到的。

像您这样下断API后,如何才能顺利调试呢?
2024-2-15 05:54
0
雪    币: 4615
活跃值: (2862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5

AbaReplace32 的也搞定了,依葫芦画瓢搞出来的,再次感谢!

32位的改法稍微有点不一样;AbaReplace32.exe(3 次替换限制解除):

0040CB9D                  | 854424 1C                | test dword ptr ss:[esp+1C],eax        | =》test dword ptr ss:[esp+1C],0x1


但调试如何顺利进行到底,还没搞明白

最后于 2024-2-15 07:11 被martin325编辑 ,原因:
2024-2-15 06:49
0
雪    币: 25966
活跃值: (5042)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
martin325 感谢指导 但不明白的是,为何说je abareplace64.14000F9A3是跳过下面很远的这个call 呢? 通过调试得到的?直观看跳转关系,好像看不出来
是下面的 je abareplace64.14000FC07 跳过
改 je abareplace64.14000F9A3 是为了满足上面指令跳转的条件
2024-2-15 09:11
0
雪    币: 25966
活跃值: (5042)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
martin325 请教不知您是如何调试的?我没法调试(用的是x64dbg),经常调试到半途就停止了!上述的弹窗call,是通过附加,再查看堆栈得到的。 像您这样下断API后,如何才能顺利调试呢?
不明白你为何不能顺利调试,这个程序又没有反调试
下了断点,执行到断点的时候应该会断下的
如果断下后不能继续执行,你把所有线程恢复看看
我记得上面的代码是在子线程中执行的
2024-2-15 09:17
0
雪    币: 25966
活跃值: (5042)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
martin325 AbaReplace32&nbsp;的也搞定了,依葫芦画瓢搞出来的,再次感谢!32位的改法稍微有点不一样;AbaReplace32.exe(3 次替换限制解除):0040CB9D&nb ...
这种见子打子的方式不是最好的修改方式,最好是找到判断是否注册的地方,可能会有一个全局变量,上面三处限制(或许还会有其他限制)通过这个全局变量判断是否注册,把这个全局变量改为已注册就可以了,思路给你了,是否可行就留给你自己分析了
2024-2-15 09:25
0
雪    币: 4615
活跃值: (2862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
huangyalei 是下面的 je abareplace64.14000FC07 跳过 改 je abareplace64.14000F9A3 是为了满足上面指令跳转的条件
哦,这个我后面仔细看了后,领会了。所以也知道了32位的修改之法。
2024-2-15 09:25
0
雪    币: 4615
活跃值: (2862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我也不知道啊,我用的x64dbg_2024-01-06_21-29,还是最新版,没做改动的。下断点后,运行调试,软件界面出来后,在软件界面选择搜索文件夹后,调试就自动卡壳了,再也进行不下去,那个替换的操作出不来了,就是软件程序最右下角的replace按钮不会出来
2024-2-15 09:28
0
雪    币: 4615
活跃值: (2862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
huangyalei 这种见子打子的方式不是最好的修改方式,最好是找到判断是否注册的地方,可能会有一个全局变量,上面三处限制(或许还会有其他限制)通过这个全局变量判断是否注册,把这个全局变量改为已注册就可以了,思路给你了, ...

老大,我知道这个思路,但碍于水平,暂时找不到判断是否注册的地方哎。只好摸着石头过河了。暂时没发现其他障碍。

最后于 2024-2-15 09:35 被martin325编辑 ,原因:
2024-2-15 09:34
0
雪    币: 4615
活跃值: (2862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
它是通过网络注册的,我猜想试用版程序里,没有判断全局注册的修改点。
2024-2-15 09:38
0
游客
登录 | 注册 方可回帖
返回
//