【文章标题】: 菜鸟初试算法分析之一Security Administrator v10.2
【文章作者】: wind
【作者邮箱】: qf100@163.com
【软件名称】: Security Administrator v10.2
【下载地址】: http://www.skycn.com/soft/3205.html
【加壳方式】: 无
【保护方式】: Serial
【编写语言】: Delphi 6.0 - 7.0
【使用工具】: Ollydbg PEiD
【操作平台】: WinXPsp2
【作者声明】:让你保护你的电脑和完全控制其的访问,可以定制有访问权限的人员及其权限的等级,
可以把控制面板里的显示、网络、密码、打印机和系统选项保护起来,还可以关闭开始菜单里的项目,
可以隐藏驱动器,禁止DOS提示符,隐藏桌面图标等等
【作者声明】: 我的第一篇算法分析,难度很低适合和我一样菜的朋友共同分享。只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
初学算法分析,所以捡了个软柿子,算是和初学者分享自己的一点心得,高手就请跳过了。
查壳:Delphi 6.0 - 7.0 无壳
试探:程序启动后跳出NAG要求注册,输入注册码78787878 点击后提示"This registration code is invalid"
OD加载后,下断点bp MessageBoxA 输入注册码确认后断在
77D504EA > 8BFF mov edi,edi
77D504EC 55 push ebp
77D504ED 8BEC mov ebp,esp
77D504EF 833D BC04D777 00 cmp dword ptr ds:[77D704BC],0
77D504F6 74 24 je short user32.77D5051C
取消断点后 Alt+F9 返回程序领空
0048A686 |. E8 8DCEF7FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0048A68B |. 8945 F8 mov [local.2],eax ;返回到这里
0048A68E |. 33C0 xor eax,eax
0048A690 |. 5A pop edx
0048A691 |. 59 pop ecx
0048A692 |. 59 pop ecx
0048A693 |. 64:8910 mov dword ptr fs:[eax],edx
然后Ctrl+F9返回上一层
00499653 |. 33C0 xor eax,eax ;返回到这里
00499655 |. 5A pop edx
00499656 |. 59 pop ecx
00499657 |. 59 pop ecx
00499658 |. 64:8910 mov dword ptr fs:[eax],edx
0049965B |. 68 75964900 push newadmin.00499675
00499660 |> 8D45 F8 lea eax,[local.2]
00499663 |. BA 02000000 mov edx,2
00499668 |. E8 67B1F6FF call newadmin.004047D4
0049966D \. C3 retn
0049966E .^ E9 41ABF6FF jmp newadmin.004041B4
00499673 .^ EB EB jmp short newadmin.00499660
00499675 . 59 pop ecx
00499676 . 59 pop ecx
00499677 . 5D pop ebp
00499678 . C3 retn
继续Ctrl+F9返回再上一层 就明朗了
004A8224 /$ 55 push ebp
004A8225 |. 8BEC mov ebp,esp
004A8227 |. B9 06000000 mov ecx,6
004A822C |> 6A 00 /push 0
004A822E |. 6A 00 |push 0
004A8230 |. 49 |dec ecx
004A8231 |.^ 75 F9 \jnz short newadmin.004A822C
004A8233 |. 51 push ecx
004A8234 |. 53 push ebx
004A8235 |. 56 push esi
004A8236 |. 8BF0 mov esi,eax
004A8238 |. 33C0 xor eax,eax
004A823A |. 55 push ebp
004A823B |. 68 A3834A00 push newadmin.004A83A3
004A8240 |. 64:FF30 push dword ptr fs:[eax]
004A8243 |. 64:8920 mov dword ptr fs:[eax],esp
004A8246 |. 8D55 F4 lea edx,[local.3]
004A8249 |. 8B86 48030000 mov eax,dword ptr ds:[esi+348]
004A824F |. E8 7810FCFF call newadmin.004692CC ;计算注册码位数
004A8254 |. 8B45 F4 mov eax,[local.3] ;注册码进eax
004A8257 |. 8D55 F8 lea edx,[local.2]
004A825A |. E8 8938FEFF call newadmin.0048BAE8
004A825F |. 8B55 F8 mov edx,[local.2] ;注册码进EDX
004A8262 |. B8 4CED4C00 mov eax,newadmin.004CED4C
004A8267 |. E8 98C5F5FF call newadmin.00404804
004A826C |. E8 FBFDFFFF call newadmin.004A806C ;关键CALL 跟进☆☆☆☆☆
004A8271 |. 8BD8 mov ebx,eax ;ebx=eax
004A8273 |. 84DB test bl,bl
004A8275 |. 0F84 D9000000 je newadmin.004A8354 ;bl为0则挂
到这里很明显就是说bl=1则注册成功,又因为ebx=eax 所以al等于1就注册成功了,待会我们跟进关键CALL的时候就要注意这一点
004A827B |. C686 70030000 01 mov byte ptr ds:[esi+370],1
004A8282 |. 8D45 FC lea eax,[local.1]
004A8285 |. 50 push eax
004A8286 |. 8D55 F0 lea edx,[local.4]
004A8289 |. B8 BC834A00 mov eax,newadmin.004A83BC ; ASCII "BF8A83B980"
004A828E |. E8 E14CFEFF call newadmin.0048CF74 ;变换字符串成为注册表键值
004A8293 |. 8B45 F0 mov eax,[local.4]
004A8296 |. 50 push eax
004A8297 |. 8D55 EC lea edx,[local.5]
004A829A |. B8 D0834A00 mov eax,newadmin.004A83D0 ; ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A829F |. E8 D04CFEFF call newadmin.0048CF74 ;变换字符串成为注册表键值
004A82A4 |. 8B55 EC mov edx,[local.5]
004A82A7 |. A1 54ED4C00 mov eax,dword ptr ds:[4CED54]
004A82AC |. 59 pop ecx
004A82AD |. E8 FA7FFEFF call newadmin.004902AC
004A82B2 |. 8D55 E8 lea edx,[local.6]
004A82B5 |. A1 4CED4C00 mov eax,dword ptr ds:[4CED4C]
004A82BA |. E8 194CFEFF call newadmin.0048CED8
004A82BF |. 8B45 E8 mov eax,[local.6]
004A82C2 |. 50 push eax
004A82C3 |. 8D55 E4 lea edx,[local.7]
004A82C6 |. B8 0C844A00 mov eax,newadmin.004A840C ; ASCII "BF9D9FAE999E"
004A82CB |. E8 A44CFEFF call newadmin.0048CF74 ;写入注册表 作为注册后的标志
004A82D0 |. 8B45 E4 mov eax,[local.7]
004A82D3 |. 50 push eax
004A82D4 |. 8D45 E0 lea eax,[local.8]
004A82D7 |. 50 push eax
004A82D8 |. B8 D0834A00 mov eax,newadmin.004A83D0 ; ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A82DD |. 5A pop edx ;写入注册表 作为注册后的标志
004A82DE |. E8 914CFEFF call newadmin.0048CF74 这里写入的是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DRMRSX
004A82E3 |. 8B55 E0 mov edx,[local.8]
004A82E6 |. A1 54ED4C00 mov eax,dword ptr ds:[4CED54]
004A82EB |. 59 pop ecx
004A82EC |. E8 FB80FEFF call newadmin.004903EC
004A82F1 |. 837D FC 00 cmp [local.1],0
004A82F5 |. 75 46 jnz short newadmin.004A833D
004A82F7 |. E8 5829F6FF call newadmin.0040AC54
004A82FC |. 83C4 F8 add esp,-8
004A82FF |. DD1C24 fstp qword ptr ss:[esp]
004A8302 |. 9B wait
004A8303 |. 8D45 DC lea eax,[local.9]
004A8306 |. E8 A94EFEFF call newadmin.0048D1B4
004A830B |. 8B45 DC mov eax,[local.9]
004A830E |. 50 push eax
004A830F |. 8D55 D8 lea edx,[local.10]
004A8312 |. B8 BC834A00 mov eax,newadmin.004A83BC ; ASCII "BF8A83B980"
004A8317 |. E8 584CFEFF call newadmin.0048CF74
004A831C |. 8B45 D8 mov eax,[local.10]
004A831F |. 50 push eax
004A8320 |. 8D45 D4 lea eax,[local.11]
004A8323 |. 50 push eax
004A8324 |. B8 D0834A00 mov eax,newadmin.004A83D0 ; ASCII "BE828B999A8C9F88B1A0848E9F829E828B99B1A9BFA0BFBEB5"
004A8329 |. 5A pop edx ;;写入注册表 作为注册后的标志
004A832A |. E8 454CFEFF call newadmin.0048CF74
004A832F |. 8B55 D4 mov edx,[local.11]
004A8332 |. A1 54ED4C00 mov eax,dword ptr ds:[4CED54]
004A8337 |. 59 pop ecx
004A8338 |. E8 AF80FEFF call newadmin.004903EC
004A833D |> 8D55 D0 lea edx,[local.12]
004A8340 |. B8 24844A00 mov eax,newadmin.004A8424 ; ASCII "M_THANKS"
004A8345 |. E8 3A03FFFF call newadmin.00498684 ;看字符串很清晰,这里是成功了
004A834A |. 8B45 D0 mov eax,[local.12]
004A834D |. E8 AE12FFFF call newadmin.00499600
004A8352 |. EB 1F jmp short newadmin.004A8373
004A8354 |> B8 4CED4C00 mov eax,newadmin.004CED4C
004A8359 |. E8 52C4F5FF call newadmin.004047B0
004A835E |. 8D55 CC lea edx,[local.13]
004A8361 |. B8 38844A00 mov eax,newadmin.004A8438 ; ASCII "M_BADCODE"
004A8366 |. E8 1903FFFF call newadmin.00498684 ;到这里就挂掉
004A836B |. 8B45 CC mov eax,[local.13]
004A836E |. E8 8D12FFFF call newadmin.00499600 ;返回到这里后,向上看
004A8373 |> 33C0 xor eax,eax
004A8375 |. 5A pop edx
004A8376 |. 59 pop ecx
004A8377 |. 59 pop ecx
004A8378 |. 64:8910 mov dword ptr fs:[eax],edx
004A837B |. 68 AA834A00 push newadmin.004A83AA
004A8380 |> 8D45 CC lea eax,[local.13]
004A8383 |. BA 0A000000 mov edx,0A
004A8388 |. E8 47C4F5FF call newadmin.004047D4
004A838D |. 8D45 F4 lea eax,[local.3]
004A8390 |. E8 1BC4F5FF call newadmin.004047B0
004A8395 |. 8D45 F8 lea eax,[local.2]
004A8398 |. BA 02000000 mov edx,2
004A839D |. E8 32C4F5FF call newadmin.004047D4
004A83A2 \. C3 retn
004A83A3 .^ E9 0CBEF5FF jmp newadmin.004041B4
004A83A8 .^ EB D6 jmp short newadmin.004A8380
004A83AA . 8BC3 mov eax,ebx
004A83AC . 5E pop esi
004A83AD . 5B pop ebx
004A83AE . 8BE5 mov esp,ebp
004A83B0 . 5D pop ebp
004A83B1 . C3 retn
=================进入004A826C call newadmin.004A806C =====================================================
004A806C /$ 53 push ebx
004A806D |. 56 push esi
004A806E |. 57 push edi
004A806F |. BF 4CED4C00 mov edi,newadmin.004CED4C
004A8074 |. 33F6 xor esi,esi
004A8076 |. 33DB xor ebx,ebx
004A8078 |. 8B07 mov eax,dword ptr ds:[edi]
004A807A |. E8 F1C9F5FF call newadmin.00404A70 ;计算注册码位数
004A807F |. 83F8 0E cmp eax,0E ;必须是14位 不是则挂
004A8082 |. 75 67 jnz short newadmin.004A80EB
004A8084 |. 8B07 mov eax,dword ptr ds:[edi] ;注册码进eax
004A8086 |. 8038 36 cmp byte ptr ds:[eax],36 ;比较第1位的ASC码是否是36
004A8089 |. 0F94C0 sete al
004A808C |. 83E0 7F and eax,7F ;和7F与运算
004A808F |. 03F0 add esi,eax ;累加到esi
004A8091 |. 8B07 mov eax,dword ptr ds:[edi]
004A8093 |. 8078 02 32 cmp byte ptr ds:[eax+2],32 ;比较第3位ASC码是否是32
004A8097 |. 0F94C0 sete al
004A809A |. 83E0 7F and eax,7F
004A809D |. 03F0 add esi,eax
004A809F |. 8B07 mov eax,dword ptr ds:[edi]
004A80A1 |. 8078 03 31 cmp byte ptr ds:[eax+3],31 ;比较第4位ASC码是否是31
004A80A5 |. 0F94C0 sete al
004A80A8 |. 83E0 7F and eax,7F
004A80AB |. 03F0 add esi,eax
004A80AD |. 8B07 mov eax,dword ptr ds:[edi]
004A80AF |. 8078 04 39 cmp byte ptr ds:[eax+4],39 ;比较第5位ASC码是否是39
004A80B3 |. 0F94C0 sete al
004A80B6 |. 83E0 7F and eax,7F
004A80B9 |. 03F0 add esi,eax
004A80BB |. 8B07 mov eax,dword ptr ds:[edi]
004A80BD |. 8078 07 30 cmp byte ptr ds:[eax+7],30 ;比较第8位ASC码是否是30
004A80C1 |. 0F94C0 sete al
004A80C4 |. 83E0 7F and eax,7F
004A80C7 |. 03F0 add esi,eax
004A80C9 |. 8B07 mov eax,dword ptr ds:[edi]
004A80CB |. 8078 08 35 cmp byte ptr ds:[eax+8],35 ;比较第9位ASC码是否是35
004A80CF |. 0F94C0 sete al
004A80D2 |. 83E0 7F and eax,7F
004A80D5 |. 03F0 add esi,eax
004A80D7 |. 8B07 mov eax,dword ptr ds:[edi]
004A80D9 |. 8078 0A 33 cmp byte ptr ds:[eax+A],33 ;比较第11位ASC码是否是33
004A80DD |. 0F94C0 sete al
004A80E0 |. 83E0 7F and eax,7F
004A80E3 |. 03F0 add esi,eax ;以上验证共7处 累加到esi正好是7
004A80E5 |. 83FE 07 cmp esi,7 ;比较esi是否是7
004A80E8 |. 0F94C3 sete bl ;是则条件为真,置bl为1
004A80EB |> 8BC3 mov eax,ebx ;eax=ebx
004A80ED |. 5F pop edi
004A80EE |. 5E pop esi
004A80EF |. 5B pop ebx
004A80F0 \. C3 retn
--------------------------------------------------------------------------------
【经验总结】
算法如下:
1:注册码必须是14位
2:注册码的第一,三,四,五,八,九,十一分别是6,2,1,9,0,5,3,其他数位任意
注册码形如6X219XX05X3XXX
注册后写入注册表
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DRMRSX]
"RprCts"="DB8CDFDCD48F8EDDD889DE888B8A"
"RgnTm"="38842~4947352431"
删除又可以再玩一次。菜鸟写文章,感谢大家看完。失误之处敬请诸位大侠赐教!
顺便写了个注册机,代码丑陋,就不贴了,需要的朋友可以到windz.ys168.com去下
--------------------------------------------------------------------------------
【版权声明】: 本文纯属技术交流,请支持正版软件, 转载请注明作者并保持文章的完整, 谢谢!
by wind