首页
社区
课程
招聘
[原创]客户王 V8.1.6.100 企业版破解过程
发表于: 2005-12-22 02:50 8887

[原创]客户王 V8.1.6.100 企业版破解过程

2005-12-22 02:50
8887
【破解作者】 侠盗
【作者邮箱】 mr.zhs@163.com
【作者主页】 www.xyljcom.cn
【使用工具】 PEID,UnAspack,OD
【破解平台】 XP SP2
【软件名称】 客户王 V8.1.6.100 企业版
【下载地址】 http://www4.skycn.com/soft/10294.html
【软件简介】 一个现代化的企业,对于客户资源的关注,已经成为决定企业长久发展的基础。客户王将整个企业的客户关系统一管理,并且通过不同的权限设定,来区别每个角色对资源的操作范围。有了良好的客户数据基础,即使销售人员的变动,客户资料也能够一目了然。
    客户王主要功能如下:客户管理(客户基本信息管理,客户智能化分类管理,客户生日提醒,客户联系记录,客户文档管理,客户开发成本分析,客户分布分析)、进销存管理、简易财务管理、文档管理、常用模板管理、工作计划(日历工作计划、全年工作计划安排,计划提醒)、事务管理(加密管理,普通事务,特殊事务、事务提醒)、邮件发送管理、常用信息管理(度量衡查询,邮编区号查询)、销售管理、收藏夹管理.....
主要功能:(略)

【软件大小】 5.81 M
【加壳方式】 Aspack V2.12
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】

本人破解过多个版本的《客户王》,其中包括早几天出的那个 V9.0 的测试版。今天有网友在 QQ 上通知我说又出 V8.1 的企业版了,问我是否可以做掉它。我当然信心十足,毕竟不是第一次与客户王打交道了嘛。

下载,安装,打开安装文件夹(我破解程序时,都把程序安装在虚拟的 Z: 盘的根目录,这样方便打开,不要层层目录地打开那个 Program Files 什么的了。),双击 KingCRM.exe--因为这个程序要先填写注册信息,属于重启校验型的--居然没有反应!再双击,仍然没有反应,有些晕了,它不会已检测到我将要破解它了吧?它把我的硬盘搜索一遍,发现有 OD 了?

重启电脑,到客厅抽根烟,烟抽完回到电脑桌,电脑已完全启动了,显现出清爽的桌面。开始-客户王 企业版-客户王,呵呵,程序居然运行起来了,填写完注册信息,程序自动关闭,立即打开 Z:\客户王 文件夹,双击 KingCRM.exe,郁闷,仍然是没有反应。有点怪。

关掉文件夹,重新从开始菜单运行,它又运行了。难道它只能从快捷方式启动吗?关闭程序再打开安装文件夹,程序还是无法运行。好象是,它为了防破解,程序只能从快捷方式启动。

打开文件夹,把文件夹最小化,从开始菜单运行程序,程序不运行,却自动把我最小化的窗口还原了。我有些明白了,程序会检测当前打开的窗口,如果打开了程序安装的文件夹,程序就死活不运行。

把 Z:\客户王 改中为 Z:\TEMP,打开 TEMP,双击 KingCRM.exe,呵呵,程序启动了!想法被证实了,它有窗口自校验!

如果在这种情况下破解,当然是可以的,但破解之后发布注册机的时候,还得告诉网友要把程序的安装文件夹改名,不能是“客户王”,显然这有些不爽。既然是自校验,为什么不能把这个校验给砍掉呢?开始工作!

不用再 PEID 了,知道它是 Aspack V2.12 的弱壳,用 UnAspack 轻松搞定。脱 Aspack 的壳,有多种工具可以选择,但 UnAspack 和 QUnpack 脱得比较彻底、完美;如果用 AspackDie 来脱,完了尽管也可以破解,但以后再压缩的时候会提示已经加壳,显然脱壳不完美。但如果遇有附加数据的 Aspack 壳,还只能用 AspackDie 来搞定它。脱过之后,仍然不必 PEID,我知道它的编程语言是 Delphi。

OD 加载脱壳后的 KingCRM.exe。OD 有多个版本,我的电脑上就安装有 5 个版本的 OD,但我最喜欢用的,还是二哥的那个 FuckAll。也许是爱屋及乌吧,我是跟着二哥的教程进入破解之门的。可惜二哥已经退出了,不会再有更好的教程给我们看。

怎么寻找程序退出的位置呢?因为它是发现“客户王”字样的窗口之后,程序才退出的,因此,肯定应该与“客户王”这三个字有关系。用 OD 的字符串插件搜索全部字符串,Ctrl+F 打开搜索窗口,填写“客户王”进行搜索。找到一个,双击“客户王”,来到这里:

005AB1F6      8BC0          MOV EAX,EAX
005AB1F8   .  68 18B25A00   PUSH KingCRM_.005AB218                   ; /客户王
005AB1FD   .  6A 00         PUSH 0                                   ; |Class = 0
005AB1FF   .  E8 90D7E5FF   CALL <JMP.&user32.FindWindowA>           ; \FindWindowA  --发现窗口的函数
005AB204   .  85C0          TEST EAX,EAX
005AB206   .  74 0D         JE SHORT KingCRM_.005AB215               --如果没有发现“客户王”窗口,就跳过去,程序继续运行。
005AB208   .  6A 05         PUSH 5                                   ; /ShowState = SW_SHOW  --如果程序不跳,就把窗口打开。
005AB20A   .  50            PUSH EAX                                 ; |hWnd
005AB20B   .  E8 CCDBE5FF   CALL <JMP.&user32.ShowWindow>            ; \ShowWindow
005AB210   .  E8 379FE5FF   CALL KingCRM_.0040514C                   --退出程序的过程
005AB215   >  C3            RETN

已经很明显了,把 JE SHORT KingCRM_.005AB215 改为 JMP,不管是否发现“客户王”窗口,都跳过去继续运行程序。把程序另存为 KingCRM_01.exe,解除第一步自校验顺利告捷!

双击 KingCRM_01.exe,程序闪了一下界面,又退出了。这个不用怕,客户王的每一个版本都有这种自校验,它就检验程序是否被脱壳,如果是发现是脱壳后的程序,它就直接退出,不再运行了。

程序是在什么地方发现被脱过壳,然后就退出的呢?这个好找,上面的代码中,倒数第二行是退出程序的过程,想必这在校验也是调用这个过程吧。在 CALL KingCRM_.0040514C 这一行点右键,选“跟随”,发现有多处代码调用这个过程,想法初步被证实:

Local Calls from 00405229, 005AB210, 00918AA6, 00919E8A, 009223E5, 00924E80

OD 重新打开 KingCRM_01.exe,在上面的每一个 CALL 处下断点。当然,005AB210 这儿就不用再下断点了,因为我们刚才已经修改过了。

F9运行程序,立即中断在这儿:

00918A64   > \8D95 7CFFFFFF LEA EDX,DWORD PTR SS:[EBP-84]
00918A6A   .  A1 D0DA9300   MOV EAX,DWORD PTR DS:[93DAD0]
00918A6F   .  8B00          MOV EAX,DWORD PTR DS:[EAX]
00918A71   .  E8 BE1CBAFF   CALL KingCRM_.004BA734
00918A76   .  8B85 7CFFFFFF MOV EAX,DWORD PTR SS:[EBP-84]
00918A7C   .  8D4D 80       LEA ECX,DWORD PTR SS:[EBP-80]
00918A7F   .  BA 20000000   MOV EDX,20
00918A84   .  E8 8FF0FFFF   CALL KingCRM_.00917B18
00918A89   .  8B45 80       MOV EAX,DWORD PTR SS:[EBP-80]
00918A8C   .  50            PUSH EAX
00918A8D   .  8D85 78FFFFFF LEA EAX,DWORD PTR SS:[EBP-88]
00918A93   .  E8 7CEFFFFF   CALL KingCRM_.00917A14
00918A98   .  8B95 78FFFFFF MOV EDX,DWORD PTR SS:[EBP-88]
00918A9E   .  58            POP EAX
00918A9F   .  E8 58CCAEFF   CALL KingCRM_.004056FC
00918AA4   .  74 05         JE SHORT KingCRM_.00918AAB          --相等则跳过去继续运行程序。上面的几行代码,好象在用 MD5 进行对比。
00918AA6   .  E8 A1C6AEFF   CALL KingCRM_.0040514C              --退出程序的过程
00918AAB   >  E8 1C47FFFF   CALL KingCRM_.0090D1CC
00918AB0   .  84C0          TEST AL,AL

把 JE SHORT KingCRM_.00918AAB 改为 JMP SHORT KingCRM_.00918AAB,把程序另存为 KingCRM_02.exe,退出OD,双击 KingCRM_02.exe,程序欢快地运行起来了,呵呵,有点兴奋。

至此,客户王的两处自校验都已被拿下,下面的过程就是写注册机了。这个程序是明码比较,写注册机非常小儿科。

程序启动之后,程序窗口的标题显示:客户王 V8.1 [未注册],很显然,程序在启动的时候会检验是否注册,如果尚未注册,会显示[未注册]字样,否则,就不显示[未注册]。它既然会检测是否注册,则必须有检测的过程。对,就从这儿开刀。

OD 加载 KingCRM_02.exe,用字符串插件搜索全部 Ascii 字符串,Ctrl+F 搜索“未注册”,双击搜索到的字符串,程序来到这里:

0091A8E0  /$  55            PUSH EBP
0091A8E1  |.  8BEC          MOV EBP,ESP
0091A8E3  |.  33C9          XOR ECX,ECX
0091A8E5  |.  51            PUSH ECX
0091A8E6  |.  51            PUSH ECX
0091A8E7  |.  51            PUSH ECX
0091A8E8  |.  51            PUSH ECX
0091A8E9  |.  51            PUSH ECX
0091A8EA  |.  33C0          XOR EAX,EAX
0091A8EC  |.  55            PUSH EBP                                 --这儿下断点
0091A8ED  |.  68 CEA99100   PUSH KingCRM_.0091A9CE
0091A8F2  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
0091A8F5  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
0091A8F8  |.  E8 CF28FFFF   CALL KingCRM_.0090D1CC                   --这儿必须 F7 跟进。
0091A8FD  |.  84C0          TEST AL,AL
0091A8FF  |.  0F84 85000000 JE KingCRM_.0091A98A                     --从这儿跳到“未注册”,则上面的 CALL 必然是检测注册码的关键 CALL。
0091A905  |.  833D 30389400>CMP DWORD PTR DS:[943830],0
0091A90C  |.  74 3E         JE SHORT KingCRM_.0091A94C
0091A90E  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
0091A911  |.  A1 D0DA9300   MOV EAX,DWORD PTR DS:[93DAD0]
0091A916  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
0091A918  |.  E8 1BF3B9FF   CALL KingCRM_.004B9C38
0091A91D  |.  FF75 F8       PUSH DWORD PTR SS:[EBP-8]
0091A920  |.  68 E4A99100   PUSH KingCRM_.0091A9E4                   ;   - [
0091A925  |.  FF35 30389400 PUSH DWORD PTR DS:[943830]
0091A92B  |.  68 F4A99100   PUSH KingCRM_.0091A9F4                   ;  ]
0091A930  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
0091A933  |.  BA 04000000   MOV EDX,4
0091A938  |.  E8 33ADAEFF   CALL KingCRM_.00405670
0091A93D  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]
0091A940  |.  A1 0C389400   MOV EAX,DWORD PTR DS:[94380C]
0091A945  |.  E8 2AD1B7FF   CALL KingCRM_.00497A74
0091A94A  |.  EB 67         JMP SHORT KingCRM_.0091A9B3
0091A94C  |>  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
0091A94F  |.  A1 D0DA9300   MOV EAX,DWORD PTR DS:[93DAD0]
0091A954  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
0091A956  |.  E8 DDF2B9FF   CALL KingCRM_.004B9C38
0091A95B  |.  FF75 F0       PUSH DWORD PTR SS:[EBP-10]
0091A95E  |.  68 E4A99100   PUSH KingCRM_.0091A9E4                   ;   - [
0091A963  |.  FF35 44389400 PUSH DWORD PTR DS:[943844]
0091A969  |.  68 F4A99100   PUSH KingCRM_.0091A9F4                   ;  ]
0091A96E  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
0091A971  |.  BA 04000000   MOV EDX,4
0091A976  |.  E8 F5ACAEFF   CALL KingCRM_.00405670
0091A97B  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
0091A97E  |.  A1 0C389400   MOV EAX,DWORD PTR DS:[94380C]
0091A983  |.  E8 ECD0B7FF   CALL KingCRM_.00497A74
0091A988  |.  EB 29         JMP SHORT KingCRM_.0091A9B3
0091A98A  |>  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
0091A98D  |.  A1 D0DA9300   MOV EAX,DWORD PTR DS:[93DAD0]
0091A992  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
0091A994  |.  E8 9FF2B9FF   CALL KingCRM_.004B9C38
0091A999  |.  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
0091A99C  |.  BA 00AA9100   MOV EDX,KingCRM_.0091AA00                ;   - [未注册]
0091A9A1  |.  E8 12ACAEFF   CALL KingCRM_.004055B8
0091A9A6  |.  8B55 EC       MOV EDX,DWORD PTR SS:[EBP-14]
0091A9A9  |.  A1 0C389400   MOV EAX,DWORD PTR DS:[94380C]
0091A9AE  |.  E8 C1D0B7FF   CALL KingCRM_.00497A74
0091A9B3  |>  33C0          XOR EAX,EAX
0091A9B5  |.  5A            POP EDX
0091A9B6  |.  59            POP ECX
0091A9B7  |.  59            POP ECX
0091A9B8  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
0091A9BB  |.  68 D5A99100   PUSH KingCRM_.0091A9D5
0091A9C0  |>  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
0091A9C3  |.  BA 05000000   MOV EDX,5
0091A9C8  |.  E8 37A9AEFF   CALL KingCRM_.00405304
0091A9CD  \.  C3            RETN

运行程序,打开注册窗口,软件序列号填写 99999999-99999999-99999999-99999999,注册码填写:9876543210,点确定,程序提示注册成功,要求重启验证,并自动关闭了客户王。

切换到 OD 窗口,F9 运行程序,Shift+F9 忽略几处错误信息之后,程序中断在 0091A8EC 处。F8 单步运行到 0091A8F8 处,F7跟进,来到下面:

0090D1CC  /$  55            PUSH EBP
0090D1CD  |.  8BEC          MOV EBP,ESP
0090D1CF  |.  83C4 F0       ADD ESP,-10
0090D1D2  |.  53            PUSH EBX
0090D1D3  |.  33C0          XOR EAX,EAX
0090D1D5  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
0090D1D8  |.  33C0          XOR EAX,EAX
0090D1DA  |.  55            PUSH EBP
0090D1DB  |.  68 57D29000   PUSH KingCRM_.0090D257
0090D1E0  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
0090D1E3  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
0090D1E6  |.  A1 80E89300   MOV EAX,DWORD PTR DS:[93E880]
0090D1EB  |.  8378 20 00    CMP DWORD PTR DS:[EAX+20],0              ;  是否填写了用户单位?如果未填写,下面的 JMP 就跳走了。
0090D1EF  |.  75 04         JNZ SHORT KingCRM_.0090D1F5              ;  填写过用户单位名称的,这儿跳过去,略过下面的 JMP。
0090D1F1  |.  33DB          XOR EBX,EBX
0090D1F3  |.  EB 4C         JMP SHORT KingCRM_.0090D241
0090D1F5  |>  A1 80E89300   MOV EAX,DWORD PTR DS:[93E880]
0090D1FA  |.  8B40 48       MOV EAX,DWORD PTR DS:[EAX+48]            ;  机器码
0090D1FD  |.  E8 CA7BFFFF   CALL KingCRM_.00904DCC
0090D202  |.  D80D 68D29000 FMUL DWORD PTR DS:[90D268]
0090D208  |.  DB7D F0       FSTP TBYTE PTR SS:[EBP-10]
0090D20B  |.  9B            WAIT
0090D20C  |.  A1 80E89300   MOV EAX,DWORD PTR DS:[93E880]
0090D211  |.  8B40 4C       MOV EAX,DWORD PTR DS:[EAX+4C]            ;  序列号,999999999999999999999999999999
0090D214  |.  E8 B37BFFFF   CALL KingCRM_.00904DCC
0090D219  |.  DB6D F0       FLD TBYTE PTR SS:[EBP-10]
0090D21C  |.  DEC1          FADDP ST(1),ST
0090D21E  |.  83C4 F4       ADD ESP,-0C
0090D221  |.  DB3C24        FSTP TBYTE PTR SS:[ESP]                  ; |
0090D224  |.  9B            WAIT                                     ; |
0090D225  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]             ; |
0090D228  |.  E8 03FAAFFF   CALL KingCRM_.0040CC30                   ; \由上面的机器码和序列号生成注册码的过程。
0090D22D  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  真正的注册码入 EAX。由于我看不懂算法,上面的 CALL 就没有跟进。
0090D230  |.  8B15 80E89300 MOV EDX,DWORD PTR DS:[93E880]            ;  KingCRM_.00943810
0090D236  |.  8B52 50       MOV EDX,DWORD PTR DS:[EDX+50]            ;  假码 9876543210 EDX.
0090D239  |.  E8 BE84AFFF   CALL KingCRM_.004056FC                   ;  比较!经典的比较!
0090D23E  |.  0F94C3        SETE BL                                  ;  BL 的值确定比较的成败。
0090D241  |>  33C0          XOR EAX,EAX
0090D243  |.  5A            POP EDX
0090D244  |.  59            POP ECX
0090D245  |.  59            POP ECX
0090D246  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
0090D249  |.  68 5ED29000   PUSH KingCRM_.0090D25E
0090D24E  |>  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
0090D251  |.  E8 8A80AFFF   CALL KingCRM_.004052E0
0090D256  \.  C3            RETN

从以上分析可知,在 0090D230 处是写注册机的最佳断点。

完成!

侠盗  2005-12-22
--------------------------------------------------------------------------------
【破解总结】

去除第一个自校验:005AB206   .  74 0D         JE SHORT KingCRM_.005AB215,JE 改 JMP;
去除第二个自校验:00918AA4   .  74 05         JE SHORT KingCRM_.00918AAB,JE 改 JMP;
注册机断点:0090D230
中断次数:1
第一字节:8B
指令长度:6
寄存器:EAX
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 217
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这个论坛对于没有分析算法的破解都不会加精的
2005-12-22 08:00
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
3
其实发贴也不一定为了精华,在于思想
2005-12-22 09:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
说的好!
2005-12-22 10:17
0
雪    币: 273
活跃值: (250)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
5
最初由 4nil 发布
其实发贴也不一定为了精华,在于思想

支持这个说法哦。。!!
2005-12-22 12:09
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
我以前也遇到过这样的软件,好像是:公务员什么的?
必段从快捷方式启动・
2005-12-22 13:27
0
雪    币: 205
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
汗,俺不要精华帖,俺的水平还差得远呢。发帖只证明,俺努力做过了。
2005-12-22 13:46
0
雪    币: 269
活跃值: (51)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
学习收藏了。
2005-12-22 14:19
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
9
最初由 侠盗 发布
汗,俺不要精华帖,俺的水平还差得远呢。发帖只证明,俺努力做过了。


为了这话,我支了!!
2005-12-22 17:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 侠盗 发布
汗,俺不要精华帖,俺的水平还差得远呢。发帖只证明,俺努力做过了。


支持楼主,你的努力大家都见证了!辛苦了!
2005-12-22 20:03
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
11
最初由 starluck 发布
我以前也遇到过这样的软件,好像是:公务员什么的?
必段从快捷方式启动・

快捷方式后面有参数。
2005-12-22 20:15
0
雪    币: 300
活跃值: (412)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
12
这个检验倒是没见过,学习了
2005-12-22 20:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习中。谢谢。
2005-12-27 14:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
最初由 ww990 发布
这个论坛对于没有分析算法的破解都不会加精的


爆破也好啊
我们新人练练一下
2005-12-27 17:19
0
雪    币: 172
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
此文一出,网站的版本立马升级了
2005-12-27 23:59
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
这么好的文章,不顶不行啊
2005-12-28 00:01
0
游客
登录 | 注册 方可回帖
返回
//