00402465 |. 66:894424 >mov word ptr ss:[esp+9],ax
0040246A |. 895C24 24 mov dword ptr ss:[esp+24],ebx
0040246E |. 884424 0B mov byte ptr ss:[esp+B],al
00402472 |. 8B41 F8 mov eax,dword ptr ds:[ecx-8] ; 假码长度->eax
00402475 |. 83F8 10 cmp eax,10
00402478 |. 885C24 04 mov byte ptr ss:[esp+4],bl
0040247C |. 0F8C C0000>jl <QQPwd.loc_402542> ; 假码长度<16则跳
00402482 |. 56 push esi
00402483 |. 68 0401000>push 104
00402488 |. 8D4C24 34 lea ecx,dword ptr ss:[esp+34] ; 假码->ecx
0040248C |. E8 DFC5000>call <QQPwd.sub_40EA70> ; 假码->eax
00402491 |. 8B10 mov edx,dword ptr ds:[eax] ; 假码第1个4位->edx
00402493 |. 33F6 xor esi,esi
00402495 |. 895424 10 mov dword ptr ss:[esp+10],edx ; 假码第1个4位->[12efa4]
00402499 |. 8B48 04 mov ecx,dword ptr ds:[eax+4] ; 假码第2个4位->ecx
0040249C |. 894C24 14 mov dword ptr ss:[esp+14],ecx ; 假码第2个4位->[12efa8]
004024A0 |. 8B50 08 mov edx,dword ptr ds:[eax+8] ; 假码第3个4位->edx
004024A3 |. 895424 18 mov dword ptr ss:[esp+18],edx ; 假码第3个4位->[12efac]
004024A7 |. 8B40 0C mov eax,dword ptr ds:[eax+C] ; 假码最后4位->eax
004024AA |. 894424 1C mov dword ptr ss:[esp+1C],eax ; 假码最后4位->[12efb0]
004024AE <>|> 8A4C34 10 /mov cl,byte ptr ss:[esp+esi+10>; -|取每位注册码,如果是数字,取其ascii码值与30之差,如果是字母A-F则取其ascii值与37之差,其余则取FF
004024B2 |. 51 |push ecx ; |
004024B3 |. E8 68FFFFF>|call <QQPwd.sub_402420> ; |追进此call可知,注册码每位只能取0-9及A-F
004024B8 |. 83C4 04 |add esp,4 ; |-->此循环的实际作用:将假码每位补0,如2->02
004024BB |. 884434 10 |mov byte ptr ss:[esp+esi+10],a>; |差值->[12efa4]
004024BF |. 46 |inc esi ; |计数
004024C0 |. 83FE 10 |cmp esi,10 ; |
004024C3 |.^ 7C E9 \jl short <QQPwd.loc_4024AE> ; _|是否循环完
004024C5 |. 33C0 xor eax,eax
004024C7 |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10] ; 保存上面循环变换后的值地址(堆栈12efa4)->ecx
004024CB |. 5E pop esi