⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqmiayuandaima.txt

📁 这是一个qq密码的算法和源代码希望能对大家有所帮助供大家学习参考
💻 TXT
📖 第 1 页 / 共 2 页
字号:
1000B77E    0F82 3E020000    jb BasicCtr.1000B9C2    如果剩余的数据长度小于7则退出
1000B784    8A06    mov al,byte ptr ds:[esi]    第一次进入时,ESI指向第7个数据即数据段的类型,例如 04
1000B786    66:8B4E 01    mov cx,word ptr ds:[esi+1]    CX=后一个数据,及数据段标志的长度,例如 0003
1000B78A    46    inc esi    
1000B78B    8B55 08    mov edx,dword ptr ss:[ebp+8]    剩余的数据长度,如36H
1000B78E    836D 08 03    sub dword ptr ss:[ebp+8],3    去掉3个,例如成为33H=51
1000B792    894D C8    mov dword ptr ss:[ebp-38],ecx    局部变量[ebp-38]保存数据段中标志长度
1000B795    0FB7F9    movzx edi,cx    EDI为标志长度了
1000B798    46    inc esi    
1000B799    8845 E4    mov byte ptr ss:[ebp-1C],al    局部变量[ebp-1C]保存本段的类型
1000B79C    8D4F 04    lea ecx,dword ptr ds:[edi+4]    ECX为取得的标志长度再加上4,例如=7
1000B79F    46    inc esi    第一次时,ESI指向第一个数据段的标志字段了,例如指向BDAFA8,第9个数据开始
1000B7A0    394D 08    cmp dword ptr ss:[ebp+8],ecx    如果剩余的数据比"标志长度+4"还少,则没有数据,因此不进行处理
1000B7A3    0F82 19020000    jb BasicCtr.1000B9C2    
1000B7A9    8B0C37    mov ecx,dword ptr ds:[edi+esi]    跳过数据段的标志部分,将数据段的长度赋值给ECX。例如[edi+esi]=4
1000B7AC    8D1C37    lea ebx,dword ptr ds:[edi+esi]    EBX保存新的指针,指向数据段中数据部分的长度部分,例如,[EBX]=4
1000B7AF    895D C4    mov dword ptr ss:[ebp-3C],ebx    局部变量[ebp-3C]保存数据段中数据部分的长度指针
1000B7B2    8D4C0F 07    lea ecx,dword ptr ds:[edi+ecx+7]    从标志(自身长3,加上4个长度位=7)开始,加上数据长度,为完整数据长度。例如E
1000B7B6    3BCA    cmp ecx,edx    如果剩下的数据长度(如36H)不够,则退出
1000B7B8    894D CC    mov dword ptr ss:[ebp-34],ecx    局部变量[ebp-34]保存本数据段的总长度
1000B7BB    0F87 01020000    ja BasicCtr.1000B9C2    如果小于则退出程序
1000B7C1    8365 F0 00    and dword ptr ss:[ebp-10],0    局部变量[ebp-10]清零
1000B7C5    3C 01    cmp al,1    al保存本段的类型,有效的类型是4或7
1000B7C7    74 18    je short BasicCtr.1000B7E1    
1000B7C9    3C 02    cmp al,2    
1000B7CB    74 14    je short BasicCtr.1000B7E1    
1000B7CD    3C 03    cmp al,3    
1000B7CF    74 10    je short BasicCtr.1000B7E1    
1000B7D1    3C 04    cmp al,4    
1000B7D3    74 0C    je short BasicCtr.1000B7E1    
1000B7D5    3C 05    cmp al,5    
1000B7D7    74 08    je short BasicCtr.1000B7E1    
1000B7D9    3C 07    cmp al,7    
1000B7DB    74 04    je short BasicCtr.1000B7E1    
1000B7DD    3C 06    cmp al,6    
1000B7DF    75 19    jnz short BasicCtr.1000B7FA    
1000B7E1    51    push ecx    为本段的总长度,包括(段类型+标志长度+标志+数据长度+数据),例如,对于密码段=1AH
1000B7E2    E8 23430000    call <MFC42.operator new>    
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 <MSVCRT.memcpy>    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 <MFC42.CString::CString>    将解密后的数据变成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 <MFC42.CString::CString>    
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
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -