飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4097|回复: 4

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

[复制链接]

该用户从未签到

发表于 2010-1-8 14:55:33 | 显示全部楼层 |阅读模式
【文章标题】共享软件注册资料管理系统V1.2(重启验证破解)
【软件名称】共享软件注册资料管理系统V1.2
【破解作者】lindi2008       
【下载地址】http://www.skycn.com/soft/13523.html
【加壳方式】用PEID查是:Microsoft Visual C++ 6.0 [Overlay] 等下说明
【使用工具】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:[esp+68]
1005C601     B8 02000000      mov eax,2

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

0042384E     E8 9B000000      call 共享软件.004238EE
00423853     8945 F8          mov dword ptr ss:[ebp-8],eax
00423856     837D F8 01       cmp dword ptr ss:[ebp-8],1
0042385A     0F85 8A000000    jnz 共享软件.004238EA
00423860     68 04000080      push 80000004
00423865     6A 00            push 0
00423867     A1 3806D300      mov eax,dword ptr ds:[D30638]
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:[esp+18]  //读取用户名键值
1005B95C     8B1D 0C600B10    mov ebx,dword ptr ds:[<&ADVAPI32.Reg>; ADVAPI32.RegQueryValueExA:检索一个指定的值以开放的注册表项关联的名称和数据类型。
1005B962     8D9424 84000000  lea edx,dword ptr ss:[esp+84]  
1005B969     8D4424 1C        lea eax,dword ptr ss:[esp+1C]  
1005B96D     52               push edx
1005B96E     8B5424 14        mov edx,dword ptr ss:[esp+14]
1005B972     57               push edi
1005B973     50               push eax
1005B974     57               push edi
1005B975     51               push ecx
1005B976     52               push edx
1005B977     89BC24 9C000000  mov dword ptr ss:[esp+9C],edi
1005B97E     FFD3             call ebx
1005B980     85C0             test eax,eax
1005B982     0F85 49020000    jnz krnln.1005BBD1
1005B988     8B4424 1C        mov eax,dword ptr ss:[esp+1C]
1005B98C     83F8 03          cmp eax,3

一路F8来到这段

1005BA19    /75 55            jnz short krnln.1005BA70
1005BA1B    |8B4C24 10        mov ecx,dword ptr ss:[esp+10]
1005BA1F    |51               push ecx
1005BA20    |FF15 20600B10    call dword ptr ds:[<&ADVAPI32.RegClo>; ADVAPI32.RegCloseKey //释放句柄指定的注册表项。
1005BA26    |837C24 1C 01     cmp dword ptr ss:[esp+1C],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:[ebp-8],eax   假码放到EBP-8的内存单元去
00423580     8D45 F8          lea eax,dword ptr ss:[ebp-8]   假码在放到EAX
00423583     50               push eax                       把假码压入堆栈
00423584     B8 CE984000      mov eax,共享软件.004098CE                ; ASCII  "86FA0B26B435E110B61F14B128690687B5756DD499997550ADB017396FC7BADCBF06C2BA250C518CA14C4E34C94FA81F59B78A86831CAB7B5DE856B3DDABC36E0ADD3D3116EF0AB58936B2E2B2E3834175782FA592D7353EBAFAC21E315E238EBFD757F1C11F4527FA8BF29B668E2EA98C25AC9A92545"...
//出现一堆字符串,刚开始以为是注册码的,但不是的.(很多新手也会这样认为),放在EAX
00423589     8945 F4          mov dword ptr ss:[ebp-C],eax   在放到堆栈中去
0042358C     8D45 F4          lea eax,dword ptr ss:[ebp-C]   堆栈中的字符串在装入EAX
0042358F     50               push eax
00423590     B8 CF994000      mov eax,共享软件.004099CF                ; ASCII "10C5B" //这个具体也不太清楚
00423595     8945 F0          mov dword ptr ss:[ebp-10],eax
00423598     8D45 F0          lea eax,dword ptr ss:[ebp-10]
0042359B     50               push eax
0042359C     8D45 FC          lea eax,dword ptr ss:[ebp-4]
0042359F     50               push eax                          //与上面相同,不同的是位置
004235A0     E8 B97BFFFF      call 共享软件.0041B15E
004235A5     8945 EC          mov dword ptr ss:[ebp-14],eax
004235A8     8B5D FC          mov ebx,dword ptr ss:[ebp-4]
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:[ebp-10] //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:[ebp-C]  //最长的字符取出来放到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:[ebp-8]  //假码放到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:[ebp-14],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:[ebp-14],0  比较 到内存中下硬件访问字节断点 找到关键比较地方修改为1 就可以成功破解了


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

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


最后附上一张破解图片:
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-5-9 01:01
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2010-1-8 15:17:18 | 显示全部楼层
    祝贺你,以后还是学一点算法,这样对你在破解上会有很大的帮助。
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2010-1-8 15:21:50 | 显示全部楼层
    恩恩,在研究中。汇编基础都还稳定 算法还是高级的呢!@/:L
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2010-2-3 10:26:57 | 显示全部楼层
    顶下兄弟了!

    [ 本帖最后由 GGLHY 于 2010-2-21 18:18 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情

    2021-3-15 02:34
  • 签到天数: 347 天

    [LV.8]以坛为家I

    发表于 2010-2-19 21:49:13 | 显示全部楼层
    嘿嘿.来学习下吧...
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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