Star_Zx 发表于 2011-8-26 13:23

爆破 EditPlus文字编辑软件 破解分析

本帖最后由 Star_Zx 于 2011-8-28 07:53 编辑

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

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

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

好 言归正传 开始破解。。。。
解压出来 国际惯例查壳 PEID查到 Microsoft Visual C++ 6.0 无壳 OK。。。
运行软件(第一次打开要写入注册表一些东西 同意就可以了)
啃爹啊 不是汉化版吗 怎么还是英文。。。找了一下 原来视图里面可以选择语言
view--->userinterface--->chinese。。。好了变中文了

这个软件一开始直接就弹出注册信息的窗口

30天评估期 我调了系统时间+1年 所以显示第366天 都第366天了还能用
所以说只用把每次开启的这个提示去掉 应该功能上没有什么了 也就差不多破解了

我们试一下注册 点输入注册码 输入用户名 注册码 点注册 弹出提示


OK 有提示 我们OD载入 查找字符串“无效的” 找不到。。。

那就试试断点 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 , 0
7714EACB 74 24 je short 7714EAF1
7714EACD 64:A1 18000000 mov eax, dword ptr fs:

程序停在系统的领空 我们alt+F9 返回程序 确定错误信息 再次停下
004E4E5C |> \53 push ebx ; /Style
004E4E5D |. 57 push edi ; |Title
004E4E5E |. FF75 08 push dword ptr ; |Text
004E4E61 |. FF75 F4 push dword ptr ; |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

说明上面那个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
004E4EA4 |. 85C0 test eax, eax
004E4EA6 |. 74 15 je short 004E4EBD
004E4EA8 |. FF75 10 push dword ptr
004E4EAB |. 8B10 mov edx, dword ptr
004E4EAD |. 8BC8 mov ecx, eax
004E4EAF |. FF75 0C push dword ptr
004E4EB2 |. FF75 08 push dword ptr
004E4EB5 |. FF92 8C000000 call dword ptr
004E4EBB |. EB 10 jmp short 004E4ECD
004E4EBD |> FF75 10 push dword ptr
004E4EC0 |. 33C9 xor ecx, ecx
004E4EC2 |. FF75 0C push dword ptr
004E4EC5 |. FF75 08 push dword ptr
004E4EC8 |. E8 E5FEFFFF call 004E4DB2   //就是这个CALL跳转到刚才那段代码头部的 想办法跳过
004E4ECD |> 5D pop ebp
004E4ECE \. C2 0C00 retn 0C

想办法跳过这个CALL 调试了一下 发现上面的 call dword ptr 这个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
004E4EE1 |. 8945 F0 mov dword ptr , eax
004E4EE4 |. FF75 08 push dword ptr
004E4EE7 |. 8365 FC 00 and dword ptr , 0
004E4EEB |. 8D4D F0 lea ecx, dword ptr
004E4EEE |. E8 8989FFFF call 004DD87C
004E4EF3 |. 8B45 10 mov eax, dword ptr
004E4EF6 |. 83F8 FF cmp eax, -1
004E4EF9 |. 75 03 jnz short 004E4EFE
004E4EFB |. 8B45 08 mov eax, dword ptr
004E4EFE |> 56 push esi
004E4EFF |. 50 push eax
004E4F00 |. FF75 0C push dword ptr
004E4F03 |. FF75 F0 push dword ptr
004E4F06 |. E8 8EFFFFFF call 004E4E99   //CALL
004E4F0B |. 834D FC FF or dword ptr , FFFFFFFF   //来到这里 说明上面的CALL是跳到刚才那段程序的
004E4F0F |. 8D4D F0 lea ecx, dword ptr
004E4F12 |. 8BF0 mov esi, eax
004E4F14 |. E8 0284FFFF call 004DD31B
004E4F19 |. 8B4D F4 mov ecx, dword ptr
004E4F1C |. 8BC6 mov eax, esi
004E4F1E |. 5E pop esi
004E4F1F |. 64:890D 00000>mov dword ptr fs:, 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到运行

原来是需要重启验证的。。。我们先不管它注册信息保存在哪里
重载OD 直接F9运行 发现直接断下了 断在 刚才一段程序的头部
004E4ED1 /$ B8 14705000 mov eax, 00507014   //断下   
004E4ED6 |. E8 3D59FEFF call 004CA818
004E4EDB |. 51 push ecx
004E4EDC |. A1 C0CE5300 mov eax, dword ptr
004E4EE1 |. 8945 F0 mov dword ptr , eax
004E4EE4 |. FF75 08 push dword ptr


我们再看堆栈 试着往回走 看看是哪里过来的
选中 0012FAC4   00443BD5返回到 editplus.00443BD5 来自 editplus.004E4ED1
回车 关键来了 来到的地方和刚才的不一样 这里就是重启验证的一段代码了 关键。。

00443BBA /75 77 jnz short 00443C33    //关键跳
00443BBC . |8B4E 1C mov ecx, dword ptr ; 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 ; editplus.005390F0   //来到这里 上面的CALL 关键 想办法跳过就爆破了
00443BDB . |68 405F5300 push 00535F40 ; i
00443BE0 . |8D4424 14 lea eax, dword ptr
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
00443BF3 . |8D5424 10 lea edx, dword ptr
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运行 无异常 运行起来了
没有提示信息了 功能正常使用 爆破成功了

顺便做一下收尾工作 打上爆菊商标

好 保存文件 OK了。。。

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

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

原版去天空下载:http://www.skycn.com/soft/3641.html
破解版:














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

不错,支持下,我电脑上的是绿色版 不用注册
页: [1] 2 3 4 5
查看完整版本: 爆破 EditPlus文字编辑软件 破解分析