MyVideoConverter 1.18.1
Microsoft Visual C++ 6.0
1.MessageBoxExA断下后返回,往上找到关键地方:
004121FA 8B5424 04 mov edx,dword ptr ss:[esp+4]
004121FE 8B4424 08 mov eax,dword ptr ss:[esp+8]
00412202 52 push edx
00412203 50 push eax
00412204 B9 64984600 mov ecx,MyVideoC.00469864
00412209 E8 B2720300 call MyVideoC.004494C0 ; 计算
0041220E 85C0 test eax,eax
00412210 74 09 je short MyVideoC.0041221B ; 关键跳转
2.进call: call MyVideoC.004494C0
加密用户名:
之前检查用户名是否16位,如果不够的话用00补充:
00449537 83F9 10 cmp ecx,10
然后加密:
00449593 E8 F8D0FDFF call MyVideoC.00426690 ; 加密用户名
用户名:0012D6E4 63 79 74 6F 00 00 00 00 00 00 00 00 00 00 00 00 cyto............
加密值:0012D714 5F 9A 0D 9C E9 D9 66 C4 73 23 DB D0 78 98 97 89 _??冁捏#坌x?
注册码的读入:
004495A2 33F6 xor esi,esi
004495A4 66:897424 5D mov word ptr ss:[esp+5D],si ; 以下转换为字节
004495A9 66:8B17 mov dx,word ptr ds:[edi]
004495AC 8D4424 14 lea eax,dword ptr ss:[esp+14]
004495B0 50 push eax
004495B1 8D4C24 60 lea ecx,dword ptr ss:[esp+60]
004495B5 68 CC904600 push MyVideoC.004690CC ; ASCII "%x"
004495BA 51 push ecx
004495BB 66:895424 68 mov word ptr ss:[esp+68],dx
004495C0 FFD5 call ebp
004495C2 8A5424 20 mov dl,byte ptr ss:[esp+20]
004495C6 83C4 0C add esp,0C
004495C9 885434 28 mov byte ptr ss:[esp+esi+28],dl
004495CD 46 inc esi
004495CE 83C7 02 add edi,2
004495D1 83FE 10 cmp esi,10 ; 16次
004495D4 ^ 7C D3 jl short MyVideoC.004495A9
转换16次,如果输入的注册码位数不够,用78代替。
所以注册码需要32位,练码:87654321123456788765432112345678
读入后为:0012D6F4 87 65 43 21 12 34 56 78 87 65 43 21 12 34 56 78 ?C!4Vx?C!4Vx
加密注册码:
004495E5 E8 A6D9FDFF call MyVideoC.00426F90 ; 加密注册码
参数:0012D6F4 87 65 43 21 12 34 56 78 87 65 43 21 12 34 56 78 ?C!4Vx?C!4Vx
加密值:0012D704 51 6D A0 65 29 FE C8 99 2F 53 5B 3A 0A FF BD B6 Qm_e)??S[:.??
2个加密值的比较:
004495EF 8D7C24 38 lea edi,dword ptr ss:[esp+38] // 注册码加密值
004495F3 8D7424 48 lea esi,dword ptr ss:[esp+48] // 用户名加密值
004495F7 33D2 xor edx,edx
004495F9 F3:A7 repe cmps dword ptr es:[edi],dword ptr ds:[esi]
004495FB 5D pop ebp
004495FC 75 78 jnz short MyVideoC.00449676
相等就注册成功!
3.其中加密采用了:IBM的MARS加密算法
s-Box:
004671A4 79 C4 D0 09 E0 FF C8 28 39 6C AA 84 87 72 AD 9D y男.??9l???
004671B4 E3 9B FF 7D 61 83 26 D4 D4 A1 6D C9 93 CC 74 79 ??a?栽№?挑y
...
00467964 61 60 B9 AB 5D F8 70 53 37 7E B0 FF FB D0 30 DA a`公]?S7~??0
00467974 B6 77 C9 EB 0F B4 98 0B E6 0F 4D 3A 6B C2 4F DF 恩呻??M:k孪
00467984 2A F2 9C 15 E2 D6 98 C2 6A EF 78 2B C0 4A A9 61 *?庵?j秫+朗┽
00467994 87 11 56 AB F0 A0 EE 14 64 41 0D DF EE 70 AF 19 ?V?_?dA.哳p?
4.用户名加密算法过程:
00426690 83EC 08 sub esp,8
00426693 53 push ebx
00426694 8B5C24 10 mov ebx,dword ptr ss:[esp+10]
00426698 55 push ebp
00426699 8BC1 mov eax,ecx
0042669B 56 push esi
0042669C 8B73 04 mov esi,dword ptr ds:[ebx+4] ; D(1),[ebx]存放待加密的数据D()
0042669F 8B48 04 mov ecx,dword ptr ds:[eax+4] ; K(0),[eax+4]存放加密密钥K()
004266A2 57 push edi
004266A3 8B3B mov edi,dword ptr ds:[ebx] ; D(0)
004266A5 03CF add ecx,edi ; D(0)+K(0)
004266A7 8B78 08 mov edi,dword ptr ds:[eax+8] ; K(1)
004266AA 03F7 add esi,edi ; D(1)+K(1)
004266AC 8BD1 mov edx,ecx
004266AE 8BF9 mov edi,ecx
004266B0 C1CA 08 ror edx,8
004266B3 81E7 FF000000 and edi,0FF
004266B9 81E2 FF000000 and edx,0FF
004266BF 8B2CBD A4714600 mov ebp,dword ptr ds:[edi*4+4671A4] ; 004671A4,S-Box(0)
004266C6 8B1495 A4754600 mov edx,dword ptr ds:[edx*4+4675A4] ; 004675A4,S-Box(1)
004266CD 33F5 xor esi,ebp
004266CF 8B68 0C mov ebp,dword ptr ds:[eax+C] ; K(2)
004266D2 03D6 add edx,esi
004266D4 8BF1 mov esi,ecx
004266D6 C1CE 10 ror esi,10
004266D9 C1C9 18 ror ecx,18
004266DC 81E6 FF000000 and esi,0FF
004266E2 8BF9 mov edi,ecx
004266E4 8B0CB5 A4714600 mov ecx,dword ptr ds:[esi*4+4671A4]
004266EB 8B73 08 mov esi,dword ptr ds:[ebx+8] ; D(2)
004266EE 03CE add ecx,esi ; D(2)+K(2)
004266F0 8B73 0C mov esi,dword ptr ds:[ebx+C] ; D(3)
004266F3 8B58 10 mov ebx,dword ptr ds:[eax+10] ; K(3)
004266F6 03CD add ecx,ebp ; D(3)+K(3)
004266F8 03F3 add esi,ebx
004266FA 8BDF mov ebx,edi
004266FC 81E3 FF000000 and ebx,0FF
00426702 8B2C9D A4754600 mov ebp,dword ptr ds:[ebx*4+4675A4]
00426709 8BDA mov ebx,edx
...
00426F4F 8B5C24 20 mov ebx,dword ptr ss:[esp+20]
00426F53 33D5 xor edx,ebp
00426F55 893B mov dword ptr ds:[ebx],edi ; 第1个值保存
00426F57 8BB8 98000000 mov edi,dword ptr ds:[eax+98]
00426F5D 2BF7 sub esi,edi
00426F5F 8973 04 mov dword ptr ds:[ebx+4],esi ; 第2个值保存
00426F62 8BB0 9C000000 mov esi,dword ptr ds:[eax+9C]
00426F68 2BD6 sub edx,esi
00426F6A 8953 08 mov dword ptr ds:[ebx+8],edx ; 第3个值保存
00426F6D 8B90 A0000000 mov edx,dword ptr ds:[eax+A0]
00426F73 2BCA sub ecx,edx
00426F75 5F pop edi
00426F76 5E pop esi
00426F77 894B 0C mov dword ptr ds:[ebx+C],ecx ; 第4个值保存
00426F7A 5D pop ebp
00426F7B 5B pop ebx
00426F7C 83C4 08 add esp,8
00426F7F C2 0800 retn 8
用户名加密密钥:
K[]=
D2 58 60 2E 3B 96 BD 46 5B FE F3 8D C6 55 56 E6 D4 DB A8 11 4B 2C CD 6D B4 BA 4D 01 83 F1 23 42
E2 0D 2E 32 77 AE 8B A6 E7 68 22 3A 93 41 E9 E6 5D 26 F7 65 2B 4B 78 D8 C2 56 44 EB 3F 97 30 01
EF B2 65 65 0B 2C 25 DD E8 5F 79 E7 83 97 8B 01 73 71 B7 78 3B BA 49 F2 DD 79 BD 11 8B 5F 69 40
22 F9 CF 86 1F E0 48 79 4B 36 34 C8 6B 85 72 9A 31 3A 95 CF 57 0A 0E B2 D9 DB 8C C4 AB B0 62 4B
5C 97 FB FA FB F6 9E A1 E1 8C 0D BC 6F 56 20 86 04 38 2F 60 9A 46 D8 91 9E 34 3E 4C 9C AE BE 52
5.注册码加密算法过程:
00426F90 83EC 08 sub esp,8
00426F93 53 push ebx
00426F94 8B5C24 10 mov ebx,dword ptr ss:[esp+10]
00426F98 55 push ebp
00426F99 8BC1 mov eax,ecx
00426F9B 56 push esi
00426F9C 57 push edi
00426F9D 8B88 A0000000 mov ecx,dword ptr ds:[eax+A0] ; [EAX+4]保存了密钥
00426FA3 8B7B 0C mov edi,dword ptr ds:[ebx+C] ; [EBX]保存了待加密的值
00426FA6 8BB0 9C000000 mov esi,dword ptr ds:[eax+9C]
00426FAC 03CF add ecx,edi
00426FAE 8B7B 08 mov edi,dword ptr ds:[ebx+8]
00426FB1 8BD1 mov edx,ecx
00426FB3 03F7 add esi,edi
00426FB5 8BF9 mov edi,ecx
00426FB7 C1CA 08 ror edx,8
00426FBA 81E7 FF000000 and edi,0FF
00426FC0 81E2 FF000000 and edx,0FF
00426FC6 8B2CBD A4714600 mov ebp,dword ptr ds:[edi*4+4671A4] ; S-Box(0)
00426FCD 8B1495 A4754600 mov edx,dword ptr ds:[edx*4+4675A4] ; S-Box(1)
00426FD4 33F5 xor esi,ebp
00426FD6 8BA8 98000000 mov ebp,dword ptr ds:[eax+98]
00426FDC 03D6 add edx,esi
...
004278EE 33D5 xor edx,ebp
004278F0 890B mov dword ptr ds:[ebx],ecx ; 第1个值保存
004278F2 8B68 08 mov ebp,dword ptr ds:[eax+8]
004278F5 2BD5 sub edx,ebp
004278F7 8953 04 mov dword ptr ds:[ebx+4],edx ; 第2个值保存
004278FA 8B50 0C mov edx,dword ptr ds:[eax+C]
004278FD 2BF2 sub esi,edx
004278FF 8973 08 mov dword ptr ds:[ebx+8],esi ; 第3个值保存
00427902 8B48 10 mov ecx,dword ptr ds:[eax+10]
00427905 2BF9 sub edi,ecx
00427907 897B 0C mov dword ptr ds:[ebx+C],edi ; 第4个值保存
0042790A 5F pop edi
0042790B 5E pop esi
0042790C 5D pop ebp
0042790D 5B pop ebx
0042790E 83C4 08 add esp,8
00427911 C2 0800 retn 8
注册码加密密钥:
K[]=
38 DE E0 3D 29 D0 64 0C B2 92 40 C6 8D 79 DA BF 48 91 DF 59 17 27 67 8C 84 BD B1 B7 63 26 CF 53
19 A6 39 0F AB EF A9 21 16 BF 77 06 23 58 08 3F 22 A9 7A F7 67 92 FE 73 33 3D 16 2E 73 F3 7B 03
0E B4 F6 38 BF 2D 86 80 42 E7 AD AA 63 1D 8D 8C 50 12 D9 C4 0F D6 F6 78 B0 18 C3 9E 5B A8 F0 5E
7A 71 CD D0 33 F7 CD D6 F5 67 D4 4C CB 74 47 F0 59 3D 4C 03 FB 0B B7 DC B3 73 7D 0A 0F 48 9C 17
E7 ED 72 60 8F 79 6E CA 28 20 29 B4 CF 09 AF DA 73 AE C9 C4 EB 51 6A 7B E6 AA 17 C9 43 01 12 1B
6.反推注册码:
其实用户名加密算法与注册码加密算法刚好是加解密的一对。
call MyVideoC.00426690 // 用户名加密
call MyVideoC.00426F90 // 注册码加密
如果call MyVideoC.00426690是加密的call,那么call MyVideoC.00426F90就是解密的call。
只要对换2者的密钥就能互相反推。
假设用户名:cyto,
call MyVideoC.00426690后为:5F 9A 0D 9C E9 D9 66 C4 73 23 DB D0 78 98 97 89
假设输入的注册码为x,
call MyVideoC.00426F90后要为:5F 9A 0D 9C E9 D9 66 C4 73 23 DB D0 78 98 97 89
那么就用call MyVideoC.00426690来反推注册码,只要替换call MyVideoC.00426690使用的密钥就可以了,密钥换为call MyVideoC.00426F90使用的密钥:
38 DE E0 3D 29 D0 64 0C B2 92 40 C6 8D 79 DA BF 48 91 DF 59 17 27 67 8C 84 BD B1 B7 63 26 CF 53
19 A6 39 0F AB EF A9 21 16 BF 77 06 23 58 08 3F 22 A9 7A F7 67 92 FE 73 33 3D 16 2E 73 F3 7B 03
0E B4 F6 38 BF 2D 86 80 42 E7 AD AA 63 1D 8D 8C 50 12 D9 C4 0F D6 F6 78 B0 18 C3 9E 5B A8 F0 5E
7A 71 CD D0 33 F7 CD D6 F5 67 D4 4C CB 74 47 F0 59 3D 4C 03 FB 0B B7 DC B3 73 7D 0A 0F 48 9C 17
E7 ED 72 60 8F 79 6E CA 28 20 29 B4 CF 09 AF DA 73 AE C9 C4 EB 51 6A 7B E6 AA 17 C9 43 01 12 1B
参数:5F 9A 0D 9C E9 D9 66 C4 73 23 DB D0 78 98 97 89
解密后:25 8A 13 1D CE FC 8B C7 D0 AC ED D7 0A 2E 81 D9
即
用户名:cyto
注册码:258A131DCEFC8BC7D0ACEDD70A2E81D9
注册成功!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)