本帖最后由 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 我们跟回这个CALL004E4E99 /$ 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)
|