QQ登录口令加密算法及其源代码(4)
中华网科技 http://tech.china.com
2005-08-25 14:33:44
|
|
|
1000B7E2 E8 23430000 call 1000B7E7 FF75 CC push dword ptr ss:[ebp-34] n=[ebp-34],局部变量[ebp-34]保存本数据段的总长度 1000B7EA 8D4E FD lea ecx,dword ptr ds:[esi-3] [esi-3]指向本段的开始(从段类型算起) 1000B7ED 8945 F0 mov dword ptr ss:[ebp-10],eax 局部变量[ebp-10]保存拷贝后的数据 1000B7F0 51 push ecx src 1000B7F1 50 push eax dest 1000B7F2 E8 E5450000 call memcpy,将本段的整段数据拷贝到新的地方,数据指针保存在局部变量[ebp-10]中 1000B7F7 83C4 10 add esp,10 1000B7FA 8B45 C8 mov eax,dword ptr ss:[ebp-38] 局部变量[ebp-38]保存数据段中标志长度 1000B7FD 33C9 xor ecx,ecx 1000B7FF 32C4 xor al,ah 将低位长度与高位异或,例如3 xor 0=3 1000B801 85FF test edi,edi EDI为标志位的长度 1000B803 76 12 jbe short BasicCtr.1000B817 如果本段没有段标志,则跳转 1000B805 8A1431 mov dl,byte ptr ds:[ecx+esi] 开始循环,循环次数为标志的长度。ECX第一次时为0,将第一个数据加载到DL中。 1000B808 32D0 xor dl,al AL为长度的高位和低位的异或,这里为3 1000B80A F6D2 not dl DL=NOT ([数据] xor [数据段标志长度的高位 xor 数据段标志长度的低位]) 1000B80C 881431 mov byte ptr ds:[ecx+esi],dl 数据保存在原始的内存中相应的地方 1000B80F 41 inc ecx 1000B810 3BCF cmp ecx,edi 1000B812 72 F1 jb short BasicCtr.1000B805 1000B814 8B5D C4 mov ebx,dword ptr ss:[ebp-3C] 局部变量[ebp-3C]保存数据段中数据部分的长度指针 1000B817 57 push edi EDI为标志位的长度 1000B818 56 push esi ESI为指向解密以后的数据,例如AST 1000B819 8D4D E8 lea ecx,dword ptr ss:[ebp-18] 局部变量[ebp-18]存放强制类型转换以后的数据指针的指针,例如AST 1000B81C E8 5B430000 call 将解密后的数据变成CString类型。返回的类型放在EAX指示的地址中 1000B821 8365 FC 00 and dword ptr ss:[ebp-4],0 局部变量[ebp-4]清零 1000B825 6A FC push -4 1000B827 58 pop eax EAX=-4=FFFFFFFC 1000B828 8BF3 mov esi,ebx ebx保存数据段中数据部分的长度指针 1000B82A 2BC7 sub eax,edi EAX=EAX-EDI=FFFFFFFC-3=FFFFFFF9 1000B82C 8B1E mov ebx,dword ptr ds:[esi] ebx为数据段中数据部分的长度了 1000B82E 0145 08 add dword ptr ss:[ebp+8],eax 第一次时,[EBP+8]=33。执行后=2C,相当于33H-7H=2CH 1000B831 83C6 04 add esi,4 ESI指向数据段中的数据部分了 1000B834 395D 08 cmp dword ptr ss:[ebp+8],ebx [ebp+8]=2C,ebx=4 1000B837 0F82 6A010000 jb BasicCtr.1000B9A7 1000B83D 807D E4 07 cmp byte ptr ss:[ebp-1C],7 局部变量[ebp-1C]保存本段的类型,4或者7 1000B841 74 06 je short BasicCtr.1000B849 1000B843 807D E4 06 cmp byte ptr ss:[ebp-1C],6 如果类型不为6,则执行1000B862 1000B847 75 19 jnz short BasicCtr.1000B862 1000B849 8AC3 mov al,bl 如果数据段的类型为7,则执行此语句。BL包含本段的长度 1000B84B 33FF xor edi,edi 1000B84D 32C7 xor al,bh al=(长度的低位 xor 长度的高位) 1000B84F 85DB test ebx,ebx 1000B851 76 0F jbe short BasicCtr.1000B862 如果长度为0,则表示没有密码 1000B853 8A0C37 mov cl,byte ptr ds:[edi+esi] 1000B856 32C8 xor cl,al 1000B858 F6D1 not cl DL=NOT ([数据] xor [数据段标志长度的高位xor 数据段标志长度的低位]) 1000B85A 880C37 mov byte ptr ds:[edi+esi],cl 1000B85D 47 inc edi 1000B85E 3BFB cmp edi,ebx 1000B860 72 F1 jb short BasicCtr.1000B853 循环直到全部数据解调完毕 1000B862 53 push ebx 数据串的长度 1000B863 56 push esi 原始的需要变换的数据 1000B864 8D4D EC lea ecx,dword ptr ss:[ebp-14] 局部变量[ebp-14]存放强制CString类型转换以后的数据指针的指针,例如DB2E0600 1000B867 E8 10430000 call 1000B86C 8A45 E4 mov al,byte ptr ss:[ebp-1C] 局部变量[ebp-1C]保存本段的类型,4或者7 1000B86F 295D 08 sub dword ptr ss:[ebp+8],ebx 去掉已经处理的数据,执行后[ebp+8]=28H,ebx为数据段中数据部分的长度 1000B872 03F3 add esi,ebx ESI指向下一个数据段的开始部分,ebx保存数据段中数据部分的长度指针 1000B874 33FF xor edi,edi
1000B876 84C0 test al,al 测试本段的类型是否为0 1000B878 C645 FC 01 mov byte ptr ss:[ebp-4],1 局部布尔型变量[ebp-4]=1 1000B87C 0F86 A3010000 jbe BasicCtr.1000BA25 如果本段的数据类型为0,则执行1000BA25后退出 1000B882 3C 07 cmp al,7 1000B884 0F86 B6000000 jbe BasicCtr.1000B940 如果小于等于7,则跳转到1000B940执行。对于EWH来说就是这样
首页 上页 | ...1| 2 | 3 | 4 | 5 | 6 | 7... 下页 尾页 共 8 页
|