lindi2008 发表于 2010-1-8 14:55:33

共享软件注册资料管理系统V1.2(重启验证破解)

【文章标题】共享软件注册资料管理系统V1.2(重启验证破解)
【软件名称】共享软件注册资料管理系统V1.2
【破解作者】lindi2008       
【下载地址】http://www.skycn.com/soft/13523.html
【加壳方式】用PEID查是:Microsoft Visual C++ 6.0 等下说明
【使用工具】OllyICE,PEiD
【软件大小】973 K
【软件类别】国产软件 / 信息管理
【软件授权】共享(收费)软件 购买
【软件语言】简体中文
【运行环境】Win9x/WinNT/Win2000/WinXP
【更新时间】2003-11-30
【软件简介】做为共享软件作者,随着作品的不断推出和用户注册量的日益增多。大量的软件资料和注册资料管理,使原本就很辛苦的开发工作变得更加繁忙。如何减轻这份\"额外\"的负担呢?共享软件注册资料管理系统就是您的好帮手。
  她适用于所有从事软件开发与销售人员,能够对软件注册资料进行详细分类管理,并具备定位检索与备份恢复功能,还可以进行注册量的统计分析。从而有效地减轻你的工作量,提高工作效率。

很高兴第一次发破解的文章,因为第一次写.如果有那写错,请谅解一下..

咱们开始进入正题吧.

首先运行程序他要求输入用户名和密码(我当时迷茫的乱输入,但看了一下'帮助'文件,发现全空就可以进去了)

进去点帮助-软件注册

然后我输入了假用户名和假码 点确定,提示:注册信息已保存,请退出程序重新运行.

一看就知道是重启验证,我马上找了一下目录和注册表(此方法是比较通用的)..

我这里使用了另外一种方法. 就是不填注册码,他提示:注册信息不完整

我就借用这个信息找到关键重启验证地方.

OD载入程序,下 bp MessageBoxA 断点

看堆栈的值

0012F01C   1005C5F6/CALL 到 MessageBoxA 来自 krnln.1005C5F0
0012F020   00000000|hOwner = NULL
0012F024   0040A05A|Text = "注册信息不完整!"
0012F028   0040A055|Title = "错误"
0012F02C   00002010\Style = MB_OK|MB_ICONHAND|MB_TASKMODAL

咱们取消断点-返回OD上方提示ASM-主要线程-模块-krnln在这么一个模块里面。由于是系统函数-所以里面的内容修改无法保存的

返回的代码:
1005C5F0   FF15 F8650B10    call dword ptr ds:[<&USER32.MessageB>; USER32.MessageBoxA
1005C5F6   5F               pop edi                              ; 001699A8
1005C5F7   83F8 03          cmp eax,3
1005C5FA   5E               pop esi
1005C5FB   75 0F            jnz short krnln.1005C60C
1005C5FD   8B4C24 68      mov ecx,dword ptr ss:
1005C601   B8 02000000      mov eax,2

咱们一路单步走过这个模块,回到程序的领空就可以发现

0042384E   E8 9B000000      call 共享软件.004238EE
00423853   8945 F8          mov dword ptr ss:,eax
00423856   837D F8 01       cmp dword ptr ss:,1
0042385A   0F85 8A000000    jnz 共享软件.004238EA
00423860   68 04000080      push 80000004
00423865   6A 00            push 0
00423867   A1 3806D300      mov eax,dword ptr ds:
0042386C   85C0             test eax,eax
0042386E   75 05            jnz short 共享软件.00423875
00423870   B8 16924000      mov eax,共享软件.00409216
00423875   50               push eax
00423876   68 04000080      push 80000004
0042387B   6A 00            push 0
0042387D   68 99984000      push 共享软件.00409899                   ; ASCII "software\xlqsoft\zczl\yhbs" 注册表值
00423882   68 01030080      push 80000301
00423887   6A 00            push 0

找到了关键 咱们就重新载入- 下 bpx/bp RegOpenKeyExA 来打开这些键值

一直按F9 直到出现登陆画面 登陆之后点注册 中断之后呢,千万别取消断点.因为不知道他读取几个键值.返回到

1005B950   85C0             test eax,eax
1005B952   0F85 84020000    jnz krnln.1005BBDC
1005B958   8B4C24 18      mov ecx,dword ptr ss://读取用户名键值
1005B95C   8B1D 0C600B10    mov ebx,dword ptr ds:[<&ADVAPI32.Reg>; ADVAPI32.RegQueryValueExA:检索一个指定的值以开放的注册表项关联的名称和数据类型。
1005B962   8D9424 84000000lea edx,dword ptr ss:
1005B969   8D4424 1C      lea eax,dword ptr ss:
1005B96D   52               push edx
1005B96E   8B5424 14      mov edx,dword ptr ss:
1005B972   57               push edi
1005B973   50               push eax
1005B974   57               push edi
1005B975   51               push ecx
1005B976   52               push edx
1005B977   89BC24 9C000000mov dword ptr ss:,edi
1005B97E   FFD3             call ebx
1005B980   85C0             test eax,eax
1005B982   0F85 49020000    jnz krnln.1005BBD1
1005B988   8B4424 1C      mov eax,dword ptr ss:
1005B98C   83F8 03          cmp eax,3

一路F8来到这段

1005BA19    /75 55            jnz short krnln.1005BA70
1005BA1B    |8B4C24 10      mov ecx,dword ptr ss:
1005BA1F    |51               push ecx
1005BA20    |FF15 20600B10    call dword ptr ds:[<&ADVAPI32.RegClo>; ADVAPI32.RegCloseKey //释放句柄指定的注册表项。
1005BA26    |837C24 1C 01   cmp dword ptr ss:,1
1005BA2B    |75 11            jnz short krnln.1005BA3E
1005BA2D    |56               push esi
1005BA2E    |E8 0D35FFFF      call krnln.1004EF40

之后的代码都没什么好分析的了

在返回一次,这次是读用户名+机器码的键值没也什么好分析.来最后一次读取假码
到关键代码那段去

0042357A   83C4 28          add esp,28
0042357D   8945 F8          mov dword ptr ss:,eax   假码放到EBP-8的内存单元去
00423580   8D45 F8          lea eax,dword ptr ss:   假码在放到EAX
00423583   50               push eax                     把假码压入堆栈
00423584   B8 CE984000      mov eax,共享软件.004098CE                ; ASCII"86FA0B26B435E110B61F14B128690687B5756DD499997550ADB017396FC7BADCBF06C2BA250C518CA14C4E34C94FA81F59B78A86831CAB7B5DE856B3DDABC36E0ADD3D3116EF0AB58936B2E2B2E3834175782FA592D7353EBAFAC21E315E238EBFD757F1C11F4527FA8BF29B668E2EA98C25AC9A92545"...
//出现一堆字符串,刚开始以为是注册码的,但不是的.(很多新手也会这样认为),放在EAX
00423589   8945 F4          mov dword ptr ss:,eax   在放到堆栈中去
0042358C   8D45 F4          lea eax,dword ptr ss:   堆栈中的字符串在装入EAX
0042358F   50               push eax
00423590   B8 CF994000      mov eax,共享软件.004099CF                ; ASCII "10C5B" //这个具体也不太清楚
00423595   8945 F0          mov dword ptr ss:,eax
00423598   8D45 F0          lea eax,dword ptr ss:
0042359B   50               push eax
0042359C   8D45 FC          lea eax,dword ptr ss:
0042359F   50               push eax                        //与上面相同,不同的是位置
004235A0   E8 B97BFFFF      call 共享软件.0041B15E
004235A5   8945 EC          mov dword ptr ss:,eax
004235A8   8B5D FC          mov ebx,dword ptr ss:
004235AB   85DB             test ebx,ebx                     

往下看
004235AD    /74 09            je short 共享软件.004235B8
004235AF    |53               push ebx
004235B0    |E8 971E0000      call 共享软件.0042544C   //这些CALL都可以进去看下 都在比较
004235B5    |83C4 04          add esp,4                  //平衡
004235B8    \8B5D F0          mov ebx,dword ptr ss: //ASCII "10C5B" 放到EBX
004235BB   85DB             test ebx,ebx               //检测EBX,不为0,不相等
004235BD   74 09            je short 共享软件.004235C8   //自然不跳了
004235BF   53               push ebx                     //压入堆栈
004235C0   E8 871E0000      call 共享软件.0042544C      
004235C5   83C4 04          add esp,4
004235C8   8B5D F4          mov ebx,dword ptr ss://最长的字符取出来放到EBX
004235CB   85DB             test ebx,ebx                  //也是检测
004235CD   74 09            je short 共享软件.004235D8    //没跳
004235CF   53               push ebx
004235D0   E8 771E0000      call 共享软件.0042544C
004235D5   83C4 04          add esp,4
004235D8   8B5D F8          mov ebx,dword ptr ss://假码放到EBX (要留意了)
004235DB   85DB             test ebx,ebx                  //也是检测
004235DD   74 09            je short 共享软件.004235E8    //没跳                与上面跳转一样.
004235DF   53               push ebx                      //压入堆栈
004235E0   E8 671E0000      call 共享软件.0042544C      //来到这之后看代码,有点迷茫
004235E5   83C4 04          add esp,4
004235E8   837D EC 00       cmp dword ptr ss:,0   //看到这个比较,有希望了 他比较0-0
004235EC   0F85 3F000000    jnz 共享软件.00423631         //自然没跳了,不为0或不相等则跳
004235F2   6A 00            push 0                        //这个跳就是关键跳了 修改为JZ就成功破解
004235F4   68 00000000      push 0
004235F9   6A FF            push -1
004235FB   6A 06            push 6
004235FD   68 3A070116      push 1601073A
00423602   68 0D020152      push 5201020D
00423607   E8 521E0000      call 共享软件.0042545E
0042360C   83C4 18          add esp,18
0042360F   6A 00            push 0
00423611   68 00000000      push 0
00423616   6A FF            push -1
00423618   6A 06            push 6
0042361A   68 40070116      push 16010740
0042361F   68 0D020152      push 5201020D
00423624   E8 351E0000      call 共享软件.0042545E
00423629   83C4 18          add esp,18
0042362C   E9 57000000      jmp 共享软件.00423688
00423631   6A 00            push 0
00423633   68 CC9F4000      push 共享软件.00409FCC
00423638   6A FF            push -1
0042363A   6A 08            push 8
0042363C   68 40070116      push 16010740
00423641   68 0D020152      push 5201020D
00423646   E8 131E0000      call 共享软件.0042545E
0042364B   83C4 18          add esp,18
0042364E   6A 00            push 0
00423650   68 01000000      push 1
00423655   6A FF            push -1
00423657   6A 06            push 6
00423659   68 3A070116      push 1601073A
0042365E   68 0D020152      push 5201020D
00423663   E8 F61D0000      call 共享软件.0042545E
00423668   83C4 18          add esp,18
0042366B   6A 00            push 0
0042366D   68 01000000      push 1
00423672   6A FF            push -1
00423674   6A 06            push 6
00423676   68 40070116      push 16010740
0042367B   68 0D020152      push 5201020D
00423680   E8 D91D0000      call 共享软件.0042545E
00423685   83C4 18          add esp,18
00423688   8BE5             mov esp,ebp
0042368A   5D               pop ebp
0042368B   C3               retn

能力至此只能破解了 对于算法的分析,我也不知道....第一次发破文,希望大家多多支持一下。.

另外一种方法呢 可以根据cmp dword ptr ss:,0比较 到内存中下硬件访问字节断点 找到关键比较地方修改为1 就可以成功破解了


{破解声明}本文只是出于学习和交流目的,请勿用于商业用途,否则后

果自负。软件版权归作者所有。


最后附上一张破解图片:http://i3.6.cn/cvbnm/0f/28/19/50e48cb4f9b25dfbb8af145bcbcdb997.jpg

老海 发表于 2010-1-8 15:17:18

祝贺你,以后还是学一点算法,这样对你在破解上会有很大的帮助。

lindi2008 发表于 2010-1-8 15:21:50

恩恩,在研究中。汇编基础都还稳定 算法还是高级的呢!@/:L

GGLHY 发表于 2010-2-3 10:26:57

顶下兄弟了!

[ 本帖最后由 GGLHY 于 2010-2-21 18:18 编辑 ]

幽雅的心 发表于 2010-2-19 21:49:13

嘿嘿.来学习下吧...
页: [1]
查看完整版本: 共享软件注册资料管理系统V1.2(重启验证破解)