共享软件注册资料管理系统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 祝贺你,以后还是学一点算法,这样对你在破解上会有很大的帮助。 恩恩,在研究中。汇编基础都还稳定 算法还是高级的呢!@/:L 顶下兄弟了!
[ 本帖最后由 GGLHY 于 2010-2-21 18:18 编辑 ] 嘿嘿.来学习下吧...
页:
[1]