共享资料保护专家2.0算法分析-菜鸟学习的好教材
【文章作者】: tzl
【作者邮箱】: 无
【软件名称】: 共享资料保护专家2.0
【软件大小】: 555KB
【下载地址】: http://sq2.newhua.com/down/files_52586.rar
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD
【操作平台】: XP SP2
【软件介绍】: 软件对文件夹加密后,用户只能浏览该文件夹内的word、Excel或图片文件等的内容,不能修改、拷贝或盗取。
软件语言:简体中文;
软件类别:国产软件/共享版/系统安全;
运行环境:WinNT/2000/XP/2003;
加入时间:2006-9-26 10:52:32
【作者声明】: 只是研究技术,没有其他目的。失误之处敬请诸位大侠赐教!
一、查壳,无。
二、运行程序注册提示“需重新启动认证注册”,这是个重启验证类软件,查看字符串相关信息,我们在这里下断开始分析。
004D3725 55 push ebp
004D3726 68 1E3B4D00 push 共享资料.004D3B1E
004D372B 64:FF30 push dword ptr fs:[eax]
004D372E 64:8920 mov dword ptr fs:[eax],esp
004D3731 8D95 20FEFFFF lea edx,dword ptr ss:[ebp-1E0]
004D3737 8B83 FC020000 mov eax,dword ptr ds:[ebx+2FC]
004D373D E8 6621F7FF call 共享资料.004458A8
004D3742 8B85 20FEFFFF mov eax,dword ptr ss:[ebp-1E0]
004D3748 8D95 24FEFFFF lea edx,dword ptr ss:[ebp-1DC]
004D374E E8 7154F3FF call 共享资料.00408BC4
004D3753 8B85 24FEFFFF mov eax,dword ptr ss:[ebp-1DC]
004D3759 8D55 F8 lea edx,dword ptr ss:[ebp-8]
004D375C E8 B356F3FF call 共享资料.00408E14
004D3761 8D95 1CFEFFFF lea edx,dword ptr ss:[ebp-1E4]
004D3767 A1 C0E14D00 mov eax,dword ptr ds:[4DE1C0]
004D376C 8B00 mov eax,dword ptr ds:[eax]
004D376E E8 25360000 call 共享资料.004D6D98
004D3773 8B85 1CFEFFFF mov eax,dword ptr ss:[ebp-1E4]
004D3779 BA 803B4D00 mov edx,共享资料.004D3B80 ; ASCII "winnt"
004D377E E8 8914F3FF call 共享资料.00404C0C
004D3783 75 47 jnz short 共享资料.004D37CC
004D3785 8D8D 18FEFFFF lea ecx,dword ptr ss:[ebp-1E8]
004D378B A1 C0E14D00 mov eax,dword ptr ds:[4DE1C0]
004D3790 8B00 mov eax,dword ptr ds:[eax]
004D3792 BA 903B4D00 mov edx,共享资料.004D3B90 ; ASCII "c:\"
004D3797 E8 642F0000 call 共享资料.004D6700
004D379C 8B85 18FEFFFF mov eax,dword ptr ss:[ebp-1E8]
004D37A2 BA 9C3B4D00 mov edx,共享资料.004D3B9C ; ASCII "NTFS"
004D37A7 E8 6014F3FF call 共享资料.00404C0C
004D37AC 75 0F jnz short 共享资料.004D37BD
004D37AE 8D45 FC lea eax,dword ptr ss:[ebp-4]
004D37B1 BA AC3B4D00 mov edx,共享资料.004D3BAC
004D37B6 E8 ED10F3FF call 共享资料.004048A8
004D37BB EB 1C jmp short 共享资料.004D37D9
004D37BD 8D45 FC lea eax,dword ptr ss:[ebp-4]
004D37C0 BA C83B4D00 mov edx,共享资料.004D3BC8
004D37C5 E8 DE10F3FF call 共享资料.004048A8
004D37CA EB 0D jmp short 共享资料.004D37D9
004D37CC 8D45 FC lea eax,dword ptr ss:[ebp-4]
004D37CF BA E43B4D00 mov edx,共享资料.004D3BE4
004D37D4 E8 CF10F3FF call 共享资料.004048A8
004D37D9 8B45 FC mov eax,dword ptr ss:[ebp-4]
004D37DC E8 FB5AF3FF call 共享资料.004092DC
004D37E1 84C0 test al,al
004D37E3 0F85 BF000000 jnz 共享资料.004D38A8
004D37E9 8D95 14FEFFFF lea edx,dword ptr ss:[ebp-1EC]
004D37EF A1 C0E14D00 mov eax,dword ptr ds:[4DE1C0]
004D37F4 8B00 mov eax,dword ptr ds:[eax]
004D37F6 E8 9D350000 call 共享资料.004D6D98
004D37FB 8B85 14FEFFFF mov eax,dword ptr ss:[ebp-1EC]
004D3801 BA 803B4D00 mov edx,共享资料.004D3B80 ; ASCII "winnt"
004D3806 E8 0114F3FF call 共享资料.00404C0C
004D380B 75 7D jnz short 共享资料.004D388A
004D380D 8D8D 10FEFFFF lea ecx,dword ptr ss:[ebp-1F0]
004D3813 A1 C0E14D00 mov eax,dword ptr ds:[4DE1C0]
004D3818 8B00 mov eax,dword ptr ds:[eax]
004D381A BA 903B4D00 mov edx,共享资料.004D3B90 ; ASCII "c:\"
004D381F E8 DC2E0000 call 共享资料.004D6700
004D3824 8B85 10FEFFFF mov eax,dword ptr ss:[ebp-1F0]
004D382A BA 9C3B4D00 mov edx,共享资料.004D3B9C ; ASCII "NTFS"
004D382F E8 D813F3FF call 共享资料.00404C0C
004D3834 74 2A je short 共享资料.004D3860
004D3836 B8 243C4D00 mov eax,共享资料.004D3C24 ; ASCII "c:\...\"
004D383B E8 2C5EF3FF call 共享资料.0040966C
004D3840 B8 343C4D00 mov eax,共享资料.004D3C34
004D3845 E8 225EF3FF call 共享资料.0040966C
004D384A B8 483C4D00 mov eax,共享资料.004D3C48
004D384F E8 185EF3FF call 共享资料.0040966C
004D3854 B8 603C4D00 mov eax,共享资料.004D3C60
004D3859 E8 0E5EF3FF call 共享资料.0040966C
004D385E EB 48 jmp short 共享资料.004D38A8
004D3860 B8 7C3C4D00 mov eax,共享资料.004D3C7C ; ASCII "c:\....\"
004D3865 E8 025EF3FF call 共享资料.0040966C
004D386A B8 903C4D00 mov eax,共享资料.004D3C90
004D386F E8 F85DF3FF call 共享资料.0040966C
004D3874 B8 A43C4D00 mov eax,共享资料.004D3CA4
004D3879 E8 EE5DF3FF call 共享资料.0040966C
004D387E B8 BC3C4D00 mov eax,共享资料.004D3CBC
004D3883 E8 E45DF3FF call 共享资料.0040966C
004D3888 EB 1E jmp short 共享资料.004D38A8
004D388A B8 D83C4D00 mov eax,共享资料.004D3CD8 ; ASCII "c:\aux.{645FF040-5081-101B-9F08-00AA002F954E}\"
004D388F E8 D85DF3FF call 共享资料.0040966C
004D3894 B8 103D4D00 mov eax,共享资料.004D3D10
004D3899 E8 CE5DF3FF call 共享资料.0040966C
004D389E B8 4C3D4D00 mov eax,共享资料.004D3D4C
004D38A3 E8 C45DF3FF call 共享资料.0040966C
004D38A8 8D85 0CFEFFFF lea eax,dword ptr ss:[ebp-1F4]
004D38AE B9 8C3D4D00 mov ecx,共享资料.004D3D8C ; ASCII "\readsn.dll"
004D38B3 8B55 FC mov edx,dword ptr ss:[ebp-4]
004D38B6 E8 5912F3FF call 共享资料.00404B14
004D38BB 8B85 0CFEFFFF mov eax,dword ptr ss:[ebp-1F4]
004D38C1 E8 065AF3FF call 共享资料.004092CC
004D38C6 3C 01 cmp al,1
004D38C8 0F85 23010000 jnz 共享资料.004D39F1
004D38CE 68 80000000 push 80
004D38D3 8D85 08FEFFFF lea eax,dword ptr ss:[ebp-1F8]
004D38D9 B9 8C3D4D00 mov ecx,共享资料.004D3D8C ; ASCII "\readsn.dll"
004D38DE 8B55 FC mov edx,dword ptr ss:[ebp-4]
004D38E1 E8 2E12F3FF call 共享资料.00404B14
004D38E6 8B85 08FEFFFF mov eax,dword ptr ss:[ebp-1F8]
004D38EC E8 CF13F3FF call 共享资料.00404CC0
004D38F1 50 push eax
004D38F2 E8 8137F3FF call <jmp.&kernel32.SetFileAttri>
004D38F7 8D85 04FEFFFF lea eax,dword ptr ss:[ebp-1FC]
004D38FD B9 8C3D4D00 mov ecx,共享资料.004D3D8C ; ASCII "\readsn.dll"
004D3902 8B55 FC mov edx,dword ptr ss:[ebp-4]
004D3905 E8 0A12F3FF call 共享资料.00404B14
004D390A 8B95 04FEFFFF mov edx,dword ptr ss:[ebp-1FC]
004D3910 8D85 28FEFFFF lea eax,dword ptr ss:[ebp-1D8]
004D3916 E8 0DF5F2FF call 共享资料.00402E28
004D391B 8D85 28FEFFFF lea eax,dword ptr ss:[ebp-1D8]
004D3921 E8 92F2F2FF call 共享资料.00402BB8
004D3926 E8 A1EFF2FF call 共享资料.004028CC
004D392B 8D55 F4 lea edx,dword ptr ss:[ebp-C]
004D392E 8D85 28FEFFFF lea eax,dword ptr ss:[ebp-1D8]
004D3934 E8 A3F8F2FF call 共享资料.004031DC
004D3939 8D85 28FEFFFF lea eax,dword ptr ss:[ebp-1D8]
004D393F E8 04F9F2FF call 共享资料.00403248
004D3944 E8 83EFF2FF call 共享资料.004028CC
004D3949 8D85 28FEFFFF lea eax,dword ptr ss:[ebp-1D8]
004D394F E8 9CF5F2FF call 共享资料.00402EF0
004D3954 E8 73EFF2FF call 共享资料.004028CC
004D3959 6A 06 push 6
004D395B 8D85 00FEFFFF lea eax,dword ptr ss:[ebp-200]
004D3961 B9 8C3D4D00 mov ecx,共享资料.004D3D8C ; ASCII "\readsn.dll"
004D3966 8B55 FC mov edx,dword ptr ss:[ebp-4]
004D3969 E8 A611F3FF call 共享资料.00404B14
004D396E 8B85 00FEFFFF mov eax,dword ptr ss:[ebp-200]
004D3974 E8 4713F3FF call 共享资料.00404CC0
004D3979 50 push eax
004D397A E8 F936F3FF call <jmp.&kernel32.SetFileAttri>
004D397F 8D95 FCFDFFFF lea edx,dword ptr ss:[ebp-204]
004D3985 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; 试练码123456789送eax
004D3988 E8 8754F3FF call 共享资料.00408E14
004D398D 8B85 FCFDFFFF mov eax,dword ptr ss:[ebp-204]
004D3993 50 push eax
004D3994 8D95 F4FDFFFF lea edx,dword ptr ss:[ebp-20C]
004D399A A1 C0E14D00 mov eax,dword ptr ds:[4DE1C0]
004D399F 8B00 mov eax,dword ptr ds:[eax]
004D39A1 E8 FE2F0000 call 共享资料.004D69A4 ; 算法分析call(1)
004D39A6 8B85 F4FDFFFF mov eax,dword ptr ss:[ebp-20C]
004D39AC 8D95 F8FDFFFF lea edx,dword ptr ss:[ebp-208]
004D39B2 E8 5D54F3FF call 共享资料.00408E14 这里可以做内存注册机
004D39B7 8B95 F8FDFFFF mov edx,dword ptr ss:[ebp-208]
004D39BD 58 pop eax
004D39BE E8 4912F3FF call 共享资料.00404C0C
004D39C3 75 2C jnz short 共享资料.004D39F1 ; 关键跳转,不等则失败
004D39C5 6A 40 push 40
004D39C7 B9 983D4D00 mov ecx,共享资料.004D3D98
004D39CC BA A43D4D00 mov edx,共享资料.004D3DA4
004D39D1 A1 ACE24D00 mov eax,dword ptr ds:[4DE2AC]
004D39D6 8B00 mov eax,dword ptr ds:[eax]
004D39D8 E8 1F30F9FF call 共享资料.004669FC
004D39DD 8BC3 mov eax,ebx
004D39DF E8 DCF7F8FF call 共享资料.004631C0
004D39E4 33C0 xor eax,eax
004D39E6 5A pop edx
004D39E7 59 pop ecx
004D39E8 59 pop ecx
004D39E9 64:8910 mov dword ptr fs:[eax],edx
004D39EC E9 37010000 jmp 共享资料.004D3B28
…………
*********************************************************
跟进call(1),来到这里
004D69A4 55 push ebp
004D69A5 8BEC mov ebp,esp
004D69A7 6A 00 push 0
004D69A9 6A 00 push 0
004D69AB 6A 00 push 0
004D69AD 53 push ebx
004D69AE 56 push esi
004D69AF 57 push edi
004D69B0 8955 FC mov dword ptr ss:[ebp-4],edx
004D69B3 8BD8 mov ebx,eax
004D69B5 33C0 xor eax,eax
004D69B7 55 push ebp
004D69B8 68 346A4D00 push 共享资料.004D6A34
004D69BD 64:FF30 push dword ptr fs:[eax]
004D69C0 64:8920 mov dword ptr fs:[eax],esp
004D69C3 33C0 xor eax,eax
004D69C5 55 push ebp
004D69C6 68 026A4D00 push 共享资料.004D6A02
004D69CB 64:FF30 push dword ptr fs:[eax]
004D69CE 64:8920 mov dword ptr fs:[eax],esp
004D69D1 8D45 F8 lea eax,dword ptr ss:[ebp-8]
004D69D4 50 push eax
004D69D5 8D55 F4 lea edx,dword ptr ss:[ebp-C]
004D69D8 8BC3 mov eax,ebx
004D69DA E8 9D000000 call 共享资料.004D6A7C
004D69DF 8B55 F4 mov edx,dword ptr ss:[ebp-C] ; 机器码8768458777送edx
004D69E2 66:B9 D500 mov cx,0D5 ; 0D5送cx
004D69E6 8BC3 mov eax,ebx ; ecx=D5
004D69E8 E8 BBFEFFFF call 共享资料.004D68A8 ; 算法分析call(2)
004D69ED 8B45 FC mov eax,dword ptr ss:[ebp-4]
004D69F0 8B55 F8 mov edx,dword ptr ss:[ebp-8] ; 取codeB前十位数字codeC送edx,这里的codeC即是注册码,我的是2212102112
004D69F3 E8 6CDEF2FF call 共享资料.00404864
004D69F8 33C0 xor eax,eax
004D69FA 5A pop edx
004D69FB 59 pop ecx
004D69FC 59 pop ecx
004D69FD 64:8910 mov dword ptr fs:[eax],edx
004D6A00 EB 17 jmp short 共享资料.004D6A19
004D6A02 ^ E9 F9D4F2FF jmp 共享资料.00403F00
004D6A07 8B45 FC mov eax,dword ptr ss:[ebp-4]
004D6A0A BA 4C6A4D00 mov edx,共享资料.004D6A4C ; ASCII "1398502186"
004D6A0F E8 50DEF2FF call 共享资料.00404864
004D6A14 E8 4FD8F2FF call 共享资料.00404268
004D6A19 33C0 xor eax,eax
004D6A1B 5A pop edx
004D6A1C 59 pop ecx
004D6A1D 59 pop ecx
004D6A1E 64:8910 mov dword ptr fs:[eax],edx
004D6A21 68 3B6A4D00 push 共享资料.004D6A3B
004D6A26 8D45 F4 lea eax,dword ptr ss:[ebp-C]
004D6A29 BA 02000000 mov edx,2
004D6A2E E8 01DEF2FF call 共享资料.00404834
004D6A33 C3 retn
004D6A34 ^ E9 7BD7F2FF jmp 共享资料.004041B4
004D6A39 ^ EB EB jmp short 共享资料.004D6A26
004D6A3B 5F pop edi
004D6A3C 5E pop esi
004D6A3D 5B pop ebx
004D6A3E 8BE5 mov esp,ebp
004D6A40 5D pop ebp
004D6A41 C3 retn
*********************************************************
跟进算法分析call(2),来到这里
004D68A8 55 push ebp
004D68A9 8BEC mov ebp,esp
004D68AB 6A 00 push 0
004D68AD 6A 00 push 0
004D68AF 6A 00 push 0
004D68B1 6A 00 push 0
004D68B3 53 push ebx
004D68B4 56 push esi
004D68B5 57 push edi
004D68B6 66:894D FE mov word ptr ss:[ebp-2],cx ; D5=ebp-2
004D68BA 8BFA mov edi,edx ; 机器码8768458777送edi
004D68BC 33C0 xor eax,eax ; eax清零
004D68BE 55 push ebp
004D68BF 68 7E694D00 push 共享资料.004D697E ; edx=8768458777
004D68C4 64:FF30 push dword ptr fs:[eax]
004D68C7 64:8920 mov dword ptr fs:[eax],esp
004D68CA 33C0 xor eax,eax
004D68CC 55 push ebp
004D68CD 68 4C694D00 push 共享资料.004D694C
004D68D2 64:FF30 push dword ptr fs:[eax]
004D68D5 64:8920 mov dword ptr fs:[eax],esp
004D68D8 8B45 08 mov eax,dword ptr ss:[ebp+8]
004D68DB E8 30DFF2FF call 共享资料.00404810
004D68E0 8D45 F8 lea eax,dword ptr ss:[ebp-8]
004D68E3 E8 28DFF2FF call 共享资料.00404810
004D68E8 8BC7 mov eax,edi ; 机器码8768458777送eax
004D68EA E8 D9E1F2FF call 共享资料.00404AC8
004D68EF 8BD8 mov ebx,eax ; 机器码位数10送ebx
004D68F1 85DB test ebx,ebx
004D68F3 7E 36 jle short 共享资料.004D692B
004D68F5 BE 01000000 mov esi,1 ; 1送esi
004D68FA 8D45 F0 lea eax,dword ptr ss:[ebp-10]
004D68FD 8A5437 FF mov dl,byte ptr ds:[edi+esi-1] ; 机器码8768458777逐位送dl,后送edx
004D6901 E8 EAE0F2FF call 共享资料.004049F0
004D6906 8B45 F0 mov eax,dword ptr ss:[ebp-10]
004D6909 E8 8627F3FF call 共享资料.00409094
004D690E 0FB755 FE movzx edx,word ptr ss:[ebp-2] ; 机器码逐位送eax
004D6912 33C2 xor eax,edx ; 机器码逐位与D5进行xor运算,结果记做codeA
004D6914 8D55 F4 lea edx,dword ptr ss:[ebp-C]
004D6917 E8 1427F3FF call 共享资料.00409030 ; 将十六进制结果codeA逐个转换成十进制数字
004D691C 8B55 F4 mov edx,dword ptr ss:[ebp-C] ; 221,220,211,221,209,208,221,210,210,210
004D691F 8D45 F8 lea eax,dword ptr ss:[ebp-8]
004D6922 E8 A9E1F2FF call 共享资料.00404AD0
004D6927 46 inc esi
004D6928 4B dec ebx
004D6929 ^ 75 CF jnz short 共享资料.004D68FA
004D692B 8B45 08 mov eax,dword ptr ss:[ebp+8]
004D692E 50 push eax
004D692F 8BC7 mov eax,edi
004D6931 E8 92E1F2FF call 共享资料.00404AC8
004D6936 8BC8 mov ecx,eax
004D6938 33D2 xor edx,edx
004D693A 8B45 F8 mov eax,dword ptr ss:[ebp-8] ; 将所有的codeA排列起来,结果codeB(221210211221209208221210210210)
004D693D E8 DEE3F2FF call 共享资料.00404D20
004D6942 33C0 xor eax,eax
004D6944 5A pop edx
004D6945 59 pop ecx
004D6946 59 pop ecx
004D6947 64:8910 mov dword ptr fs:[eax],edx
004D694A EB 17 jmp short 共享资料.004D6963
004D694C ^ E9 AFD5F2FF jmp 共享资料.00403F00
004D6951 8B45 08 mov eax,dword ptr ss:[ebp+8]
004D6954 BA 98694D00 mov edx,共享资料.004D6998 ; ASCII "1398502186"
004D6959 E8 06DFF2FF call 共享资料.00404864
004D695E E8 05D9F2FF call 共享资料.00404268
004D6963 33C0 xor eax,eax
004D6965 5A pop edx
004D6966 59 pop ecx
004D6967 59 pop ecx
004D6968 64:8910 mov dword ptr fs:[eax],edx
004D696B 68 85694D00 push 共享资料.004D6985
004D6970 8D45 F0 lea eax,dword ptr ss:[ebp-10]
004D6973 BA 03000000 mov edx,3
004D6978 E8 B7DEF2FF call 共享资料.00404834
004D697D C3 retn
004D697E ^ E9 31D8F2FF jmp 共享资料.004041B4
004D6983 ^ EB EB jmp short 共享资料.004D6970
004D6985 5F pop edi
004D6986 5E pop esi
004D6987 5B pop ebx
004D6988 8BE5 mov esp,ebp
004D698A 5D pop ebp
004D698B C2 0400 retn 4
**********************************************************
算法总结:这个软件算法比较简单,即将机器产生的机器码诸位与D5进行xor运算记做codeA,把诸位运算结果转成十进制并按顺序排列起来记做codeB,最后取codeB的前十位记做codeC,codeC即为注册码。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)