Binerus 3D Image Commander算法分析
【文章标题】: 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:,ECX
005294CB|.8955 F8 MOV DWORD PTR SS:,EDX
005294CE|.8945 FC MOV DWORD PTR SS:,EAX
005294D1|.33C0 XOR EAX,EAX
005294D3|.55 PUSH EBP
005294D4|.68 4F955200 PUSH 0052954F
005294D9|.64:FF30 PUSH DWORD PTR FS:
005294DC|.64:8920 MOV DWORD PTR FS:,ESP
005294DF|.8D55 F4 LEA EDX,DWORD PTR SS:
005294E2|.8B45 FC MOV EAX,DWORD PTR SS:
005294E5|.8B80 38040000 MOV EAX,DWORD PTR DS:
005294EB|.E8 7C7CF6FF CALL 0049116C
005294F0|.8B45 F4 MOV EAX,DWORD PTR SS:
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:,1
00529503|.8A15 20AE5300 MOV DL,BYTE PTR DS:
00529509|.80F2 01 XOR DL,1
0052950C|.8B45 FC MOV EAX,DWORD PTR SS:
0052950F|.8B80 1C040000 MOV EAX,DWORD PTR DS:
00529515|.E8 2E5AF9FF CALL 004BEF48
0052951A|.8A15 20AE5300 MOV DL,BYTE PTR DS:
00529520|.80F2 01 XOR DL,1
00529523|.8B45 FC MOV EAX,DWORD PTR SS:
00529526|.8B80 F0040000 MOV EAX,DWORD PTR DS:
0052952C|.8B08 MOV ECX,DWORD PTR DS:
0052952E|.FF51 58 CALL DWORD PTR DS:
00529531|>8B45 FC MOV EAX,DWORD PTR SS:
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:,EDX
00529541|.68 56955200 PUSH 00529556
00529546|>8D45 F4 LEA EAX,DWORD PTR SS:
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:,EAX
00525B93|.33C0 XOR EAX,EAX
00525B95|.55 PUSH EBP
00525B96|.68 385D5200 PUSH 00525D38
00525B9B|.64:FF30 PUSH DWORD PTR FS:
00525B9E|.64:8920 MOV DWORD PTR FS:,ESP
00525BA1|.C645 FB 00 MOV BYTE PTR SS:,0
00525BA5|.8D45 F4 LEA EAX,DWORD PTR SS:
00525BA8|.8B55 FC MOV EDX,DWORD PTR SS:
00525BAB|.E8 BCE8EDFF CALL 0040446C
00525BB0|.8B55 F4 MOV EDX,DWORD PTR SS:
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:
00525BC3|.807D FB 00 CMP BYTE PTR SS:,0
00525BC7|.74 09 JE SHORT 00525BD2
00525BC9|.C645 FB 00 MOV BYTE PTR SS:,0
00525BCD|.E9 0B010000 JMP 00525CDD
00525BD2|>C645 FB 00 MOV BYTE PTR SS:,0
00525BD6|.8B45 FC MOV EAX,DWORD PTR SS:
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:
00525BEA|.66:8378 08 2D CMP WORD PTR DS:,2D
00525BEF|.0F85 E8000000 JNZ 00525CDD ;检验是否按这样的格式输入了注册码xxxx-xxxx-xxxx-xxxx
00525BF5|.8B45 FC MOV EAX,DWORD PTR SS:
00525BF8|.66:8378 12 2D CMP WORD PTR DS:,2D
00525BFD|.0F85 DA000000 JNZ 00525CDD
00525C03|.8B45 FC MOV EAX,DWORD PTR SS:
00525C06|.66:8378 1C 2D CMP WORD PTR DS:,2D
00525C0B|.0F85 CC000000 JNZ 00525CDD
00525C11|.8D55 EC LEA EDX,DWORD PTR SS:
00525C14|.A1 BCB15300 MOV EAX,DWORD PTR DS:
00525C19|.8B00 MOV EAX,DWORD PTR DS:
00525C1B|.E8 14C0F3FF CALL 00461C34
00525C20|.8B55 EC MOV EDX,DWORD PTR SS: ;出现固定字符串
00525C23|.8D45 F0 LEA EAX,DWORD PTR SS:
00525C26|.E8 61EEEDFF CALL 00404A8C
00525C2B|.8B55 F0 MOV EDX,DWORD PTR SS: ;这几句比较是否我们输入的是固定字符串
00525C2E|.8B45 FC MOV EAX,DWORD PTR SS:
00525C31|.E8 8EEFEDFF CALL 00404BC4
00525C36|.74 30 JE SHORT 00525C68
00525C38|.8D55 E4 LEA EDX,DWORD PTR SS:
00525C3B|.A1 BCB15300 MOV EAX,DWORD PTR DS:
00525C40|.8B00 MOV EAX,DWORD PTR DS:
00525C42|.E8 EDBFF3FF CALL 00461C34
00525C47|.8B55 E4 MOV EDX,DWORD PTR SS:
00525C4A|.8D45 E8 LEA EAX,DWORD PTR SS:
00525C4D|.E8 3AEEEDFF CALL 00404A8C
00525C52|.8B45 E8 MOV EAX,DWORD PTR SS:
00525C55|.E8 1EFDFFFF CALL 00525978 ;算法call,结果到eax
00525C5A|.8BD8 MOV EBX,EAX ;固定字符串计算后的结果到ebx
00525C5C|.8B45 FC MOV EAX,DWORD PTR SS: ;假码到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:,AL
00525C71|.8D55 DC LEA EDX,DWORD PTR SS:
00525C74|.A1 BCB15300 MOV EAX,DWORD PTR DS:
00525C79|.8B00 MOV EAX,DWORD PTR DS:
00525C7B|.E8 B4BFF3FF CALL 00461C34
00525C80|.8B55 DC MOV EDX,DWORD PTR SS:
00525C83|.8D45 E0 LEA EAX,DWORD PTR SS:
00525C86|.E8 01EEEDFF CALL 00404A8C
00525C8B|.8B45 E0 MOV EAX,DWORD PTR SS:
00525C8E|.E8 E5FCFFFF CALL 00525978
00525C93|.8BD8 MOV EBX,EAX
00525C95|.8B45 FC MOV EAX,DWORD PTR SS:
00525C98|.E8 DBFCFFFF CALL 00525978
00525C9D|.3BD8 CMP EBX,EAX
00525C9F|.75 3C JNZ SHORT 00525CDD
00525CA1|.8D55 D0 LEA EDX,DWORD PTR SS:
00525CA4|.A1 BCB15300 MOV EAX,DWORD PTR DS:
00525CA9|.8B00 MOV EAX,DWORD PTR DS:
00525CAB|.E8 84BFF3FF CALL 00461C34
00525CB0|.8B55 D0 MOV EDX,DWORD PTR SS:
00525CB3|.8D45 D4 LEA EAX,DWORD PTR SS:
00525CB6|.E8 D1EDEDFF CALL 00404A8C
00525CBB|.8B45 D4 MOV EAX,DWORD PTR SS:
00525CBE|.8D55 D8 LEA EDX,DWORD PTR SS:
00525CC1|.E8 DAB6FAFF CALL 004D13A0
00525CC6|.8B55 D8 MOV EDX,DWORD PTR SS:
00525CC9|.8B4D FC MOV ECX,DWORD PTR SS:
00525CCC|.B8 685D5200 MOV EAX,00525D68 ;UNICODE "software\ksdev"
00525CD1|.E8 16FDFFFF CALL 005259EC
00525CD6|.C605 20AE5300>MOV BYTE PTR DS:,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:,EDX
00525CE5|.68 3F5D5200 PUSH 00525D3F
00525CEA|>8D45 D0 LEA EAX,DWORD PTR SS:
00525CED|.E8 F2E4EDFF CALL 004041E4
00525CF2|.8D45 D4 LEA EAX,DWORD PTR SS:
00525CF5|.BA 02000000 MOV EDX,2
00525CFA|.E8 09ECEDFF CALL 00404908
00525CFF|.8D45 DC LEA EAX,DWORD PTR SS:
00525D02|.E8 DDE4EDFF CALL 004041E4
00525D07|.8D45 E0 LEA EAX,DWORD PTR SS:
00525D0A|.E8 E1EBEDFF CALL 004048F0
00525D0F|.8D45 E4 LEA EAX,DWORD PTR SS:
00525D12|.E8 CDE4EDFF CALL 004041E4
00525D17|.8D45 E8 LEA EAX,DWORD PTR SS:
00525D1A|.E8 D1EBEDFF CALL 004048F0
00525D1F|.8D45 EC LEA EAX,DWORD PTR SS:
00525D22|.E8 BDE4EDFF CALL 004041E4
00525D27|.8D45 F0 LEA EAX,DWORD PTR SS:
00525D2A|.E8 C1EBEDFF CALL 004048F0
00525D2F|.8D45 F4 LEA EAX,DWORD PTR SS:
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:
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:,EAX
00525981|.33C0 XOR EAX,EAX
00525983|.8945 F8 MOV DWORD PTR SS:,EAX
00525986|.8B45 FC MOV EAX,DWORD PTR SS: ;取固定字符串"3D Image Commander"
00525989|.E8 1EF1EDFF CALL 00404AAC ;计算位数
0052598E|.8945 F0 MOV DWORD PTR SS:,EAX ;位数到ebp-10,就是存到堆栈
00525991|.837D F0 0A CMP DWORD PTR SS:,0A ;比较是否小于10位
00525995|.7E 07 JLE SHORT 0052599E ;小于实现跳转
00525997|.C745 F0 0A000>MOV DWORD PTR SS:,0A ;大于的话强行把大小赋值为10,即只计算前十位
0052599E|>8B45 F0 MOV EAX,DWORD PTR SS: ;大小到eax
005259A1|.85C0 TEST EAX,EAX
005259A3|.7E 30 JLE SHORT 005259D5 ;再看看有没有
005259A5|.8945 EC MOV DWORD PTR SS:,EAX ;放到ebp-14里计算
005259A8|.C745 F4 01000>MOV DWORD PTR SS:,1 ;附上一个初始的值。
//由于初始寄存器都被清空,事实上只取了前9位进行计算,第一次运算可从005259BD开始看
005259AF|>8B45 F8 /MOV EAX,DWORD PTR SS: ;eax=A
005259B2|.C1E0 02 |SHL EAX,2 ;A逻辑左移两位
005259B5|.8B55 F8 |MOV EDX,DWORD PTR SS: ;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: ;字符串到edx
005259C0|.8B4D F4 |MOV ECX,DWORD PTR SS: ;初始的值1到ecx
005259C3|.0FB7544A FE |MOVZX EDX,WORD PTR DS: ;取第edx+ecx*2-2位,因为是unicode的形式,所以必须取两个字节(word)
005259C8|.33C2 |XOR EAX,EDX ;eax与取出的字节做异或运算
005259CA|.8945 F8 |MOV DWORD PTR SS:,EAX ;eax放到堆栈里保存,设为A
005259CD|.FF45 F4 |INC DWORD PTR SS: ;初始值+1
005259D0|.FF4D EC |DEC DWORD PTR SS: ;位数-1到零即停止运算
005259D3|.^ 75 DA \JNZ SHORT 005259AF
005259D5|>8B45 F8 MOV EAX,DWORD PTR SS: ;计算好的数值拉出来。
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:,EDX ;edx就是真正最后的要求的值,压栈
005259E4|.8B45 F8 MOV EAX,DWORD PTR SS: ;到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 {:299_842:}
膜拜大牛 作品 嗯,膜拜一下大牛,坐下来慢慢看 慢慢看,学习 雖然沒有注冊机源碼,
但是光看算法分析也覺得很強大.
佩服~~ 5# ZeNiX
老Z。你饶了我吧。我这个后辈还差很多呢。。 感謝大大詳細的分析教學. 不错!收藏了!
页:
[1]