- UID
- 26439
注册时间2007-1-1
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
【文章标题】: Binerus 3D Image Commander算法分析
【文章作者】: wuhanqi
【作者邮箱】: [email protected]
【作者QQ号】: 459478830
【软件名称】: Binerus 3D Image Commander 1.70
【下载地址】: http://www.newhua.com/soft/88336.htm
【保护方式】: 无壳,算法
【编写语言】: delphi
【使用工具】: OD peid
【作者声明】: 闲来无事挑个软柿子捏捏
--------------------------------------------------------------------------------
【详细过程】
peid查壳:Borland Delphi 6.0 - 7.0
开始验证:
005294C0 /. 55 PUSH EBP ; 通过dede可以找到这里
005294C1 |. 8BEC MOV EBP,ESP
005294C3 |. 83C4 F4 ADD ESP,-0C
005294C6 |. 33C9 XOR ECX,ECX
005294C8 |. 894D F4 MOV DWORD PTR SS:[EBP-C],ECX
005294CB |. 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX
005294CE |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
005294D1 |. 33C0 XOR EAX,EAX
005294D3 |. 55 PUSH EBP
005294D4 |. 68 4F955200 PUSH 0052954F
005294D9 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
005294DC |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
005294DF |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
005294E2 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
005294E5 |. 8B80 38040000 MOV EAX,DWORD PTR DS:[EAX+438]
005294EB |. E8 7C7CF6FF CALL 0049116C
005294F0 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
005294F3 |. E8 88C6FFFF CALL 00525B80 ; 关键call,要al==1
005294F8 |. 84C0 TEST AL,AL
005294FA |. 74 35 JE SHORT 00529531
005294FC |. C605 20AE5300>MOV BYTE PTR DS:[53AE20],1
00529503 |. 8A15 20AE5300 MOV DL,BYTE PTR DS:[53AE20]
00529509 |. 80F2 01 XOR DL,1
0052950C |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0052950F |. 8B80 1C040000 MOV EAX,DWORD PTR DS:[EAX+41C]
00529515 |. E8 2E5AF9FF CALL 004BEF48
0052951A |. 8A15 20AE5300 MOV DL,BYTE PTR DS:[53AE20]
00529520 |. 80F2 01 XOR DL,1
00529523 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00529526 |. 8B80 F0040000 MOV EAX,DWORD PTR DS:[EAX+4F0]
0052952C |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
0052952E |. FF51 58 CALL DWORD PTR DS:[ECX+58]
00529531 |> 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00529534 |. E8 4BFEFFFF CALL 00529384
00529539 |. 33C0 XOR EAX,EAX
0052953B |. 5A POP EDX
0052953C |. 59 POP ECX
0052953D |. 59 POP ECX
0052953E |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
00529541 |. 68 56955200 PUSH 00529556
00529546 |> 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
00529549 |. E8 A2B3EDFF CALL 004048F0
0052954E \. C3 RETN
0052954F .^ E9 F4A5EDFF JMP 00403B48
00529554 .^ EB F0 JMP SHORT 00529546
00529556 . 8BE5 MOV ESP,EBP
00529558 . 5D POP EBP
00529559 . C3 RETN
===================================================================
00525B80 55 PUSH EBP
00525B81 8BEC MOV EBP,ESP
00525B83 B9 06000000 MOV ECX,6
00525B88 6A 00 PUSH 0
00525B8A |. 6A 00 |PUSH 0
00525B8C |. 49 |DEC ECX
00525B8D |.^ 75 F9 \JNZ SHORT 00525B88
00525B8F |. 53 PUSH EBX
00525B90 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00525B93 |. 33C0 XOR EAX,EAX
00525B95 |. 55 PUSH EBP
00525B96 |. 68 385D5200 PUSH 00525D38
00525B9B |. 64:FF30 PUSH DWORD PTR FS:[EAX]
00525B9E |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00525BA1 |. C645 FB 00 MOV BYTE PTR SS:[EBP-5],0
00525BA5 |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
00525BA8 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00525BAB |. E8 BCE8EDFF CALL 0040446C
00525BB0 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C]
00525BB3 |. B8 505D5200 MOV EAX,00525D50 ; ASCII "6E87-56BE-E484-962F"
00525BB8 |. E8 D32AEEFF CALL 00408690 ; 黑名单,相等即死
00525BBD |. 85C0 TEST EAX,EAX
00525BBF |. 0F9445 FB SETE BYTE PTR SS:[EBP-5]
00525BC3 |. 807D FB 00 CMP BYTE PTR SS:[EBP-5],0
00525BC7 |. 74 09 JE SHORT 00525BD2
00525BC9 |. C645 FB 00 MOV BYTE PTR SS:[EBP-5],0
00525BCD |. E9 0B010000 JMP 00525CDD
00525BD2 |> C645 FB 00 MOV BYTE PTR SS:[EBP-5],0
00525BD6 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00525BD9 |. E8 CEEEEDFF CALL 00404AAC ; 比较位数是否是0x13位。
00525BDE |. 83F8 13 CMP EAX,13
00525BE1 |. 0F85 F6000000 JNZ 00525CDD
00525BE7 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00525BEA |. 66:8378 08 2D CMP WORD PTR DS:[EAX+8],2D
00525BEF |. 0F85 E8000000 JNZ 00525CDD ; 检验是否按这样的格式输入了注册码xxxx-xxxx-xxxx-xxxx
00525BF5 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00525BF8 |. 66:8378 12 2D CMP WORD PTR DS:[EAX+12],2D
00525BFD |. 0F85 DA000000 JNZ 00525CDD
00525C03 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00525C06 |. 66:8378 1C 2D CMP WORD PTR DS:[EAX+1C],2D
00525C0B |. 0F85 CC000000 JNZ 00525CDD
00525C11 |. 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
00525C14 |. A1 BCB15300 MOV EAX,DWORD PTR DS:[53B1BC]
00525C19 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00525C1B |. E8 14C0F3FF CALL 00461C34
00525C20 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14] ; 出现固定字符串
00525C23 |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
00525C26 |. E8 61EEEDFF CALL 00404A8C
00525C2B |. 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10] ; 这几句比较是否我们输入的是固定字符串
00525C2E |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00525C31 |. E8 8EEFEDFF CALL 00404BC4
00525C36 |. 74 30 JE SHORT 00525C68
00525C38 |. 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C]
00525C3B |. A1 BCB15300 MOV EAX,DWORD PTR DS:[53B1BC]
00525C40 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00525C42 |. E8 EDBFF3FF CALL 00461C34
00525C47 |. 8B55 E4 MOV EDX,DWORD PTR SS:[EBP-1C]
00525C4A |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
00525C4D |. E8 3AEEEDFF CALL 00404A8C
00525C52 |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
00525C55 |. E8 1EFDFFFF CALL 00525978 ; 算法call,结果到eax
00525C5A |. 8BD8 MOV EBX,EAX ; 固定字符串计算后的结果到ebx
00525C5C |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 假码到eax
00525C5F |. E8 14FDFFFF CALL 00525978 ; 算法call,结果到eax
00525C64 |. 3BD8 CMP EBX,EAX ; 比较eax与ebx
00525C66 |. 74 04 JE SHORT 00525C6C ; 相等即赋值1,注册成功
00525C68 |> 33C0 XOR EAX,EAX
00525C6A |. EB 02 JMP SHORT 00525C6E
00525C6C |> B0 01 MOV AL,1
00525C6E |> 8845 FB MOV BYTE PTR SS:[EBP-5],AL
00525C71 |. 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
00525C74 |. A1 BCB15300 MOV EAX,DWORD PTR DS:[53B1BC]
00525C79 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00525C7B |. E8 B4BFF3FF CALL 00461C34
00525C80 |. 8B55 DC MOV EDX,DWORD PTR SS:[EBP-24]
00525C83 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
00525C86 |. E8 01EEEDFF CALL 00404A8C
00525C8B |. 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
00525C8E |. E8 E5FCFFFF CALL 00525978
00525C93 |. 8BD8 MOV EBX,EAX
00525C95 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00525C98 |. E8 DBFCFFFF CALL 00525978
00525C9D |. 3BD8 CMP EBX,EAX
00525C9F |. 75 3C JNZ SHORT 00525CDD
00525CA1 |. 8D55 D0 LEA EDX,DWORD PTR SS:[EBP-30]
00525CA4 |. A1 BCB15300 MOV EAX,DWORD PTR DS:[53B1BC]
00525CA9 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00525CAB |. E8 84BFF3FF CALL 00461C34
00525CB0 |. 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30]
00525CB3 |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
00525CB6 |. E8 D1EDEDFF CALL 00404A8C
00525CBB |. 8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C]
00525CBE |. 8D55 D8 LEA EDX,DWORD PTR SS:[EBP-28]
00525CC1 |. E8 DAB6FAFF CALL 004D13A0
00525CC6 |. 8B55 D8 MOV EDX,DWORD PTR SS:[EBP-28]
00525CC9 |. 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
00525CCC |. B8 685D5200 MOV EAX,00525D68 ; UNICODE "software\ksdev"
00525CD1 |. E8 16FDFFFF CALL 005259EC
00525CD6 |. C605 20AE5300>MOV BYTE PTR DS:[53AE20],1
00525CDD |> 33C0 XOR EAX,EAX
00525CDF |. 5A POP EDX
00525CE0 |. 59 POP ECX
00525CE1 |. 59 POP ECX
00525CE2 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
00525CE5 |. 68 3F5D5200 PUSH 00525D3F
00525CEA |> 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30]
00525CED |. E8 F2E4EDFF CALL 004041E4
00525CF2 |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
00525CF5 |. BA 02000000 MOV EDX,2
00525CFA |. E8 09ECEDFF CALL 00404908
00525CFF |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
00525D02 |. E8 DDE4EDFF CALL 004041E4
00525D07 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
00525D0A |. E8 E1EBEDFF CALL 004048F0
00525D0F |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
00525D12 |. E8 CDE4EDFF CALL 004041E4
00525D17 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
00525D1A |. E8 D1EBEDFF CALL 004048F0
00525D1F |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
00525D22 |. E8 BDE4EDFF CALL 004041E4
00525D27 |. 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
00525D2A |. E8 C1EBEDFF CALL 004048F0
00525D2F |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
00525D32 |. E8 ADE4EDFF CALL 004041E4
00525D37 \. C3 RETN
00525D38 .^ E9 0BDEEDFF JMP 00403B48
00525D3D .^ EB AB JMP SHORT 00525CEA
00525D3F . 8A45 FB MOV AL,BYTE PTR SS:[EBP-5]
00525D42 . 5B POP EBX
00525D43 . 8BE5 MOV ESP,EBP
00525D45 . 5D POP EBP
00525D46 . C3 RETN
================================================================
程序对固定字符串和假码进行的是相同的运算。
算法call:
00525978 /$ 55 PUSH EBP
00525979 |. 8BEC MOV EBP,ESP
0052597B |. 83C4 EC ADD ESP,-14
0052597E |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00525981 |. 33C0 XOR EAX,EAX
00525983 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
00525986 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 取固定字符串"3D Image Commander"
00525989 |. E8 1EF1EDFF CALL 00404AAC ; 计算位数
0052598E |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX ; 位数到ebp-10,就是存到堆栈
00525991 |. 837D F0 0A CMP DWORD PTR SS:[EBP-10],0A ; 比较是否小于10位
00525995 |. 7E 07 JLE SHORT 0052599E ; 小于实现跳转
00525997 |. C745 F0 0A000>MOV DWORD PTR SS:[EBP-10],0A ; 大于的话强行把大小赋值为10,即只计算前十位
0052599E |> 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] ; 大小到eax
005259A1 |. 85C0 TEST EAX,EAX
005259A3 |. 7E 30 JLE SHORT 005259D5 ; 再看看有没有
005259A5 |. 8945 EC MOV DWORD PTR SS:[EBP-14],EAX ; 放到ebp-14里计算
005259A8 |. C745 F4 01000>MOV DWORD PTR SS:[EBP-C],1 ; 附上一个初始的值。
//由于初始寄存器都被清空,事实上只取了前9位进行计算,第一次运算可从005259BD 开始看
005259AF |> 8B45 F8 /MOV EAX,DWORD PTR SS:[EBP-8] ; eax=A
005259B2 |. C1E0 02 |SHL EAX,2 ; A逻辑左移两位
005259B5 |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8] ; edx=A
005259B8 |. C1EA 1E |SHR EDX,1E ; A逻辑右移30位
005259BB |. 0BC2 |OR EAX,EDX ; EAX=EAX与EDX做或运算
005259BD |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4] ; 字符串到edx
005259C0 |. 8B4D F4 |MOV ECX,DWORD PTR SS:[EBP-C] ; 初始的值1到ecx
005259C3 |. 0FB7544A FE |MOVZX EDX,WORD PTR DS:[EDX+ECX*2-2] ; 取第edx+ecx*2-2位,因为是unicode的形式,所以必须取两个字节(word)
005259C8 |. 33C2 |XOR EAX,EDX ; eax与取出的字节做异或运算
005259CA |. 8945 F8 |MOV DWORD PTR SS:[EBP-8],EAX ; eax放到堆栈里保存,设为A
005259CD |. FF45 F4 |INC DWORD PTR SS:[EBP-C] ; 初始值+1
005259D0 |. FF4D EC |DEC DWORD PTR SS:[EBP-14] ; 位数-1到零即停止运算
005259D3 |.^ 75 DA \JNZ SHORT 005259AF
005259D5 |> 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 计算好的数值拉出来。
005259D8 |. B9 FF0F0000 MOV ECX,0FFF ; ecx=0xfff
005259DD |. 33D2 XOR EDX,EDX ; 清空edx
005259DF |. F7F1 DIV ECX ; eax/ecx,余数到edx
005259E1 |. 8955 F8 MOV DWORD PTR SS:[EBP-8],EDX ; edx就是真正最后的要求的值,压栈
005259E4 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 到eax
005259E7 |. 8BE5 MOV ESP,EBP
005259E9 |. 5D POP EBP
005259EA \. C3 RETN
--------------------------------------------------------------------------------
【经验总结】
取固定值3D Image Commander前9位。
依次取16进制分别左移2位和右移12位,做或运算。
然后再与下一位的16进制做异或运算。
如此循环直至算完。
假码也进行相同的运算,结果与上面算完的结果相同即可
业余玩破解的,写不来注册机。
有朋友能写个C的注册机给我学习一下的话最好~
--------------------------------------------------------------------------------
【版权声明】: 版权没有, 转载不究~
2009年10月26日 20:05:25 |
评分
-
查看全部评分
|