【文章标题】: IdealDVDCopy算法分析
【文章作者】: 小子贼野
【作者主页】: http://mayday.unpack.cn
【下载地址】: http://www.idealdvdcopy.com/
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
*******************************************************************************************
00427AA0 53 push ebx
00427AA1 8B5C24 08 mov ebx,dword ptr ss:[esp+8]
00427AA5 55 push ebp
00427AA6 57 push edi
00427AA7 8BFB mov edi,ebx
00427AA9 83C9 FF or ecx,FFFFFFFF
00427AAC 33C0 xor eax,eax
00427AAE 33ED xor ebp,ebp
00427AB0 F2:AE repne scas byte ptr es:[edi]
00427AB2 F7D1 not ecx
00427AB4 49 dec ecx
00427AB5 33D2 xor edx,edx
00427AB7 85C9 test ecx,ecx
00427AB9 7E 36 jle short IdealDVD.00427AF1 ; 这里测试有没有填用户名
00427ABB 56 push esi
00427ABC 8BC1 mov eax,ecx ; 用户名位数放到EAX里
00427ABE 2BC2 sub eax,edx
00427AC0 48 dec eax ; 用户名位数减1
00427AC1 66:85C0 test ax,ax
00427AC4 8BF0 mov esi,eax ; 用户名位数减1后放到ESI中
00427AC6 75 05 jnz short IdealDVD.00427ACD
00427AC8 BE 01000000 mov esi,1
00427ACD 66:0FB63C1A movzx di,byte ptr ds:[edx+ebx] ; 用户名第一位Ascii放di里
00427AD2 25 FFFF0000 and eax,0FFFF
00427AD7 66:0FB60418 movzx ax,byte ptr ds:[eax+ebx] ; 用户名最后一位Ascii放ax里
00427ADC 0FAFC7 imul eax,edi ; EAX=用户名第一位Ascii乘第二位Ascii
00427ADF 0FAFC6 imul eax,esi ; EAX=EAX*ESi(ESI=用户名位数减1)
00427AE2 03E8 add ebp,eax ; 存到EBP里
00427AE4 42 inc edx ; 计数器加1
00427AE5 3BD1 cmp edx,ecx ; 比较
00427AE7 ^ 7C D3 jl short IdealDVD.00427ABC ; 循环
00427AE9 5E pop esi
00427AEA 66:8BC5 mov ax,bp ; 取BP放到AX里,也就是取EBP的后四位放到EAX的后四位
00427AED 5F pop edi
00427AEE 5D pop ebp
00427AEF 5B pop ebx
00427AF0 C3 retn
*******************************************************************************************
这里取用户名计算的方式是:用户名:abcdef,对应的计算方式就是:a-f,b-e,c-d,d-c,e-b,f-a
就相当于把字符串倒转过来,分别为a,b,分别取a,b的Ascii做以上循环计算
*******************************************************************************************
00427BB0 6A FF push -1 ; 在这下断
00427BB2 68 E81E5100 push IdealDVD.00511EE8
00427BB7 64:A1 0000000>mov eax,dword ptr fs:[0]
00427BBD 50 push eax
00427BBE 64:8925 00000>mov dword ptr fs:[0],esp
00427BC5 83EC 0C sub esp,0C
00427BC8 53 push ebx
00427BC9 55 push ebp
00427BCA 56 push esi
00427BCB 57 push edi
00427BCC 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
00427BD0 E8 95EEFFFF call <jmp.&MFC42.#540>
00427BD5 8B7C24 30 mov edi,dword ptr ss:[esp+30]
00427BD9 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00427BDD 57 push edi
00427BDE C74424 28 000>mov dword ptr ss:[esp+28],0
00427BE6 E8 47F0FFFF call <jmp.&MFC42.#537>
00427BEB 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00427BEF C64424 24 01 mov byte ptr ss:[esp+24],1
00427BF4 E8 DDEEFFFF call <jmp.&MFC42.#6282>
00427BF9 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00427BFD E8 CEEEFFFF call <jmp.&MFC42.#6283>
00427C02 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00427C06 E8 7FEFFFFF call <jmp.&MFC42.#4204>
00427C0B 6A 30 push 30
00427C0D 6A 4F push 4F
00427C0F 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00427C13 E8 C6EFFFFF call <jmp.&MFC42.#6876>
00427C18 83CE FF or esi,FFFFFFFF
00427C1B 33C0 xor eax,eax
00427C1D 8BCE mov ecx,esi
00427C1F F2:AE repne scas byte ptr es:[edi]
00427C21 F7D1 not ecx
00427C23 49 dec ecx
00427C24 83F9 14 cmp ecx,14 ; 比较注册码是不是填够了$14位,也就是说要20位注册码
00427C27 75 3E jnz short IdealDVD.00427C67 ; 不够就跳了
00427C29 8B4424 2C mov eax,dword ptr ss:[esp+2C]
00427C2D 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00427C31 50 push eax
00427C32 E8 FBEFFFFF call <jmp.&MFC42.#537>
00427C37 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00427C3B C64424 24 02 mov byte ptr ss:[esp+24],2
00427C40 E8 91EEFFFF call <jmp.&MFC42.#6282>
00427C45 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00427C49 E8 82EEFFFF call <jmp.&MFC42.#6283>
00427C4E 8B4424 18 mov eax,dword ptr ss:[esp+18]
00427C52 8B48 F8 mov ecx,dword ptr ds:[eax-8]
00427C55 85C9 test ecx,ecx
00427C57 75 25 jnz short IdealDVD.00427C7E
00427C59 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00427C5D C64424 24 01 mov byte ptr ss:[esp+24],1
00427C62 E8 DFEDFFFF call <jmp.&MFC42.#800>
00427C67 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00427C6B C64424 24 00 mov byte ptr ss:[esp+24],0
00427C70 E8 D1EDFFFF call <jmp.&MFC42.#800>
00427C75 897424 24 mov dword ptr ss:[esp+24],esi
00427C79 E9 F2000000 jmp IdealDVD.00427D70
00427C7E 50 push eax
00427C7F E8 1CFEFFFF call IdealDVD.00427AA0 ; 这个Call是对用户名进行计算的,要分析的
00427C84 8BC8 mov ecx,eax ; ECX=EAX
00427C86 BE 14000000 mov esi,14 ; ESI=$14
00427C8B 81E1 FFFF0000 and ecx,0FFFF ; ECX And $FFFF,66AF6A92 And $FFFF=6A92,不理解的手算一下就理解了
00427C91 83C4 04 add esp,4
00427C94 8BC1 mov eax,ecx ; EAX=ECX=6A92
00427C96 99 cdq
00427C97 F7FE idiv esi ; $6A92 idiv $14,商在EAX,余数在EDX
00427C99 51 push ecx ; ECX入栈
00427C9A 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00427C9E 68 802E5400 push IdealDVD.00542E80 ; ASCII "%04x"
00427CA3 51 push ecx
00427CA4 8BFA mov edi,edx ; 这句是将余数放到EDI
00427CA6 E8 5BEEFFFF call <jmp.&MFC42.#2818>
00427CAB 83C4 0C add esp,0C
00427CAE 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
00427CB2 E8 D3EEFFFF call <jmp.&MFC42.#4204>
00427CB7 8BCF mov ecx,edi ; 又将余数放到ECX
00427CB9 BF 14000000 mov edi,14
00427CBE 81E1 FFFF0000 and ecx,0FFFF
00427CC4 8B7424 14 mov esi,dword ptr ss:[esp+14]
00427CC8 8D41 05 lea eax,dword ptr ds:[ecx+5]
00427CCB 8A1E mov bl,byte ptr ds:[esi]
00427CCD 99 cdq
00427CCE F7FF idiv edi
00427CD0 8B7C24 10 mov edi,dword ptr ss:[esp+10]
00427CD4 3A1C3A cmp bl,byte ptr ds:[edx+edi] ; 比较第8位是不是用户名计算后的值的第1位
00427CD7 75 73 jnz short IdealDVD.00427D4C ; 不相等就Over
00427CD9 8D41 0B lea eax,dword ptr ds:[ecx+B]
00427CDC BD 14000000 mov ebp,14
00427CE1 99 cdq
00427CE2 F7FD idiv ebp
00427CE4 8A5E 01 mov bl,byte ptr ds:[esi+1]
00427CE7 3A1C3A cmp bl,byte ptr ds:[edx+edi] ; 比较第14位是不是用户名计算后的值的第2位
00427CEA 75 60 jnz short IdealDVD.00427D4C ; 不相等就Over
00427CEC 8D41 12 lea eax,dword ptr ds:[ecx+12]
00427CEF 8A5E 02 mov bl,byte ptr ds:[esi+2]
00427CF2 99 cdq
00427CF3 F7FD idiv ebp
00427CF5 3A1C3A cmp bl,byte ptr ds:[edx+edi] ; 比较第1位是不是用户名计算后的值的第3位
00427CF8 75 52 jnz short IdealDVD.00427D4C ; 不相等就Over
00427CFA 8D41 09 lea eax,dword ptr ds:[ecx+9]
00427CFD 8BCD mov ecx,ebp
00427CFF 99 cdq
00427D00 F7F9 idiv ecx
00427D02 8A5E 03 mov bl,byte ptr ds:[esi+3]
00427D05 3A1C3A cmp bl,byte ptr ds:[edx+edi] ; 比较第12位是不是用户名计算后的值的第4位
00427D08 75 42 jnz short IdealDVD.00427D4C ; 不相等就Over
00427D0A 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00427D0E C64424 24 01 mov byte ptr ss:[esp+24],1
00427D13 E8 2EEDFFFF call <jmp.&MFC42.#800>
00427D18 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00427D1C C64424 24 00 mov byte ptr ss:[esp+24],0
00427D21 E8 20EDFFFF call <jmp.&MFC42.#800>
00427D26 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
00427D2A C74424 24 FFF>mov dword ptr ss:[esp+24],-1
00427D32 E8 0FEDFFFF call <jmp.&MFC42.#800>
00427D37 5F pop edi
00427D38 5E pop esi
00427D39 5D pop ebp
00427D3A B0 01 mov al,1
00427D3C 5B pop ebx
00427D3D 8B4C24 0C mov ecx,dword ptr ss:[esp+C]
00427D41 64:890D 00000>mov dword ptr fs:[0],ecx
00427D48 83C4 18 add esp,18
00427D4B C3 retn
*******************************************************************************************
一组可用的序列号:
用户名:abcdef
注册码:923456769012A4567890
*******************************************************************************************
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)