【文章标题】: Binerus 3D Image Commander算法分析
【文章作者】: wuhanqi
【作者邮箱】: wuhanqi@qq.com
【作者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