夜依 发表于 2014-3-19 09:09

超级字符串批量替换工具 3.51 破解记录

本帖最后由 夜依 于 2014-3-19 10:16 编辑

------------------------------------------------【文章简介】-------------------------------------------------
【文章标题】 超级字符串批量替换工具 3.51 破解记录【文章作者】 Alem【作者主页】 http://hi.baidu.com/_alem【软件名称】 超级字符串批量替换工具 3.51【软件大小】 750KB【下载地址】 http://www.yuneach.com/soft/XReplace351.exe【加壳方式】 无【编写语言】 Microsoft Visual Basic v5.0【使用工具】 PEiD 、OD、VB-Debug【操作平台】 XP SP3【软件介绍】 自己搜索【作者声明】 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!-------------------------------------------------【文章正文】-------------------------------------------------菜鸟一枚,没有找到便捷的破解点,只能一个一个点去破解,费时费功费力啊!请大牛们指点下。
---------------------------------------------------------------------------------------------------------------od载入,右键 搜索UNICODE搜索 注册失败中文搜索引擎地址       反汇编                                    文本字符串0043D171   mov   dword ptr ss:,0040E2A4注册失败
0043D185   push    0040E260                        注册失败!
0043D18A   push    0040C9F8                        \r\n
0043D19D   push    0040C9F8                        \r\n
0043D1B0   push    0040E270                        感谢您使用并注册本软件。请检查输入是否正确。
0043D40D   mov   dword ptr ss:,0040E2E8用户注册成功
0043D421   push    0040E2B4                        注册成功!
0043D426   push    0040C9F8                        \r\n
0043D439   push    0040E2C4                        再次感谢您使用并注册本软件。
0043D4C5   push    0040D2B4                        RegCode
0043D4CA   push    0040D2B4                        RegCode
0043D4CF   push    0040D29C                        XReplace
0043D51C   push    0040D6AC                        帮助
0043D61F   mov   dword ptr ss:,0040E2A4注册失败
0043D633   push    0040E260                        注册失败!

我们看看怎么中转到注册成功的代码,来到0043D421   push    0040E2B4                        注册成功
向上找可能会跳过 0043D421的跳转指令0043D387   /0F84 76020000 je      0043D603                         ;此句跳过了0043D421: 注册成功,正是我们要找的关键跳 nop掉
此时还没完呢,我们注意到有两个注册失败提示,继续向上找
0043D308   . /E9 A9040000   jmp   0043D7B6    '这句会跳过 0043D421:注册成功但是这个是jmp 无条件跳转
0043D30D   > \8B06          mov   eax,ds:    '跳转来自 0043D14F
看过恒大教程的同学,此时激动不?来到0043D14F
0043D147   .66:83BD 58FFF>cmp   word ptr ss:,0x0      
0043D14F   . /0F84 B8010000 je      0043D30D                         ;此句跳过了 注册失败,正是我们要找的关键跳 je改为jmp
0043D155   . |B9 04000280   mov   ecx,0x80020004
0043D15A   . |B8 0A000000   mov   eax,0xA
0043D15F   . |894D 9C       mov   ss:,ecx
0043D162   . |894D AC       mov   ss:,ecx
0043D165   . |8D55 84       lea   edx,ss:
0043D168   . |8D4D B4       lea   ecx,ss:
0043D16B   . |8945 94       mov   ss:,eax
0043D16E   . |8945 A4       mov   ss:,eax
0043D171   . |C745 8C A4E24>mov   dword ptr ss:,0040E2A4 ;注册失败
0043D178   . |C745 84 08000>mov   dword ptr ss:,0x8
0043D17F   . |FF15 00124000 call    ds:[<&MSVBVM60.__vbaVarDup>]   ;msvbvm60.__vbaVarDup
0043D185   . |68 60E24000   push    0040E260                         ;注册失败!
修改方法:0043D14F   . /0F84 B8010000 je      0043D30D                         ;此句跳过了 注册失败,正是我们要找的关键跳 je改为mp此时假码也能注册成功了---------------------------------------------------------------------------------------------------------------但是就算是注册成功,启动后,点击主窗口的右下角 隐藏 按钮依然出现注册窗口。同时重新启动时,仍然有注册窗口。使用 VB-Debug Events,查看 点 隐藏 按钮的按钮整体,0040BAE6004093B6个人猜想 0040BAE6是先判断是否正确注册了,如果没有注册到跳转到注册窗口。仅是猜想。先看第一个 0040BAE60040BAE6   .816C24 04 DF0>sub   dword ptr ss:,0xDF
0040BAEE   .E9 0D510200   jmp   00430C00来到 00430C0000430C00   > \55            push    ebp                              ;下断点
00430C01   .8BEC          mov   ebp,esp
00430C03   .83EC 18       sub   esp,0x18
……
00430C7F   .66:A3 5000450>mov   ds:,ax
00430C85   >C745 FC 05000>mov   dword ptr ss:,0x5
00430C8C   .0FBF05 500045>movsx   eax,word ptr ds:
00430C93   .85C0          test    eax,eax
00430C95      0F85 FE000000 jnz   00430D99                         ;如果不跳转,之后就会出现注册窗口,所以这个必须跳了也可以jnz 改为jmp
00430C9B   .C745 FC 06000>mov   dword ptr ss:,0x6
00430CA2   .68 30C64000   push    0040C630                         ; /szValue = ""
00430CA7   .68 B4D24000   push    0040D2B4                         ; |RegCode
00430CAC   .68 B4D24000   push    0040D2B4                         ; |RegCode
00430CB1   .68 9CD24000   push    0040D29C                         ; |XReplace
00430CB6   .FF15 04104000 call    ds:[<&MSVBVM60.#690>]            ; \rtcSaveSetting
00430CBC   .C745 FC 07000>mov   dword ptr ss:,0x7
做下列修改,隐藏按钮可以正常用了。00430C95   /0F84 FE000000 je      00430D99                         ;如果不跳转,之后就会出现注册窗口,所以这个必须跳了jmp---------------------------------------------------------------------------------------------------------------下面再解决启动时出现注册窗口的问题。
/*VB-Debug Events,查看到启动时有三个事件begin0040BB270040BA3D004093B6这三个事件造成了注册窗口的出现,那我们一个一个排查吧0040BB27   .816C24 04 DB0>sub   dword ptr ss:,0xDB
0040BB2F   .E9 7C9A0200   jmp   004355B0

0040BA3D   .816C24 04 5B0>sub   dword ptr ss:,0x5B
0040BA45   .E9 761B0100   jmp   0041D5C0

004093B6   .816C24 04 6B0>sub   dword ptr ss:,0x6B
004093BE   .E9 7D440300   jmp   0043D840

00E46EBA    FFD1            call    ecx
00E46EBC    59            pop   ecx */

通过搜索并观察注册表:RedCode发现:当注册成功后,注册表里RegCode的值为我们输入的注册码。当重新启动程序,出现注册窗口时,注册表里的RegCode值为空。"RegCode"="d"那说明程序启动时查看了RegCode的值。下面搜索RegCode,中文搜索引擎地址       反汇编                                    文本字符串
00430CA7   push    0x40D2B4                        RegCode
00430CAC   push    0x40D2B4                        RegCode
00430CB1   push    0x40D29C                        XReplace

00436304   push    0x40D670                        REGCODE
00436309   push    0x40D670                        REGCODE
0043630E   push    0x40D29C                        XReplace

0043D4C5   push    0x40D2B4                        RegCode
0043D4CA   push    0x40D2B4                        RegCode
0043D4CF   push    0x40D29C                        XReplace

有三处,分别设置断点,看最先到哪一个最先到达00436304   .68 70D64000   push    0x40D670                         ; /REGCODE
00436309   .68 70D64000   push    0x40D670                         ; |REGCODE
0043630E   .68 9CD24000   push    0x40D29C                         ; |XReplace
00436313   .FF15 F4114000 call    dword ptr ds:          ; \rtcGetSetting我们先到给RegCode赋值,随便一个数。一路F80043664F   /0F85 0E010000 jnz   00436763                         ;看到这个跳转比较大就让它实现跳转,试下,把启动窗口的注册窗口去掉了。但是启动后默认是未注册的,在反复调试下,发现0043641D   /75 26         jnz   short 00436445                   ;那这个跳转如果实现,就可以跳过试用了,试试吧。
0043641F   . |C745 FC 3F000>mov   dword ptr ss:,0x3F
00436426   . |8B4D D0       mov   ecx,dword ptr ss:
00436429   . |51            push    ecx
0043642A   . |68 94D64000   push    0x40D694                         ; /&v=trial这个单词是试用的意思
0043642F   . |FF15 5C104000 call    dword ptr ds:          ; \__vbaStrCat
当0043641D   /75 26         jnz   short 00436445跳转实现,启动后默认是已注册的。---------------------------------------------------------------------------------------------------------------又解决一个问题。但是,最根本的问题没解决,程序始终不承认我们的假码。关于窗口 可以隐藏,但是隐藏后出现一个帮助按钮,点击 帮助 按钮 又是注册窗口。
00431031   .51                         push    ecx
00431032   .FF50 04                  call    dword ptr ds:
00431035   .C745 FC 01000000         mov   dword ptr ss:,0x1
0043103C   .C745 FC 02000000         mov   dword ptr ss:,0x2
00431043   .0FBF15 50004500            movsx   edx,word ptr ds:
0043104A   .85D2                     test    edx,edx
0043104C      0F85 DD000000            jnz   0043112F                         ;此跳实现可以解决 点击帮助 出现注册窗口
---------------------------------------------------------------------------------------------------------------下面的就是修复软件的功能限制,提示像“非注册版本一次最多只能替换一项内容!” “非注册版本一次最多只能处理二个文件!”
补丁地址       大小   状态      旧                              新                              注释0041E999   6.   激活      je      0041EC83                  nop
0041E9B5   6.   激活      je      0041EC83                  nop
0042D913   6.   激活      je      0042DACF                  jmp   0042DACF
0042E46E    17.   激活      jnz   0042E729                  jmp   0042E729
0042F2C4   6.   激活      jnz   0042F480                  jmp   0042F480
00430C95   6.   激活      jnz   00430D99                  jmp   00430D99
00431553   6.   激活      je      00431826                  jmp   00431826
00434691   6.   激活      je      00434B2D                  jmp   00434B2D
0043641D   2.   激活      jnz   short 00436445            jmp   short 00436445
0043664F   6.   激活      jnz   00436763                  jmp   00436763
0043D14F   6.   激活      je      0043D30D                  jmp   0043D30D
0043D387   6.   激活      je      0043D603                  nop
0043FB03   6.   激活      je      0043FCBF                  jmp   0043FCBF
0044041E    17.   激活      jnz   004406D9                  jmp   004406D9
00441265   6.   激活      jnz   00441421                  jmp   00441421
00446173   6.   激活      je      0044632F                  jmp   0044632F
00446A8E    17.   激活      jnz   00446D49                  jmp   00446D49
004478D5   6.   激活      jnz   00447A91                  jmp   00447A91
004495F4   2.   激活      je      short 00449672            nop---------------------------------------------------------------------------------------------------------------破解后的程序 链接:http://pan.baidu.com/s/1dDACGId 密码:u9rf-------------------------------------------------【版权声明】-------------------------------------------------【版权声明】 本文由本人原创, 转载请注明作者并保持文章的完整, 谢谢!

ningzhonghui 发表于 2014-3-19 11:02

本帖最后由 ningzhonghui 于 2014-3-19 11:47 编辑

夜依 发表于 2014-3-19 09:56
求详细过程。这一句就可以?这样只能在启动时不显示注册窗口,各个功能上还是有限制啊

没注意看,应还有一处没改动,找到关键CALL给值就能破了

附上我完美破解单文件版:
http://www.52pojie.cn/thread-245157-1-1.html

ningzhonghui 发表于 2014-3-19 09:40

本帖最后由 ningzhonghui 于 2014-3-19 16:50 编辑

这样破解太复杂了,简单3句就能完美破解!

小雨细无声 发表于 2014-3-19 09:47

路过支持一下

banzang 发表于 2014-3-19 09:51

支持一下,,辛苦啦,,

夜依 发表于 2014-3-19 09:56

ningzhonghui 发表于 2014-3-19 09:40
这样破解太复杂了,简单一句就能完美破解mov   word ptr , 0xFFFF

求详细过程。这一句就可以?这样只能在启动时不显示注册窗口,各个功能上还是有限制啊

ld14726972430 发表于 2014-3-19 10:11

额,明早看不懂

ltstar 发表于 2014-3-19 10:36

原创的必须支持,楼主加油!
页: [1]
查看完整版本: 超级字符串批量替换工具 3.51 破解记录