【文章标题】: 某软件的注册码算法
【文章作者】: 柳州小林
【作者邮箱】: 2130292@163.com
【作者主页】: 无
【作者QQ号】: 55713720
【软件名称】: XX制作大师8.0
【软件大小】: 5,193,627 字节
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: 不知道
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD,PEiD
【操作平台】: XPSP2
【软件介绍】: http://www.dapengsoft.com.cn/files/seal80.zip
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
原来硬盘里是7.0的,加有UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo的壳,
本来想是练习脱壳的,谁知道搞来搞去EXE被我搞坏了:(,可惜网上已经没有7.0了,只能下8.0来试试。
用PEiD打开没有加壳。晕!看来只能玩算法了。
1、软件注册错误后显示“错误的注册码!”我用“超级字串参考”找到这里
00624860 6A 00 PUSH 0
00624862 66:8B0D C449620>MOV CX,WORD PTR DS:[6249C4]
00624869 B2 02 MOV DL,2
0062486B B8 D0496200 MOV EAX,Comdata.006249D0 ; 谢谢您:软件已成功注册!
00624870 E8 BB43FAFF CALL Comdata.005C8C30
00624875 C645 FF 01 MOV BYTE PTR SS:[EBP-1],1
00624879 EB 15 JMP SHORT Comdata.00624890
0062487B 6A 00 PUSH 0
0062487D 66:8B0D C449620>MOV CX,WORD PTR DS:[6249C4]
00624884 33D2 XOR EDX,EDX
00624886 B8 F4496200 MOV EAX,Comdata.006249F4 ; 错误的注册码!
0062488B E8 A043FAFF CALL Comdata.005C8C30
向上看来到这里,下断,我是看椎栈和寄存器的值一步一步跟,自己写的注释。
0062474B 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C]
0062474E 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00624751 8B80 04030000 MOV EAX,DWORD PTR DS:[EAX+304]
00624757 E8 A0A7FBFF CALL Comdata.005DEEFC ; 取第一组注册码
0062475C FF75 E4 PUSH DWORD PTR SS:[EBP-1C]
0062475F 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
00624762 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00624765 8B80 0C030000 MOV EAX,DWORD PTR DS:[EAX+30C]
0062476B E8 8CA7FBFF CALL Comdata.005DEEFC ; 取第一组注册码
00624770 FF75 E0 PUSH DWORD PTR SS:[EBP-20]
00624773 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
00624776 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00624779 8B80 14030000 MOV EAX,DWORD PTR DS:[EAX+314]
0062477F E8 78A7FBFF CALL Comdata.005DEEFC ; 取第一组注册码
00624784 FF75 DC PUSH DWORD PTR SS:[EBP-24]
00624787 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
0062478A 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0062478D 8B80 1C030000 MOV EAX,DWORD PTR DS:[EAX+31C]
00624793 E8 64A7FBFF CALL Comdata.005DEEFC ; 取第一组注册码
00624798 FF75 D8 PUSH DWORD PTR SS:[EBP-28]
0062479B 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
0062479E BA 04000000 MOV EDX,4
006247A3 E8 58FBF7FF CALL Comdata.005A4300
006247A8 8D4D D4 LEA ECX,DWORD PTR SS:[EBP-2C]
006247AB 66:BA EF0C MOV DX,0CEF
006247AF B8 40496200 MOV EAX,Comdata.00624940 ; sealwinxp
006247B4 E8 E7C0FDFF CALL Comdata.006008A0
006247B9 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C]
006247BC 8D4D F4 LEA ECX,DWORD PTR SS:[EBP-C]
006247BF 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 取注册码
006247C2 > E8 75C0FDFF CALL Comdata.0060083C ; 算法核心
006247C7 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
006247CA E8 71FAF7FF CALL Comdata.005A4240 ; 取注册码长度
006247CF > 83F8 14 CMP EAX,14 ; 校验注册码长度
006247D2 0F85 A3000000 JNZ Comdata.0062487B
006247D8 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30]
006247DB E8 90C1FDFF CALL Comdata.00600970
006247E0 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30]
006247E3 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
006247E6 E8 A1FBF7FF CALL Comdata.005A438C ; 校验机器码是否被改动
006247EB 0F85 8A000000 JNZ Comdata.0062487B
006247F1 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
006247F4 E8 77C1FDFF CALL Comdata.00600970
006247F9 8B45 CC MOV EAX,DWORD PTR SS:[EBP-34]
006247FC E8 3FFAF7FF CALL Comdata.005A4240
00624801 83F8 08 CMP EAX,8
00624804 75 75 JNZ SHORT Comdata.0062487B
00624806 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 取注册码
00624809 50 PUSH EAX
0062480A B9 54496200 MOV ECX,Comdata.00624954 ; regsn
0062480F BA 64496200 MOV EDX,Comdata.00624964 ; software\大鹏软件\印章制作 \userinfo
00624814 B8 02000080 MOV EAX,80000002
00624819 E8 46BFFDFF CALL Comdata.00600764 ; 写入注册表
0062481E 8D55 C8 LEA EDX,DWORD PTR SS:[EBP-38]
00624821 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00624824 8B80 28030000 MOV EAX,DWORD PTR DS:[EAX+328]
0062482A E8 CDA6FBFF CALL Comdata.005DEEFC
0062482F 8B45 C8 MOV EAX,DWORD PTR SS:[EBP-38]
00624832 50 PUSH EAX
00624833 B9 94496200 MOV ECX,Comdata.00624994 ; regusername
00624838 BA 64496200 MOV EDX,Comdata.00624964 ; software\大鹏软件\印章制作 \userinfo
0062483D B8 02000080 MOV EAX,80000002
00624842 E8 1DBFFDFF CALL Comdata.00600764
00624847 68 A8496200 PUSH Comdata.006249A8 ; registed
0062484C B9 BC496200 MOV ECX,Comdata.006249BC ; reginfo
00624851 BA 64496200 MOV EDX,Comdata.00624964 ; software\大鹏软件\印章制作 \userinfo
00624856 B8 02000080 MOV EAX,80000002
0062485B E8 04BFFDFF CALL Comdata.00600764
00624860 6A 00 PUSH 0
00624862 66:8B0D C449620>MOV CX,WORD PTR DS:[6249C4]
00624869 B2 02 MOV DL,2
0062486B B8 D0496200 MOV EAX,Comdata.006249D0 ; 谢谢您:软件已成功注册!
00624870 E8 BB43FAFF CALL Comdata.005C8C30
00624875 C645 FF 01 MOV BYTE PTR SS:[EBP-1],1
00624879 EB 15 JMP SHORT Comdata.00624890
0062487B 6A 00 PUSH 0
0062487D 66:8B0D C449620>MOV CX,WORD PTR DS:[6249C4]
00624884 33D2 XOR EDX,EDX
00624886 B8 F4496200 MOV EAX,Comdata.006249F4 ; 错误的注册码!
0062488B E8 A043FAFF CALL Comdata.005C8C30
从算法进入到这里,这里可能会有乱码,用CTRL+A试试,不行就“右键-》分析-》从代码中删除”
一步一步跟踪椎栈和寄存器的值后得出注册码的算法。
0060084D 8A22 MOV AH,BYTE PTR DS:[EDX] ; 取注册码第1组第一个
0060084F 8A42 05 MOV AL,BYTE PTR DS:[EDX+5] ; 取注册码第2组第一个
00600852 C1E0 10 SHL EAX,10
00600855 8A62 0A MOV AH,BYTE PTR DS:[EDX+A] ; 取注册码第3组第一个
00600858 8A42 0F MOV AL,BYTE PTR DS:[EDX+F] ; 取注册码第4组第一个
0060085B 3D 6570756C CMP EAX,6C757065 ;这句原来是乱码
00600860 75 71 JNZ SHORT Comdata.006008D3
00600862 8A62 13 MOV AH,BYTE PTR DS:[EDX+13] ; 取注册码第4组第5个
00600865 8A42 0E MOV AL,BYTE PTR DS:[EDX+E] ; 取注册码第3组第5个
00600868 C1E0 10 SHL EAX,10
0060086B 8A62 09 MOV AH,BYTE PTR DS:[EDX+9] ; 取注册码第2组第5个
0060086E 8A42 04 MOV AL,BYTE PTR DS:[EDX+4] ; 取注册码第1组第5个
00600871 59 POP ECX
00600872 36:8B11 MOV EDX,DWORD PTR SS:[ECX]
00600875 8B52 04 MOV EDX,DWORD PTR DS:[EDX+4]
00600878 3BC2 CMP EAX,EDX
0060087A 74 13 JE SHORT Comdata.0060088F
--------------------------------------------------------------------------------
【经验总结】
算法:
机器码:ABCDEFGH
注册码:aaaaa-bbbbb-ccccc-ddddd
以上为机器码和注册码形式。
注册码各组第1位已经固定(CMP EAX,6C757065)
laaaa-ubbbb-pcccc-edddd
注册码各组第5位分别为机器码后四位。
laaaE-ubbbF-pcccG-edddH
注册码各组第2-4位为任意字符。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2009年01月12日 14:32:13
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课