【文章标题】: 不完全爆破Rockey2加密狗
【文章作者】: 丑男无敌
【软件名称】: 某管理系统
【软件大小】: 300K
【下载地址】: 附件下载
【加壳方式】: 无
【保护方式】: Rockey2 Dongle
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OllyICE
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一个小软件,目录下有Rockey2.dll,估计是Rockey2的狗吧,手上无狗,只好爆破了,看起来这个狗也不凶(~ o ~)~zZ
OllyICE载入程序,查字串,很多有用信息:
0047A825 mov eax, 0047A8B8 version
0047A854 mov eax, 0047A8C8 date
0047A934 mov eax, 0047ABA4 url
0047A966 mov eax, 0047ABB0 url0
0047A9B3 mov edx, 0047ABA4 url
0047AA1C mov eax, 0047ABC0 message
0047AA41 mov eax, 0047ABD0 method
0047AD0C push 0047AE0C .utmp
0047AD99 push 0047AE1C +
0047AED3 mov ecx, 0047AFC4 auupg
0047AED8 mov edx, 0047AFC4 auupg
0047AF33 push 0047AFD4
0047AF4A push 0047AFD4
0047B0D8 mov ecx, 0047B10C upgrader3.exe
0047B11E push 0047B12C sendkeys
0047B465 mov eax, 0047B478 invalid key name
0047B675 mov eax, 0047B7F8 no close
0047B7B2 mov eax, 0047B808 invalid keyname
0047BB34 mov edx, 0047BB4C 请插入usb加密设备以验证用户身份
0047C243 mov edx, 0047C298 0123456789abcdef
0047C7B7 mov edx, 0047CADC _validatekey
0047C848 mov edx, 0047CB04 userid
0047C8E5 mov edx, 0047CB30 _validatedata
0047C948 push 0047CB48 ,
0047CD3E mov edx, 0047CD5C 请确认是否退出本系统?
0047CDCA mov edx, 0047CDE0 下载已完成
0047CE35 mov ecx, 0047CFA0 webbrowser.inf
0047CE5C mov ecx, 0047CFB8 urlprefix
0047CE61 mov edx, 0047CFCC main
0047CE7F mov ecx, 0047CFDC url
0047CE84 mov edx, 0047CFE8 updateinfourl
0047CE8F push 0047D000 false
0047CE98 mov ecx, 0047D010 popupmenuenable
0047CE9D mov edx, 0047CFCC main
0047CEAB mov edx, 0047D028 true
0047CEED push 0047D038 /
0047CEF2 push 0047D044 index.asp
0047D1F2 mov eax, 0047D23C ~
0047D248 push 0047D26C 确认
0047D27C push 0047D29C 错误
0047D2F5 push 0047D568 rockey2.dll
0047D306 mov edx, 0047D57C 缺少rockey2.dll文件
0047D31E push 0047D590 ry2_find
0047D333 push 0047D59C ry2_open
0047D348 push 0047D5A8 ry2_close
0047D35D push 0047D5B4 ry2_genuid
0047D372 push 0047D5C0 ry2_write
0047D387 push 0047D5CC ry2_read
0047D3AB mov edx, 0047D5E0 系统中未能找到usb加密设备
0047D3F5 mov edx, 0047D604 与usb加密设备通讯出现异常: %x
0047D452 mov edx, 0047D62C 读取usb加密设备出现异常: %x
0047D498 mov edx, 0047D650 |
0047D4CB mov edx, 0047D65C yangzhounature
0047D4FE mov edx, 0047D65C yangzhounature
0047D6C6 mov edx, 0047D8A8 系统中未能找到usb加密设备
0047D71C mov edx, 0047D8CC 与usb加密设备通讯出现异常: %x
0047D777 mov edx, 0047D8F4 读取usb加密设备出现异常: %x
0047D7C1 mov edx, 0047D918 |
0047D7F1 mov edx, 0047D924 yangzhounature
0047D813 mov edx, 0047D924 yangzhounature
0047D850 mov edx, 0047D93C usb加密设备身份验证失败
0047D98B mov edx, 0047DA0C 请插入usb加密设备以验证用户身份
点击ry2_find处,在断首下断
0047D2A4 /. 55 push ebp ; (initial cpu selection)
0047D2A5 |. 8BEC mov ebp, esp
0047D2A7 |. 81C4 D8FDFFFF add esp, -228
0047D2AD |. 53 push ebx
0047D2AE |. 56 push esi
0047D2AF |. 57 push edi
0047D2B0 |. 33C9 xor ecx, ecx
0047D2B2 |. 898D DCFDFFFF mov dword ptr [ebp-224], ecx
0047D2B8 |. 898D D8FDFFFF mov dword ptr [ebp-228], ecx
0047D2BE |. 898D E4FDFFFF mov dword ptr [ebp-21C], ecx
0047D2C4 |. 898D E0FDFFFF mov dword ptr [ebp-220], ecx
0047D2CA |. 898D E8FDFFFF mov dword ptr [ebp-218], ecx
0047D2D0 |. 894D F8 mov dword ptr [ebp-8], ecx
0047D2D3 |. 8BF0 mov esi, eax
0047D2D5 |. BB E82C4800 mov ebx, 00482CE8
0047D2DA |. 33C0 xor eax, eax
0047D2DC |. 55 push ebp
0047D2DD |. 68 59D54700 push 0047D559
0047D2E2 |. 64:FF30 push dword ptr fs:[eax]
0047D2E5 |. 64:8920 mov dword ptr fs:[eax], esp
0047D2E8 |. 33D2 xor edx, edx
0047D2EA |. 8B86 34030000 mov eax, dword ptr [esi+334]
0047D2F0 |. E8 6F1AFBFF call 0042ED64
0047D2F5 |. 68 68D54700 push 0047D568 ; /rockey2.dll
0047D2FA |. E8 BD94F8FF call <jmp.&kernel32.LoadLibraryA> ; \LoadLibraryA
0047D2FF |. 8903 mov dword ptr [ebx], eax
0047D301 |. 833B 00 cmp dword ptr [ebx], 0
0047D304 |. 75 18 jnz short 0047D31E
0047D306 |. BA 7CD54700 mov edx, 0047D57C ; 缺少rockey2.dll文件
0047D30B |. 8BC6 mov eax, esi
0047D30D |. E8 62FFFFFF call 0047D274
0047D312 |. A1 541D4800 mov eax, dword ptr [481D54]
0047D317 |. 8B00 mov eax, dword ptr [eax]
0047D319 |. E8 72B4FEFF call 00468790
0047D31E |> 68 90D54700 push 0047D590 ; /ry2_find
0047D323 |. 8B03 mov eax, dword ptr [ebx] ; |
0047D325 |. 50 push eax ; |hModule
0047D326 |. E8 C993F8FF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0047D32B |. 8B15 781A4800 mov edx, dword ptr [481A78] ; Browser.00482CB4
0047D331 |. 8902 mov dword ptr [edx], eax
0047D333 |. 68 9CD54700 push 0047D59C ; /ry2_open
0047D338 |. 8B03 mov eax, dword ptr [ebx] ; |
0047D33A |. 50 push eax ; |hModule
0047D33B |. E8 B493F8FF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0047D340 |. 8B15 4C1C4800 mov edx, dword ptr [481C4C] ; Browser.00482CB8
0047D346 |. 8902 mov dword ptr [edx], eax
0047D348 |. 68 A8D54700 push 0047D5A8 ; /ry2_close
0047D34D |. 8B03 mov eax, dword ptr [ebx] ; |
0047D34F |. 50 push eax ; |hModule
0047D350 |. E8 9F93F8FF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0047D355 |. 8B15 601D4800 mov edx, dword ptr [481D60] ; Browser.00482CBC
0047D35B |. 8902 mov dword ptr [edx], eax
0047D35D |. 68 B4D54700 push 0047D5B4 ; /ry2_genuid
0047D362 |. 8B03 mov eax, dword ptr [ebx] ; |
0047D364 |. 50 push eax ; |hModule
0047D365 |. E8 8A93F8FF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0047D36A |. 8B15 A81B4800 mov edx, dword ptr [481BA8] ; Browser.00482CC0
0047D370 |. 8902 mov dword ptr [edx], eax
0047D372 |. 68 C0D54700 push 0047D5C0 ; /ry2_write
0047D377 |. 8B03 mov eax, dword ptr [ebx] ; |
0047D379 |. 50 push eax ; |hModule
0047D37A |. E8 7593F8FF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0047D37F |. 8B15 0C1B4800 mov edx, dword ptr [481B0C] ; Browser.00482CC8
0047D385 |. 8902 mov dword ptr [edx], eax
0047D387 |. 68 CCD54700 push 0047D5CC ; /ry2_read
0047D38C |. 8B03 mov eax, dword ptr [ebx] ; |
0047D38E |. 50 push eax ; |hModule
0047D38F |. E8 6093F8FF call <jmp.&kernel32.GetProcAddress> ; \GetProcAddress
0047D394 |. 8B15 E01C4800 mov edx, dword ptr [481CE0] ; Browser.00482CC4
0047D39A |. 8902 mov dword ptr [edx], eax
0047D39C |. A1 781A4800 mov eax, dword ptr [481A78]
0047D3A1 |. 8B00 mov eax, dword ptr [eax]
0047D3A3 |. FFD0 call eax ; Rockey2.RY2_Find 查找加密锁
0047D3A5 8BD8 mov ebx, eax ; 无狗返回 A010000B
0047D3A7 |. 85DB test ebx, ebx
0047D3A9 |. 7F 18 jg short 0047D3C3
0047D3AB |. BA E0D54700 mov edx, 0047D5E0 ; 系统中未能找到usb加密设备
0047D3B0 |. 8BC6 mov eax, esi
0047D3B2 |. E8 BDFEFFFF call 0047D274
0047D3B7 |. A1 541D4800 mov eax, dword ptr [481D54]
0047D3BC |. 8B00 mov eax, dword ptr [eax]
0047D3BE |. E8 CDB3FEFF call 00468790
0047D3C3 |> 8D45 FC lea eax, dword ptr [ebp-4]
0047D3C6 |. 50 push eax
0047D3C7 |. 68 F90F6F37 push 376F0FF9
0047D3CC |. 6A 01 push 1
0047D3CE |. A1 4C1C4800 mov eax, dword ptr [481C4C]
0047D3D3 |. 8B00 mov eax, dword ptr [eax]
0047D3D5 |. FFD0 call eax ; Rockey2.RY2_Open 打开加密锁
0047D3D7 8BD8 mov ebx, eax ; 无狗则返回 A0100001
0047D3D9 |. 85DB test ebx, ebx
0047D3DB |. 7D 38 jge short 0047D415
0047D3DD |. 6A 00 push 0
0047D3DF |. 899D ECFDFFFF mov dword ptr [ebp-214], ebx
0047D3E5 |. C685 F0FDFFFF>mov byte ptr [ebp-210], 0
0047D3EC |. 8D8D ECFDFFFF lea ecx, dword ptr [ebp-214]
0047D3F2 |. 8D45 F8 lea eax, dword ptr [ebp-8]
0047D3F5 |. BA 04D64700 mov edx, 0047D604 ; 与usb加密设备通讯出现异常: %x
0047D3FA |. E8 E9C1F8FF call 004095E8
0047D3FF |. 8B55 F8 mov edx, dword ptr [ebp-8]
0047D402 |. 8BC6 mov eax, esi
0047D404 |. E8 6BFEFFFF call 0047D274
0047D409 |. A1 541D4800 mov eax, dword ptr [481D54]
0047D40E |. 8B00 mov eax, dword ptr [eax]
0047D410 |. E8 7BB3FEFF call 00468790
0047D415 |> 8BFB mov edi, ebx
0047D417 |. 8D85 F7FDFFFF lea eax, dword ptr [ebp-209]
0047D41D |. 50 push eax
0047D41E |. 6A 00 push 0
0047D420 |. 57 push edi
0047D421 |. A1 E01C4800 mov eax, dword ptr [481CE0]
0047D426 |. 8B00 mov eax, dword ptr [eax]
0047D428 |. FFD0 call eax ; Rockey2.RY2_Read 读取加密锁
0047D42A |. 8BD8 mov ebx, eax ; 无狗返回 A0100002
0047D42C |. 85DB test ebx, ebx
0047D42E |. 7D 42 jge short 0047D472
0047D430 |. 57 push edi
0047D431 |. A1 601D4800 mov eax, dword ptr [481D60]
0047D436 |. 8B00 mov eax, dword ptr [eax]
0047D438 |. FFD0 call eax
0047D43A |. 6A 00 push 0
0047D43C |. 899D ECFDFFFF mov dword ptr [ebp-214], ebx
0047D442 |. C685 F0FDFFFF>mov byte ptr [ebp-210], 0
0047D449 |. 8D8D ECFDFFFF lea ecx, dword ptr [ebp-214]
0047D44F |. 8D45 F8 lea eax, dword ptr [ebp-8]
0047D452 |. BA 2CD64700 mov edx, 0047D62C ; 读取usb加密设备出现异常: %x
0047D457 |. E8 8CC1F8FF call 004095E8
0047D45C |. 8B55 F8 mov edx, dword ptr [ebp-8]
0047D45F |. 8BC6 mov eax, esi
0047D461 |. E8 0EFEFFFF call 0047D274
0047D466 |. A1 541D4800 mov eax, dword ptr [481D54]
0047D46B |. 8B00 mov eax, dword ptr [eax]
0047D46D |. E8 1EB3FEFF call 00468790
0047D472 |> 57 push edi
0047D473 |. A1 601D4800 mov eax, dword ptr [481D60]
0047D478 |. 8B00 mov eax, dword ptr [eax]
0047D47A |. FFD0 call eax
0047D47C |. 8D85 E8FDFFFF lea eax, dword ptr [ebp-218]
0047D482 |. 8D95 F7FDFFFF lea edx, dword ptr [ebp-209]
0047D488 |. B9 01020000 mov ecx, 201
0047D48D |. E8 9A6FF8FF call 0040442C
0047D492 |. 8B85 E8FDFFFF mov eax, dword ptr [ebp-218]
0047D498 |. BA 50D64700 mov edx, 0047D650 ; |
0047D49D |. E8 3EECFFFF call 0047C0E0
0047D4A2 |. 8BD8 mov ebx, eax
0047D4A4 |. 8BC3 mov eax, ebx
0047D4A6 |. 8B10 mov edx, dword ptr [eax]
0047D4A8 |. FF52 14 call dword ptr [edx+14]
0047D4AB |. 83F8 02 cmp eax, 2
0047D4AE |. 75 6F jnz short 0047D51F
0047D4B0 |. 8D8D E0FDFFFF lea ecx, dword ptr [ebp-220]
0047D4B6 |. 33D2 xor edx, edx
0047D4B8 |. 8BC3 mov eax, ebx
0047D4BA |. 8B38 mov edi, dword ptr [eax]
0047D4BC |. FF57 0C call dword ptr [edi+C]
0047D4BF |. 8B85 E0FDFFFF mov eax, dword ptr [ebp-220]
0047D4C5 |. 8D8D E4FDFFFF lea ecx, dword ptr [ebp-21C]
0047D4CB |. BA 5CD64700 mov edx, 0047D65C ; yangzhounature
0047D4D0 |. E8 EBF0FFFF call 0047C5C0
0047D4D5 |. 8B95 E4FDFFFF mov edx, dword ptr [ebp-21C]
0047D4DB |. B8 E02C4800 mov eax, 00482CE0
0047D4E0 |. E8 2B6DF8FF call 00404210
0047D4E5 |. 8D8D D8FDFFFF lea ecx, dword ptr [ebp-228]
0047D4EB |. BA 01000000 mov edx, 1
0047D4F0 |. 8BC3 mov eax, ebx
0047D4F2 |. 8B18 mov ebx, dword ptr [eax]
0047D4F4 |. FF53 0C call dword ptr [ebx+C]
0047D4F7 |. 8B85 D8FDFFFF mov eax, dword ptr [ebp-228]
0047D4FD |. 50 push eax
0047D4FE |. BA 5CD64700 mov edx, 0047D65C ; yangzhounature
0047D503 |. 8D8D DCFDFFFF lea ecx, dword ptr [ebp-224]
0047D509 |. 58 pop eax
0047D50A |. E8 B1F0FFFF call 0047C5C0
0047D50F |. 8B95 DCFDFFFF mov edx, dword ptr [ebp-224]
0047D515 |. B8 E42C4800 mov eax, 00482CE4
0047D51A |. E8 F16CF8FF call 00404210
0047D51F |> C605 EC2C4800>mov byte ptr [482CEC], 1
0047D526 |. B2 01 mov dl, 1
0047D528 |. 8B86 34030000 mov eax, dword ptr [esi+334]
0047D52E |. E8 3118FBFF call 0042ED64
0047D533 |. 33C0 xor eax, eax
0047D535 |. 5A pop edx
0047D536 |. 59 pop ecx
0047D537 |. 59 pop ecx
0047D538 |. 64:8910 mov dword ptr fs:[eax], edx
0047D53B |. 68 60D54700 push 0047D560
0047D540 |> 8D85 D8FDFFFF lea eax, dword ptr [ebp-228]
0047D546 |. BA 05000000 mov edx, 5
0047D54B |. E8 906CF8FF call 004041E0
0047D550 |. 8D45 F8 lea eax, dword ptr [ebp-8]
0047D553 |. E8 646CF8FF call 004041BC
0047D558 \. C3 retn
0047D559 .^ E9 DE65F8FF jmp 00403B3C
0047D55E .^ EB E0 jmp short 0047D540
0047D560 . 5F pop edi
0047D561 . 5E pop esi
0047D562 . 5B pop ebx
0047D563 . 8BE5 mov esp, ebp
0047D565 . 5D pop ebp
0047D566 . C3 retn
查找一下文档(楼下有附录),返回值小于0的都是错误代码,手上没有狗不知道实际返回值是多少,因此把校验狗的三个call的返回值全部改回1。调试时进入三个0047D3A3、
0047D3D5、0047D428,全写上以下代码:
mov eax,1
retn
--------------------------------------------------------------------------------------------------
0047D6C6 mov edx, 0047D8A8 系统中未能找到usb加密设备
0047D71C mov edx, 0047D8CC 与usb加密设备通讯出现异常: %x
0047D777 mov edx, 0047D8F4 读取usb加密设备出现异常: %x
在字符串看到在后面还有一处地方是校验狗的,但是已经改了返回值,所以已经绕过验证了。
最后复制全部修改到可执行文件为rockey2.dll,覆盖目录下原版的rockey2.dll。再打开软件,已经可以正常打开了,但是软件还没有可以正常使用,登陆框中“用户名”那栏
编辑框没有显示,因此无法正常登陆使用软件,应该是狗内的数据没有正确还原。
请问大家如何在无狗的情况下实现完美爆破呢?下面附有原程序和我爆破的rockey2.dll,覆盖到原版目录即可。软件比较简单细小,便于研究,有兴趣的朋友可以调试一下,顺
便指导一下我等菜鸟。(*^__^*) 嘻嘻……
--------------------------------------------------------------------------------
2009年04月25日 04:54:26
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课