吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17532|回复: 40
收起左侧

[原创] 爆破 EditPlus文字编辑软件 破解分析

  [复制链接]
头像被屏蔽
Star_Zx 发表于 2011-8-26 13:23
本帖最后由 Star_Zx 于 2011-8-28 07:53 编辑

大家好 我是新来的 刚学破解不久 菜鸟一只 只会破些小东东
今天写程序的时候 用这个EditPlus 每次开启都提示注册 烦了 爆它一下吧
第一次写破文 有什么不对的地方 勿喷哈 请多指教哈

文字编辑软件 EditPlus 大家肯定都听过 棒子的软件 不过挺好用的 基本能识别所有的程序语言了

天空下过来的V3.10汉化版本 原版地址:
http://www.skycn.com/soft/3641.html

好 言归正传 开始破解。。。。
解压出来 国际惯例查壳 PEID查到 Microsoft Visual C++ 6.0 [Overlay] 无壳 OK。。。
运行软件(第一次打开要写入注册表一些东西 同意就可以了)

啃爹啊 不是汉化版吗 怎么还是英文。。。找了一下 原来视图里面可以选择语言
view--->userinterface--->chinese。。。好了变中文了

这个软件一开始直接就弹出注册信息的窗口
(, 下载次数: 7)
30天评估期 我调了系统时间+1年 所以显示第366天 都第366天了还能用
所以说只用把每次开启的这个提示去掉 应该功能上没有什么了 也就差不多破解了

我们试一下注册 点输入注册码 输入用户名 注册码 点注册 弹出提示
(, 下载次数: 3)

OK 有提示 我们OD载入 查找字符串“无效的” 找不到。。。
(, 下载次数: 3)
那就试试断点 bp MessageBoxA
用OD运行 输入用户名 密码 点注册 没断下来。。。
试试 bp MessageBoxW 断下来了。。。

7714EABF > 8BFF mov edi, edi   //断下
7714EAC1 55 push ebp
7714EAC2 8BEC mov ebp, esp
7714EAC4 833D 749A1577 0>cmp dword ptr [77159A74], 0
7714EACB 74 24 je short 7714EAF1
7714EACD 64:A1 18000000 mov eax, dword ptr fs:[18]
程序停在系统的领空 我们alt+F9 返回程序 确定错误信息 再次停下
004E4E5C |> \53 push ebx ; /Style
004E4E5D |. 57 push edi ; |Title
004E4E5E |. FF75 08 push dword ptr [ebp+8] ; |Text
004E4E61 |. FF75 F4 push dword ptr [ebp-C] ; |hOwner
004E4E64 |. FF15 D0975000 call dword ptr [<&USER32.MessageBoxW>>; \MessageBoxW   //错误CALL
004E4E6A |. 85F6 test esi, esi ; editplus.005425FC     //停下
004E4E6C |. 8BF8 mov edi, eax
004E4E6E |. 74 05 je short 004E4E75
004E4E70 |. 8B45 F8 mov eax, dword ptr [ebp-8]
说明上面那个CALL就是错误CALL 我们找找边上有没有什么跳转可以跳过这个CALL..
没有找到。。那我们向上到这段程序的头部
004E4DB2 /$ 55 push ebp     //这段代码头部
004E4DB3 |. 8BEC mov ebp, esp
004E4DB5 |. 81EC 18020000 sub esp, 218
004E4DBB |. 53 push ebx
004E4DBC |. 56 push esi
004E4DBD |. 57 push edi
004E4DBE |. 33DB xor ebx, ebx
显示  本地调用来自 004E4EC8 我们跟回这个CALL
004E4E99 /$ 55 push ebp    //这段代码头部 F2断点
004E4E9A |. 8BEC mov ebp, esp
004E4E9C |. E8 C0E90000 call 004F3861
004E4EA1 |. 8B40 04 mov eax, dword ptr [eax+4]
004E4EA4 |. 85C0 test eax, eax
004E4EA6 |. 74 15 je short 004E4EBD
004E4EA8 |. FF75 10 push dword ptr [ebp+10]
004E4EAB |. 8B10 mov edx, dword ptr [eax]
004E4EAD |. 8BC8 mov ecx, eax
004E4EAF |. FF75 0C push dword ptr [ebp+C]
004E4EB2 |. FF75 08 push dword ptr [ebp+8]
004E4EB5 |. FF92 8C000000 call dword ptr [edx+8C]
004E4EBB |. EB 10 jmp short 004E4ECD
004E4EBD |> FF75 10 push dword ptr [ebp+10]
004E4EC0 |. 33C9 xor ecx, ecx
004E4EC2 |. FF75 0C push dword ptr [ebp+C]
004E4EC5 |. FF75 08 push dword ptr [ebp+8]
004E4EC8 |. E8 E5FEFFFF call 004E4DB2   //就是这个CALL跳转到刚才那段代码头部的 想办法跳过
004E4ECD |> 5D pop ebp
004E4ECE \. C2 0C00 retn 0C
想办法跳过这个CALL 调试了一下 发现上面的 call dword ptr [edx+8C] 这个CALL和call 004E4DB2 跳转同一个地方 所以说 是必须跳的了
这里也没办法跳过 所以我们继续向上 找这段代码的头部
F2断点 重载OD 运行 输入注册信息 点注册 此处断下
看堆栈 0012EF74   004E4F0B  返回到 editplus.004E4F0B 来自 editplus.004E4E99
选中 敲回车 我们慢慢往回找 看看
004E4ED1 /$ B8 14705000 mov eax, 00507014   //这段代码头部
004E4ED6 |. E8 3D59FEFF call 004CA818
004E4EDB |. 51 push ecx
004E4EDC |. A1 C0CE5300 mov eax, dword ptr [53CEC0]
004E4EE1 |. 8945 F0 mov dword ptr [ebp-10], eax
004E4EE4 |. FF75 08 push dword ptr [ebp+8]
004E4EE7 |. 8365 FC 00 and dword ptr [ebp-4], 0
004E4EEB |. 8D4D F0 lea ecx, dword ptr [ebp-10]
004E4EEE |. E8 8989FFFF call 004DD87C
004E4EF3 |. 8B45 10 mov eax, dword ptr [ebp+10]
004E4EF6 |. 83F8 FF cmp eax, -1
004E4EF9 |. 75 03 jnz short 004E4EFE
004E4EFB |. 8B45 08 mov eax, dword ptr [ebp+8]
004E4EFE |> 56 push esi
004E4EFF |. 50 push eax
004E4F00 |. FF75 0C push dword ptr [ebp+C]
004E4F03 |. FF75 F0 push dword ptr [ebp-10]
004E4F06 |. E8 8EFFFFFF call 004E4E99   //CALL
004E4F0B |. 834D FC FF or dword ptr [ebp-4], FFFFFFFF   //来到这里 说明上面的CALL是跳到刚才那段程序的
004E4F0F |. 8D4D F0 lea ecx, dword ptr [ebp-10]
004E4F12 |. 8BF0 mov esi, eax
004E4F14 |. E8 0284FFFF call 004DD31B
004E4F19 |. 8B4D F4 mov ecx, dword ptr [ebp-C]
004E4F1C |. 8BC6 mov eax, esi
004E4F1E |. 5E pop esi
004E4F1F |. 64:890D 00000>mov dword ptr fs:[0], ecx
004E4F26 |. C9 leave
004E4F27 \. C2 0C00 retn 0C
004E4F06 |. E8 8EFFFFFF call 004E4E99   这个CALL是跳到刚才的那段程序的
这个CALL也没法跳过 继续向上 到这段代码头部
一样 F2断点 重载OD 运行 输入注册信息 点注册 此处断下
看堆栈 0012EF9C   00494492  返回到 editplus.00494492 来自 editplus.004E4ED1
选中 敲回车 看看
0049447F . 85C0 test eax, eax
00494481 . 5B pop ebx
00494482 . 75 18 jnz short 0049449C   //这个跳 可以跳过下面的CALL
00494484 . 6A FF push -1
00494486 . 6A 10 push 10
00494488 . 68 815F0000 push 5F81
0049448D . E8 3F0A0500 call 004E4ED1   //CALL
00494492 . 5F pop edi      //来到这里 同理 上面的CALL是跳到刚才的那段程序的
00494493 . 5E pop esi
00494494 . 5D pop ebp
00494495 . 81C4 5C040000 add esp, 45C
0049449B . C3 retn
我们发现这个CALL可以跳过去
00494482   . /75 18         jnz     short 0049449C
F2断下 重载OD 运行 输入注册信息 点注册 此处断下
然后改一下寄存器中的Z 让它跳过 一直F9到运行
(, 下载次数: 3)
原来是需要重启验证的。。。我们先不管它注册信息保存在哪里
重载OD 直接F9运行 发现直接断下了 断在 刚才一段程序的头部
004E4ED1 /$ B8 14705000 mov eax, 00507014   //断下   
004E4ED6 |. E8 3D59FEFF call 004CA818
004E4EDB |. 51 push ecx
004E4EDC |. A1 C0CE5300 mov eax, dword ptr [53CEC0]
004E4EE1 |. 8945 F0 mov dword ptr [ebp-10], eax
004E4EE4 |. FF75 08 push dword ptr [ebp+8]
我们再看堆栈 试着往回走 看看是哪里过来的
选中 0012FAC4   00443BD5  返回到 editplus.00443BD5 来自 editplus.004E4ED1
回车 关键来了 来到的地方和刚才的不一样 这里就是重启验证的一段代码了 关键。。
00443BBA /75 77 jnz short 00443C33    //关键跳
00443BBC . |8B4E 1C mov ecx, dword ptr [esi+1C] ; Case 6D ('m') of switch 00443B9B
00443BBF . |50 push eax ; /TimerID
00443BC0 . |51 push ecx ; |hWnd
00443BC1 . |FF15 A0965000 call dword ptr [<&USER32.KillTimer>] ; \KillTimer
00443BC7 . |6A FF push -1
00443BC9 . |6A 00 push 0
00443BCB . |68 815F0000 push 5F81
00443BD0 . |E8 FC120A00 call 004E4ED1 ;    //重启验证关键CALL
00443BD5 . |8B15 70905300 mov edx, dword ptr [539070] ; editplus.005390F0     //来到这里 上面的CALL 关键 想办法跳过就爆破了
00443BDB . |68 405F5300 push 00535F40 ; i
00443BE0 . |8D4424 14 lea eax, dword ptr [esp+14]
00443BE4 . |52 push edx ; |Format => "Software\ES-Computing\EditPlus 3\%s"
00443BE5 . |50 push eax ; |s
00443BE6 . |FF15 04975000 call dword ptr [<&USER32.wsprintfW>] ; \wsprintfW
00443BEC . |83C4 0C add esp, 0C
00443BEF . |8D4C24 0C lea ecx, dword ptr [esp+C]
00443BF3 . |8D5424 10 lea edx, dword ptr [esp+10]
00443BF7 . |51 push ecx ; /pHandle
00443BF8 . |68 1F000200 push 2001F ; |Access = KEY_QUERY_VALUE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY|20000
00443BFD . |6A 00 push 0 ; |Reserved = 0
00443BFF . |52 push edx ; |Subkey
00443C00 . |68 01000080 push 80000001 ; |hKey = HKEY_CURRENT_USER
00443C05 . |FF15 50905000 call dword ptr [<&ADVAPI32.RegOpenKey>; \RegOpenKeyExW
00443C0B . |85C0 test eax, eax
00443C0D . |0F85 44010000 jnz 00443D57
停在00443BD5 终于找到关键的CALL了 就是上面的
00443BD0 . |E8 FC120A00 call 004E4ED1 ;    //重启验证关键CALL

这个CALL下面有个killtime这个应该就是用来控制试用用天数的吧?
下面还看到了HKEY_CURRENT_USER 注册表的关键字
由此得出 这个软件的注册信息是存在注册表 来进行重启验证的
这里我们都不用管 想办法都跳过 就差不多爆破了
向上发现最近的一个跳转
00443BBA     /75 77         jnz     short 00443C33
F2断点 重载OD F9直接运行 直接断下 寄存器改下Z
让它跳过 F9一下 发现 是个循环
试试吧 jnz直接改jmp 然后alt+B 禁止所有断点
F9运行 无异常 运行起来了
没有提示信息了 功能正常使用 爆破成功了

顺便做一下收尾工作 打上爆菊商标
(, 下载次数: 3)
好 保存文件 OK了。。。

额 总结一下
改2处为jmp就爆破了
00494482   . /75 18         jnz     short 0049449C
00443BBA     /75 77         jnz     short 00443C33

其实感觉没有完美爆破 如果按这样的步骤下来 是完美的
但是如果 直接上 改这2处 第一次运行程序的时候
会弹一次注册信息  随便输入注册一次 重启
之后打开就不会有提示信息了 也是破解成功的

原版去天空下载:http://www.skycn.com/soft/3641.html
破解版: (, 下载次数: 106)














发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
 楼主| Star_Zx 发表于 2011-8-26 13:24
沙发一只{:1_903:} 第一次写破文 勿喷
C·R精谁 发表于 2011-8-26 13:25
吾爱、硬币 发表于 2011-8-26 13:28
Emil 发表于 2011-8-26 13:40
不错  支持一个!
hbxtgch 发表于 2011-8-26 13:55
顶一下,谢谢分享!
gj8438 发表于 2011-8-26 15:23
哥,刚才我看了下,ms这个也可以一字节爆破的。。。
注册账户好难 发表于 2011-8-26 16:34
国外的软件好入手
老万 发表于 2011-8-26 18:50
谢谢分享,学习了
dad9 发表于 2011-8-26 19:27
不错,支持下,我电脑上的是绿色版 不用注册
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表