MD5加密算法的识别

通过MD5加密算法原理的介绍,会了解到MD5在加密的过程中,有几个固定的流程(特征),在逆向分析的过程中通过这些特征可以识别出当前使用的是MD5的加密算法,从而更高效的分析还原算法。

整理下MD5加密的几个特征:

1. 处理的数据是512位为1组,补位数据的填充方式

2. 4个初始常数 A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L (4个初始常数的值为主要特征)

3. 4轮Hash运算 (每轮的移位次数及运算的常量为主要特征)

第一轮
a=FF(a,b,c,d,M0,7,0xd76aa478)
b=FF(d,a,b,c,M1,12,0xe8c7b756)
c=FF(c,d,a,b,M2,17,0x242070db)
d=FF(b,c,d,a,M3,22,0xc1bdceee)
a=FF(a,b,c,d,M4,7,0xf57c0faf)
b=FF(d,a,b,c,M5,12,0x4787c62a)
c=FF(c,d,a,b,M6,17,0xa8304613)
d=FF(b,c,d,a,M7,22,0xfd469501)
a=FF(a,b,c,d,M8,7,0x698098d8)
b=FF(d,a,b,c,M9,12,0x8b44f7af)
c=FF(c,d,a,b,M10,17,0xffff5bb1)
d=FF(b,c,d,a,M11,22,0x895cd7be)
a=FF(a,b,c,d,M12,7,0x6b901122)
b=FF(d,a,b,c,M13,12,0xfd987193)
c=FF(c,d,a,b,M14,17,0xa679438e)
d=FF(b,c,d,a,M15,22,0x49b40821)

第二轮
a=GG(a,b,c,d,M1,5,0xf61e2562)
b=GG(d,a,b,c,M6,9,0xc040b340)
c=GG(c,d,a,b,M11,14,0x265e5a51)
d=GG(b,c,d,a,M0,20,0xe9b6c7aa)
a=GG(a,b,c,d,M5,5,0xd62f105d)
b=GG(d,a,b,c,M10,9,0x02441453)
c=GG(c,d,a,b,M15,14,0xd8a1e681)
d=GG(b,c,d,a,M4,20,0xe7d3fbc8)
a=GG(a,b,c,d,M9,5,0x21e1cde6)
b=GG(d,a,b,c,M14,9,0xc33707d6)
c=GG(c,d,a,b,M3,14,0xf4d50d87)
d=GG(b,c,d,a,M8,20,0x455a14ed)
a=GG(a,b,c,d,M13,5,0xa9e3e905)
b=GG(d,a,b,c,M2,9,0xfcefa3f8)
c=GG(c,d,a,b,M7,14,0x676f02d9)
d=GG(b,c,d,a,M12,20,0x8d2a4c8a)

第三轮
a=HH(a,b,c,d,M5,4,0xfffa3942)
b=HH(d,a,b,c,M8,11,0x8771f681)
c=HH(c,d,a,b,M11,16,0x6d9d6122)
d=HH(b,c,d,a,M14,23,0xfde5380c)
a=HH(a,b,c,d,M1,4,0xa4beea44)
b=HH(d,a,b,c,M4,11,0x4bdecfa9)
c=HH(c,d,a,b,M7,16,0xf6bb4b60)
d=HH(b,c,d,a,M10,23,0xbebfbc70)
a=HH(a,b,c,d,M13,4,0x289b7ec6)
b=HH(d,a,b,c,M0,11,0xeaa127fa)
c=HH(c,d,a,b,M3,16,0xd4ef3085)
d=HH(b,c,d,a,M6,23,0x04881d05)
a=HH(a,b,c,d,M9,4,0xd9d4d039)
b=HH(d,a,b,c,M12,11,0xe6db99e5)
c=HH(c,d,a,b,M15,16,0x1fa27cf8)
d=HH(b,c,d,a,M2,23,0xc4ac5665)

第四轮
a=II(a,b,c,d,M0,6,0xf4292244)
b=II(d,a,b,c,M7,10,0x432aff97)
c=II(c,d,a,b,M14,15,0xab9423a7)
d=II(b,c,d,a,M5,21,0xfc93a039)
a=II(a,b,c,d,M12,6,0x655b59c3)
b=II(d,a,b,c,M3,10,0x8f0ccc92)
c=II(c,d,a,b,M10,15,0xffeff47d)
d=II(b,c,d,a,M1,21,0x85845dd1)
a=II(a,b,c,d,M8,6,0x6fa87e4f)
b=II(d,a,b,c,M15,10,0xfe2ce6e0)
c=II(c,d,a,b,M6,15,0xa3014314)
d=II(b,c,d,a,M13,21,0x4e0811a1)
a=II(a,b,c,d,M4,6,0xf7537e82)
b=II(d,a,b,c,M11,10,0xbd3af235)
c=II(c,d,a,b,M2,15,0x2ad7d2bb)
d=II(b,c,d,a,M9,21,0xeb86d391)

当前也有很多MD5的算法变形,要还原这些变形的算法,首先就要找到所有变形的地方,然后修改标准算法,一般变形的几个地方:

1. 对数据补位填充的变形

2. 4个初始常数的变形

3. 4轮Hash运算的变形

下面为标准MD5在OD的特征:

初始4个常数:

004012B0  /$  8B4424 04     MOV EAX,DWORD PTR SS:[ESP+4]
004012B4  |.  33C9          XOR ECX,ECX
004012B6  |.  8948 14       MOV DWORD PTR DS:[EAX+14],ECX
004012B9  |.  8948 10       MOV DWORD PTR DS:[EAX+10],ECX
004012BC  |.  C700 01234567 MOV DWORD PTR DS:[EAX],67452301
004012C2  |.  C740 04 89ABC>MOV DWORD PTR DS:[EAX+4],EFCDAB89
004012C9  |.  C740 08 FEDCB>MOV DWORD PTR DS:[EAX+8],98BADCFE
004012D0  |.  C740 0C 76543>MOV DWORD PTR DS:[EAX+C],10325476
004012D7  \.  C3            RETN

Hash运算:

00401400  /$  83EC 40       SUB ESP,40
00401403  |.  8B4C24 48     MOV ECX,DWORD PTR SS:[ESP+48]
00401407  |.  53            PUSH EBX
00401408  |.  55            PUSH EBP
00401409  |.  56            PUSH ESI
0040140A  |.  8B7424 50     MOV ESI,DWORD PTR SS:[ESP+50]
0040140E  |.  57            PUSH EDI
0040140F  |.  6A 40         PUSH 40
00401411  |.  8D5424 14     LEA EDX,DWORD PTR SS:[ESP+14]
00401415  |.  8B06          MOV EAX,DWORD PTR DS:[ESI]
00401417  |.  8B7E 04       MOV EDI,DWORD PTR DS:[ESI+4]
0040141A  |.  8B5E 08       MOV EBX,DWORD PTR DS:[ESI+8]
0040141D  |.  8B6E 0C       MOV EBP,DWORD PTR DS:[ESI+C]
00401420  |.  51            PUSH ECX
00401421  |.  52            PUSH EDX
00401422  |.  894424 60     MOV DWORD PTR SS:[ESP+60],EAX
00401426  |.  E8 75090000   CALL MD5KeyGe.00401DA0
0040142B  |.  8BC7          MOV EAX,EDI
0040142D  |.  8B5424 60     MOV EDX,DWORD PTR SS:[ESP+60]
00401431  |.  F7D0          NOT EAX
00401433  |.  8BCB          MOV ECX,EBX
00401435  |.  23C5          AND EAX,EBP
00401437  |.  23CF          AND ECX,EDI
00401439  |.  0BC1          OR EAX,ECX
0040143B  |.  8B4C24 1C     MOV ECX,DWORD PTR SS:[ESP+1C]
0040143F  |.  03C1          ADD EAX,ECX
00401441  |.  8D8C02 78A46A>LEA ECX,DWORD PTR DS:[EDX+EAX+D76AA478]
00401448  |.  8BD7          MOV EDX,EDI
0040144A  |.  8BC1          MOV EAX,ECX
0040144C  |.  C1E8 19       SHR EAX,19
0040144F  |.  C1E1 07       SHL ECX,7
00401452  |.  0BC1          OR EAX,ECX
00401454  |.  03C7          ADD EAX,EDI
00401456  |.  8BC8          MOV ECX,EAX
00401458  |.  23D0          AND EDX,EAX
0040145A  |.  F7D1          NOT ECX
0040145C  |.  23CB          AND ECX,EBX
0040145E  |.  0BCA          OR ECX,EDX
00401460  |.  8B5424 20     MOV EDX,DWORD PTR SS:[ESP+20]
00401464  |.  03CA          ADD ECX,EDX
00401466  |.  8D9429 56B7C7>LEA EDX,DWORD PTR DS:[ECX+EBP+E8C7B756]
0040146D  |.  8BCA          MOV ECX,EDX
0040146F  |.  C1E9 14       SHR ECX,14
00401472  |.  C1E2 0C       SHL EDX,0C
00401475  |.  0BCA          OR ECX,EDX
00401477  |.  03C8          ADD ECX,EAX
00401479  |.  8BD1          MOV EDX,ECX
0040147B  |.  8BE9          MOV EBP,ECX
0040147D  |.  F7D2          NOT EDX
0040147F  |.  23D7          AND EDX,EDI
00401481  |.  23E8          AND EBP,EAX
00401483  |.  0BD5          OR EDX,EBP
00401485  |.  8B6C24 24     MOV EBP,DWORD PTR SS:[ESP+24]
00401489  |.  03D5          ADD EDX,EBP
0040148B  |.  8BE9          MOV EBP,ECX
0040148D  |.  8D9C13 DB7020>LEA EBX,DWORD PTR DS:[EBX+EDX+242070DB]
00401494  |.  8BD3          MOV EDX,EBX
00401496  |.  C1EA 0F       SHR EDX,0F
00401499  |.  C1E3 11       SHL EBX,11
0040149C  |.  0BD3          OR EDX,EBX
0040149E  |.  03D1          ADD EDX,ECX
004014A0  |.  8BDA          MOV EBX,EDX
004014A2  |.  23EA          AND EBP,EDX
004014A4  |.  F7D3          NOT EBX
004014A6  |.  23D8          AND EBX,EAX
004014A8  |.  0BDD          OR EBX,EBP
004014AA  |.  8B6C24 28     MOV EBP,DWORD PTR SS:[ESP+28]
004014AE  |.  03DD          ADD EBX,EBP
004014B0  |.  8D9C1F EECEBD>LEA EBX,DWORD PTR DS:[EDI+EBX+C1BDCEEE]
004014B7  |.  8BFB          MOV EDI,EBX
004014B9  |.  C1E7 16       SHL EDI,16
004014BC  |.  C1EB 0A       SHR EBX,0A
004014BF  |.  0BFB          OR EDI,EBX
004014C1  |.  8BDA          MOV EBX,EDX
004014C3  |.  03FA          ADD EDI,EDX
004014C5  |.  897C24 60     MOV DWORD PTR SS:[ESP+60],EDI
004014C9  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
004014CD  |.  F7D7          NOT EDI
004014CF  |.  23F9          AND EDI,ECX
004014D1  |.  23DD          AND EBX,EBP
004014D3  |.  8B6C24 2C     MOV EBP,DWORD PTR SS:[ESP+2C]
004014D7  |.  0BFB          OR EDI,EBX
004014D9  |.  03FD          ADD EDI,EBP
004014DB  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
004014DF  |.  8BEB          MOV EBP,EBX
004014E1  |.  8D8438 AF0F7C>LEA EAX,DWORD PTR DS:[EAX+EDI+F57C0FAF]
004014E8  |.  8BF8          MOV EDI,EAX
004014EA  |.  C1EF 19       SHR EDI,19
004014ED  |.  C1E0 07       SHL EAX,7
004014F0  |.  0BF8          OR EDI,EAX
004014F2  |.  03FB          ADD EDI,EBX
004014F4  |.  8BC7          MOV EAX,EDI
004014F6  |.  23EF          AND EBP,EDI
004014F8  |.  F7D0          NOT EAX
004014FA  |.  23C2          AND EAX,EDX
004014FC  |.  0BC5          OR EAX,EBP
004014FE  |.  8B6C24 30     MOV EBP,DWORD PTR SS:[ESP+30]
00401502  |.  03C5          ADD EAX,EBP
00401504  |.  8D8C01 2AC687>LEA ECX,DWORD PTR DS:[ECX+EAX+4787C62A]
0040150B  |.  8BC1          MOV EAX,ECX
0040150D  |.  C1E8 14       SHR EAX,14
00401510  |.  C1E1 0C       SHL ECX,0C
00401513  |.  0BC1          OR EAX,ECX
00401515  |.  03C7          ADD EAX,EDI
00401517  |.  8BC8          MOV ECX,EAX
00401519  |.  8BE8          MOV EBP,EAX
0040151B  |.  F7D1          NOT ECX
0040151D  |.  23CB          AND ECX,EBX
0040151F  |.  23EF          AND EBP,EDI
00401521  |.  0BCD          OR ECX,EBP
00401523  |.  8B6C24 34     MOV EBP,DWORD PTR SS:[ESP+34]
00401527  |.  03CD          ADD ECX,EBP
00401529  |.  8BE8          MOV EBP,EAX
0040152B  |.  8D940A 134630>LEA EDX,DWORD PTR DS:[EDX+ECX+A8304613]
00401532  |.  8BCA          MOV ECX,EDX
00401534  |.  C1E9 0F       SHR ECX,0F
00401537  |.  C1E2 11       SHL EDX,11
0040153A  |.  0BCA          OR ECX,EDX
0040153C  |.  03C8          ADD ECX,EAX
0040153E  |.  8BD1          MOV EDX,ECX
00401540  |.  23E9          AND EBP,ECX
00401542  |.  F7D2          NOT EDX
00401544  |.  23D7          AND EDX,EDI
00401546  |.  0BD5          OR EDX,EBP
00401548  |.  8B6C24 38     MOV EBP,DWORD PTR SS:[ESP+38]
0040154C  |.  03D5          ADD EDX,EBP
0040154E  |.  8D9C13 019546>LEA EBX,DWORD PTR DS:[EBX+EDX+FD469501]
00401555  |.  8BD3          MOV EDX,EBX
00401557  |.  C1E2 16       SHL EDX,16
0040155A  |.  C1EB 0A       SHR EBX,0A
0040155D  |.  0BD3          OR EDX,EBX
0040155F  |.  8BD9          MOV EBX,ECX
00401561  |.  03D1          ADD EDX,ECX
00401563  |.  895424 60     MOV DWORD PTR SS:[ESP+60],EDX
00401567  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
0040156B  |.  F7D2          NOT EDX
0040156D  |.  23D0          AND EDX,EAX
0040156F  |.  23DD          AND EBX,EBP
00401571  |.  8B6C24 3C     MOV EBP,DWORD PTR SS:[ESP+3C]
00401575  |.  0BD3          OR EDX,EBX
00401577  |.  03D5          ADD EDX,EBP
00401579  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
0040157D  |.  8BEB          MOV EBP,EBX
0040157F  |.  8DBC17 D89880>LEA EDI,DWORD PTR DS:[EDI+EDX+698098D8]
00401586  |.  8BD7          MOV EDX,EDI
00401588  |.  C1EA 19       SHR EDX,19
0040158B  |.  C1E7 07       SHL EDI,7
0040158E  |.  0BD7          OR EDX,EDI
00401590  |.  03D3          ADD EDX,EBX
00401592  |.  8BFA          MOV EDI,EDX
00401594  |.  23EA          AND EBP,EDX
00401596  |.  F7D7          NOT EDI
00401598  |.  23F9          AND EDI,ECX
0040159A  |.  0BFD          OR EDI,EBP
0040159C  |.  8B6C24 40     MOV EBP,DWORD PTR SS:[ESP+40]
004015A0  |.  03FD          ADD EDI,EBP
004015A2  |.  8D8438 AFF744>LEA EAX,DWORD PTR DS:[EAX+EDI+8B44F7AF]
004015A9  |.  8BF8          MOV EDI,EAX
004015AB  |.  C1EF 14       SHR EDI,14
004015AE  |.  C1E0 0C       SHL EAX,0C
004015B1  |.  0BF8          OR EDI,EAX
004015B3  |.  03FA          ADD EDI,EDX
004015B5  |.  8BC7          MOV EAX,EDI
004015B7  |.  F7D0          NOT EAX
004015B9  |.  8BEF          MOV EBP,EDI
004015BB  |.  23C3          AND EAX,EBX
004015BD  |.  23EA          AND EBP,EDX
004015BF  |.  0BC5          OR EAX,EBP
004015C1  |.  8B6C24 44     MOV EBP,DWORD PTR SS:[ESP+44]
004015C5  |.  03C5          ADD EAX,EBP
004015C7  |.  8BEF          MOV EBP,EDI
004015C9  |.  8D8C01 B15BFF>LEA ECX,DWORD PTR DS:[ECX+EAX+FFFF5BB1]
004015D0  |.  8BC1          MOV EAX,ECX
004015D2  |.  C1E8 0F       SHR EAX,0F
004015D5  |.  C1E1 11       SHL ECX,11
004015D8  |.  0BC1          OR EAX,ECX
004015DA  |.  03C7          ADD EAX,EDI
004015DC  |.  8BC8          MOV ECX,EAX
004015DE  |.  23E8          AND EBP,EAX
004015E0  |.  F7D1          NOT ECX
004015E2  |.  23CA          AND ECX,EDX
004015E4  |.  0BCD          OR ECX,EBP
004015E6  |.  8B6C24 48     MOV EBP,DWORD PTR SS:[ESP+48]
004015EA  |.  03CD          ADD ECX,EBP
004015EC  |.  8D9C0B BED75C>LEA EBX,DWORD PTR DS:[EBX+ECX+895CD7BE]
004015F3  |.  8BCB          MOV ECX,EBX
004015F5  |.  C1E1 16       SHL ECX,16
004015F8  |.  C1EB 0A       SHR EBX,0A
004015FB  |.  0BCB          OR ECX,EBX
004015FD  |.  8BD8          MOV EBX,EAX
004015FF  |.  03C8          ADD ECX,EAX
00401601  |.  894C24 60     MOV DWORD PTR SS:[ESP+60],ECX
00401605  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
00401609  |.  F7D1          NOT ECX
0040160B  |.  23CF          AND ECX,EDI
0040160D  |.  23DD          AND EBX,EBP
0040160F  |.  8B6C24 4C     MOV EBP,DWORD PTR SS:[ESP+4C]
00401613  |.  0BCB          OR ECX,EBX
00401615  |.  03CD          ADD ECX,EBP
00401617  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
0040161B  |.  8BEB          MOV EBP,EBX
0040161D  |.  8D940A 221190>LEA EDX,DWORD PTR DS:[EDX+ECX+6B901122]
00401624  |.  8BCA          MOV ECX,EDX
00401626  |.  C1E9 19       SHR ECX,19
00401629  |.  C1E2 07       SHL EDX,7
0040162C  |.  0BCA          OR ECX,EDX
0040162E  |.  03CB          ADD ECX,EBX
00401630  |.  8BD1          MOV EDX,ECX
00401632  |.  23E9          AND EBP,ECX
00401634  |.  F7D2          NOT EDX
00401636  |.  23D0          AND EDX,EAX
00401638  |.  0BD5          OR EDX,EBP
0040163A  |.  8B6C24 50     MOV EBP,DWORD PTR SS:[ESP+50]
0040163E  |.  03D5          ADD EDX,EBP
00401640  |.  8DBC17 937198>LEA EDI,DWORD PTR DS:[EDI+EDX+FD987193]
00401647  |.  8BD7          MOV EDX,EDI
00401649  |.  C1EA 14       SHR EDX,14
0040164C  |.  C1E7 0C       SHL EDI,0C
0040164F  |.  0BD7          OR EDX,EDI
00401651  |.  03D1          ADD EDX,ECX
00401653  |.  8BEA          MOV EBP,EDX
00401655  |.  8BFA          MOV EDI,EDX
00401657  |.  F7D5          NOT EBP
00401659  |.  23F9          AND EDI,ECX
0040165B  |.  23DD          AND EBX,EBP
0040165D  |.  0BFB          OR EDI,EBX
0040165F  |.  8B5C24 54     MOV EBX,DWORD PTR SS:[ESP+54]
00401663  |.  03FB          ADD EDI,EBX
00401665  |.  8BDA          MOV EBX,EDX
00401667  |.  8D8438 8E4379>LEA EAX,DWORD PTR DS:[EAX+EDI+A679438E]
0040166E  |.  8BF8          MOV EDI,EAX
00401670  |.  C1EF 0F       SHR EDI,0F
00401673  |.  C1E0 11       SHL EAX,11
00401676  |.  0BF8          OR EDI,EAX
00401678  |.  03FA          ADD EDI,EDX
0040167A  |.  8BC7          MOV EAX,EDI
0040167C  |.  23DF          AND EBX,EDI
0040167E  |.  F7D0          NOT EAX
00401680  |.  894424 64     MOV DWORD PTR SS:[ESP+64],EAX
00401684  |.  23C1          AND EAX,ECX
00401686  |.  0BC3          OR EAX,EBX
00401688  |.  8B5C24 58     MOV EBX,DWORD PTR SS:[ESP+58]
0040168C  |.  03C3          ADD EAX,EBX
0040168E  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
00401692  |.  8D9C03 2108B4>LEA EBX,DWORD PTR DS:[EBX+EAX+49B40821]
00401699  |.  8BC3          MOV EAX,EBX
0040169B  |.  C1E0 16       SHL EAX,16
0040169E  |.  C1EB 0A       SHR EBX,0A
004016A1  |.  0BC3          OR EAX,EBX
004016A3  |.  8BDA          MOV EBX,EDX
004016A5  |.  03C7          ADD EAX,EDI
004016A7  |.  894424 60     MOV DWORD PTR SS:[ESP+60],EAX
004016AB  |.  23D8          AND EBX,EAX
004016AD  |.  8BC7          MOV EAX,EDI
004016AF  |.  23C5          AND EAX,EBP
004016B1  |.  8B6C24 20     MOV EBP,DWORD PTR SS:[ESP+20]
004016B5  |.  0BD8          OR EBX,EAX
004016B7  |.  03DD          ADD EBX,EBP
004016B9  |.  8BEF          MOV EBP,EDI
004016BB  |.  8D8C19 62251E>LEA ECX,DWORD PTR DS:[ECX+EBX+F61E2562]
004016C2  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
004016C6  |.  8BC1          MOV EAX,ECX
004016C8  |.  C1E8 1B       SHR EAX,1B
004016CB  |.  C1E1 05       SHL ECX,5
004016CE  |.  0BC1          OR EAX,ECX
004016D0  |.  8B4C24 64     MOV ECX,DWORD PTR SS:[ESP+64]
004016D4  |.  03C3          ADD EAX,EBX
004016D6  |.  23CB          AND ECX,EBX
004016D8  |.  23E8          AND EBP,EAX
004016DA  |.  0BCD          OR ECX,EBP
004016DC  |.  8B6C24 34     MOV EBP,DWORD PTR SS:[ESP+34]
004016E0  |.  03CD          ADD ECX,EBP
004016E2  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
004016E6  |.  F7D3          NOT EBX
004016E8  |.  8D940A 40B340>LEA EDX,DWORD PTR DS:[EDX+ECX+C040B340]
004016EF  |.  23D8          AND EBX,EAX
004016F1  |.  8BCA          MOV ECX,EDX
004016F3  |.  C1E9 17       SHR ECX,17
004016F6  |.  C1E2 09       SHL EDX,9
004016F9  |.  0BCA          OR ECX,EDX
004016FB  |.  03C8          ADD ECX,EAX
004016FD  |.  8BD1          MOV EDX,ECX
004016FF  |.  23D5          AND EDX,EBP
00401701  |.  8B6C24 48     MOV EBP,DWORD PTR SS:[ESP+48]
00401705  |.  0BDA          OR EBX,EDX
00401707  |.  03DD          ADD EBX,EBP
00401709  |.  8DBC1F 515A5E>LEA EDI,DWORD PTR DS:[EDI+EBX+265E5A51]
00401710  |.  8BD7          MOV EDX,EDI
00401712  |.  C1EA 12       SHR EDX,12
00401715  |.  C1E7 0E       SHL EDI,0E
00401718  |.  0BD7          OR EDX,EDI
0040171A  |.  8BF8          MOV EDI,EAX
0040171C  |.  03D1          ADD EDX,ECX
0040171E  |.  F7D7          NOT EDI
00401720  |.  8BDA          MOV EBX,EDX
00401722  |.  23F9          AND EDI,ECX
00401724  |.  23D8          AND EBX,EAX
00401726  |.  0BFB          OR EDI,EBX
00401728  |.  8B5C24 1C     MOV EBX,DWORD PTR SS:[ESP+1C]
0040172C  |.  03FB          ADD EDI,EBX
0040172E  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
00401732  |.  8D9C3B AAC7B6>LEA EBX,DWORD PTR DS:[EBX+EDI+E9B6C7AA]
00401739  |.  8BFB          MOV EDI,EBX
0040173B  |.  C1E7 14       SHL EDI,14
0040173E  |.  C1EB 0C       SHR EBX,0C
00401741  |.  0BFB          OR EDI,EBX
00401743  |.  8BD9          MOV EBX,ECX
00401745  |.  03FA          ADD EDI,EDX
00401747  |.  897C24 60     MOV DWORD PTR SS:[ESP+60],EDI
0040174B  |.  8BF9          MOV EDI,ECX
0040174D  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
00401751  |.  F7D7          NOT EDI
00401753  |.  23FA          AND EDI,EDX
00401755  |.  23DD          AND EBX,EBP
00401757  |.  8B6C24 30     MOV EBP,DWORD PTR SS:[ESP+30]
0040175B  |.  0BFB          OR EDI,EBX
0040175D  |.  03FD          ADD EDI,EBP
0040175F  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
00401763  |.  8D8438 5D102F>LEA EAX,DWORD PTR DS:[EAX+EDI+D62F105D]
0040176A  |.  8BF8          MOV EDI,EAX
0040176C  |.  C1EF 1B       SHR EDI,1B
0040176F  |.  C1E0 05       SHL EAX,5
00401772  |.  0BF8          OR EDI,EAX
00401774  |.  8BC2          MOV EAX,EDX
00401776  |.  03FB          ADD EDI,EBX
00401778  |.  F7D0          NOT EAX
0040177A  |.  8BEA          MOV EBP,EDX
0040177C  |.  23C3          AND EAX,EBX
0040177E  |.  23EF          AND EBP,EDI
00401780  |.  0BC5          OR EAX,EBP
00401782  |.  8B6C24 44     MOV EBP,DWORD PTR SS:[ESP+44]
00401786  |.  03C5          ADD EAX,EBP
00401788  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
0040178C  |.  F7D3          NOT EBX
0040178E  |.  8D8C01 531444>LEA ECX,DWORD PTR DS:[ECX+EAX+2441453]
00401795  |.  23DF          AND EBX,EDI
00401797  |.  8BC1          MOV EAX,ECX
00401799  |.  C1E8 17       SHR EAX,17
0040179C  |.  C1E1 09       SHL ECX,9
0040179F  |.  0BC1          OR EAX,ECX
004017A1  |.  03C7          ADD EAX,EDI
004017A3  |.  8BC8          MOV ECX,EAX
004017A5  |.  23CD          AND ECX,EBP
004017A7  |.  8B6C24 58     MOV EBP,DWORD PTR SS:[ESP+58]
004017AB  |.  0BD9          OR EBX,ECX
004017AD  |.  03DD          ADD EBX,EBP
004017AF  |.  8D941A 81E6A1>LEA EDX,DWORD PTR DS:[EDX+EBX+D8A1E681]
004017B6  |.  8BCA          MOV ECX,EDX
004017B8  |.  C1E9 12       SHR ECX,12
004017BB  |.  C1E2 0E       SHL EDX,0E
004017BE  |.  0BCA          OR ECX,EDX
004017C0  |.  8BD7          MOV EDX,EDI
004017C2  |.  03C8          ADD ECX,EAX
004017C4  |.  F7D2          NOT EDX
004017C6  |.  8BD9          MOV EBX,ECX
004017C8  |.  23D0          AND EDX,EAX
004017CA  |.  23DF          AND EBX,EDI
004017CC  |.  0BD3          OR EDX,EBX
004017CE  |.  8B5C24 2C     MOV EBX,DWORD PTR SS:[ESP+2C]
004017D2  |.  03D3          ADD EDX,EBX
004017D4  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
004017D8  |.  8D9C13 C8FBD3>LEA EBX,DWORD PTR DS:[EBX+EDX+E7D3FBC8]
004017DF  |.  8BD3          MOV EDX,EBX
004017E1  |.  C1E2 14       SHL EDX,14
004017E4  |.  C1EB 0C       SHR EBX,0C
004017E7  |.  0BD3          OR EDX,EBX
004017E9  |.  8BD8          MOV EBX,EAX
004017EB  |.  03D1          ADD EDX,ECX
004017ED  |.  895424 60     MOV DWORD PTR SS:[ESP+60],EDX
004017F1  |.  8BD0          MOV EDX,EAX
004017F3  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
004017F7  |.  F7D2          NOT EDX
004017F9  |.  23D1          AND EDX,ECX
004017FB  |.  23DD          AND EBX,EBP
004017FD  |.  8B6C24 40     MOV EBP,DWORD PTR SS:[ESP+40]
00401801  |.  0BD3          OR EDX,EBX
00401803  |.  03D5          ADD EDX,EBP
00401805  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
00401809  |.  8BE9          MOV EBP,ECX
0040180B  |.  8DBC17 E6CDE1>LEA EDI,DWORD PTR DS:[EDI+EDX+21E1CDE6]
00401812  |.  8BD7          MOV EDX,EDI
00401814  |.  C1EA 1B       SHR EDX,1B
00401817  |.  C1E7 05       SHL EDI,5
0040181A  |.  0BD7          OR EDX,EDI
0040181C  |.  8BF9          MOV EDI,ECX
0040181E  |.  03D3          ADD EDX,EBX
00401820  |.  F7D7          NOT EDI
00401822  |.  23FB          AND EDI,EBX
00401824  |.  23EA          AND EBP,EDX
00401826  |.  0BFD          OR EDI,EBP
00401828  |.  8B6C24 54     MOV EBP,DWORD PTR SS:[ESP+54]
0040182C  |.  03FD          ADD EDI,EBP
0040182E  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
00401832  |.  F7D3          NOT EBX
00401834  |.  8D8438 D60737>LEA EAX,DWORD PTR DS:[EAX+EDI+C33707D6]
0040183B  |.  23DA          AND EBX,EDX
0040183D  |.  8BF8          MOV EDI,EAX
0040183F  |.  C1EF 17       SHR EDI,17
00401842  |.  C1E0 09       SHL EAX,9
00401845  |.  0BF8          OR EDI,EAX
00401847  |.  03FA          ADD EDI,EDX
00401849  |.  8BC7          MOV EAX,EDI
0040184B  |.  23C5          AND EAX,EBP
0040184D  |.  8B6C24 28     MOV EBP,DWORD PTR SS:[ESP+28]
00401851  |.  0BD8          OR EBX,EAX
00401853  |.  03DD          ADD EBX,EBP
00401855  |.  8D8C19 870DD5>LEA ECX,DWORD PTR DS:[ECX+EBX+F4D50D87]
0040185C  |.  8BC1          MOV EAX,ECX
0040185E  |.  C1E8 12       SHR EAX,12
00401861  |.  C1E1 0E       SHL ECX,0E
00401864  |.  0BC1          OR EAX,ECX
00401866  |.  8BCA          MOV ECX,EDX
00401868  |.  03C7          ADD EAX,EDI
0040186A  |.  F7D1          NOT ECX
0040186C  |.  8BD8          MOV EBX,EAX
0040186E  |.  23CF          AND ECX,EDI
00401870  |.  23DA          AND EBX,EDX
00401872  |.  0BCB          OR ECX,EBX
00401874  |.  8B5C24 3C     MOV EBX,DWORD PTR SS:[ESP+3C]
00401878  |.  03CB          ADD ECX,EBX
0040187A  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
0040187E  |.  8D9C0B ED145A>LEA EBX,DWORD PTR DS:[EBX+ECX+455A14ED]
00401885  |.  8BCB          MOV ECX,EBX
00401887  |.  C1E1 14       SHL ECX,14
0040188A  |.  C1EB 0C       SHR EBX,0C
0040188D  |.  0BCB          OR ECX,EBX
0040188F  |.  8BDF          MOV EBX,EDI
00401891  |.  03C8          ADD ECX,EAX
00401893  |.  894C24 60     MOV DWORD PTR SS:[ESP+60],ECX
00401897  |.  8BCF          MOV ECX,EDI
00401899  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
0040189D  |.  F7D1          NOT ECX
0040189F  |.  23C8          AND ECX,EAX
004018A1  |.  23DD          AND EBX,EBP
004018A3  |.  8B6C24 50     MOV EBP,DWORD PTR SS:[ESP+50]
004018A7  |.  0BCB          OR ECX,EBX
004018A9  |.  03CD          ADD ECX,EBP
004018AB  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
004018AF  |.  8BE8          MOV EBP,EAX
004018B1  |.  8D940A 05E9E3>LEA EDX,DWORD PTR DS:[EDX+ECX+A9E3E905]
004018B8  |.  8BCA          MOV ECX,EDX
004018BA  |.  C1E9 1B       SHR ECX,1B
004018BD  |.  C1E2 05       SHL EDX,5
004018C0  |.  0BCA          OR ECX,EDX
004018C2  |.  8BD0          MOV EDX,EAX
004018C4  |.  03CB          ADD ECX,EBX
004018C6  |.  F7D2          NOT EDX
004018C8  |.  23D3          AND EDX,EBX
004018CA  |.  23E9          AND EBP,ECX
004018CC  |.  0BD5          OR EDX,EBP
004018CE  |.  8B6C24 24     MOV EBP,DWORD PTR SS:[ESP+24]
004018D2  |.  03D5          ADD EDX,EBP
004018D4  |.  8B6C24 60     MOV EBP,DWORD PTR SS:[ESP+60]
004018D8  |.  F7D3          NOT EBX
004018DA  |.  8DBC17 F8A3EF>LEA EDI,DWORD PTR DS:[EDI+EDX+FCEFA3F8]
004018E1  |.  23D9          AND EBX,ECX
004018E3  |.  8BD7          MOV EDX,EDI
004018E5  |.  C1EA 17       SHR EDX,17
004018E8  |.  C1E7 09       SHL EDI,9
004018EB  |.  0BD7          OR EDX,EDI
004018ED  |.  03D1          ADD EDX,ECX
004018EF  |.  8BFA          MOV EDI,EDX
004018F1  |.  23FD          AND EDI,EBP
004018F3  |.  8B6C24 38     MOV EBP,DWORD PTR SS:[ESP+38]
004018F7  |.  0BDF          OR EBX,EDI
004018F9  |.  03DD          ADD EBX,EBP
004018FB  |.  8D8418 D9026F>LEA EAX,DWORD PTR DS:[EAX+EBX+676F02D9]
00401902  |.  8BF8          MOV EDI,EAX
00401904  |.  C1EF 12       SHR EDI,12
00401907  |.  C1E0 0E       SHL EAX,0E
0040190A  |.  0BF8          OR EDI,EAX
0040190C  |.  8BC1          MOV EAX,ECX
0040190E  |.  03FA          ADD EDI,EDX
00401910  |.  F7D0          NOT EAX
00401912  |.  8BDF          MOV EBX,EDI
00401914  |.  23C2          AND EAX,EDX
00401916  |.  23D9          AND EBX,ECX
00401918  |.  0BC3          OR EAX,EBX
0040191A  |.  8B5C24 4C     MOV EBX,DWORD PTR SS:[ESP+4C]
0040191E  |.  03C3          ADD EAX,EBX
00401920  |.  8B5C24 60     MOV EBX,DWORD PTR SS:[ESP+60]
00401924  |.  8D9C03 8A4C2A>LEA EBX,DWORD PTR DS:[EBX+EAX+8D2A4C8A]
0040192B  |.  8BC3          MOV EAX,EBX
0040192D  |.  C1E0 14       SHL EAX,14
00401930  |.  C1EB 0C       SHR EBX,0C
00401933  |.  0BC3          OR EAX,EBX
00401935  |.  03C7          ADD EAX,EDI
00401937  |.  8B6C24 30     MOV EBP,DWORD PTR SS:[ESP+30]
0040193B  |.  8BDA          MOV EBX,EDX
0040193D  |.  33DF          XOR EBX,EDI
0040193F  |.  33D8          XOR EBX,EAX
00401941  |.  03DD          ADD EBX,EBP
00401943  |.  8B6C24 3C     MOV EBP,DWORD PTR SS:[ESP+3C]
00401947  |.  8D8C19 4239FA>LEA ECX,DWORD PTR DS:[ECX+EBX+FFFA3942]
0040194E  |.  8BD9          MOV EBX,ECX
00401950  |.  C1EB 1C       SHR EBX,1C
00401953  |.  C1E1 04       SHL ECX,4
00401956  |.  0BD9          OR EBX,ECX
00401958  |.  8BCF          MOV ECX,EDI
0040195A  |.  03D8          ADD EBX,EAX
0040195C  |.  33C8          XOR ECX,EAX
0040195E  |.  33CB          XOR ECX,EBX
00401960  |.  03CD          ADD ECX,EBP
00401962  |.  8B6C24 48     MOV EBP,DWORD PTR SS:[ESP+48]
00401966  |.  8D8C0A 81F671>LEA ECX,DWORD PTR DS:[EDX+ECX+8771F681]
0040196D  |.  8BD1          MOV EDX,ECX
0040196F  |.  C1EA 15       SHR EDX,15
00401972  |.  C1E1 0B       SHL ECX,0B
00401975  |.  0BD1          OR EDX,ECX
00401977  |.  03D3          ADD EDX,EBX
00401979  |.  8BCA          MOV ECX,EDX
0040197B  |.  33C8          XOR ECX,EAX
0040197D  |.  33CB          XOR ECX,EBX
0040197F  |.  03CD          ADD ECX,EBP
00401981  |.  8B6C24 54     MOV EBP,DWORD PTR SS:[ESP+54]
00401985  |.  8D8C0F 22619D>LEA ECX,DWORD PTR DS:[EDI+ECX+6D9D6122]
0040198C  |.  8BF9          MOV EDI,ECX
0040198E  |.  C1EF 10       SHR EDI,10
00401991  |.  C1E1 10       SHL ECX,10
00401994  |.  0BF9          OR EDI,ECX
00401996  |.  8BCA          MOV ECX,EDX
00401998  |.  03FA          ADD EDI,EDX
0040199A  |.  33CF          XOR ECX,EDI
0040199C  |.  894C24 60     MOV DWORD PTR SS:[ESP+60],ECX
004019A0  |.  33CB          XOR ECX,EBX
004019A2  |.  03CD          ADD ECX,EBP
004019A4  |.  8B6C24 20     MOV EBP,DWORD PTR SS:[ESP+20]
004019A8  |.  8D8408 0C38E5>LEA EAX,DWORD PTR DS:[EAX+ECX+FDE5380C]
004019AF  |.  8BC8          MOV ECX,EAX
004019B1  |.  C1E1 17       SHL ECX,17
004019B4  |.  C1E8 09       SHR EAX,9
004019B7  |.  0BC8          OR ECX,EAX
004019B9  |.  8B4424 60     MOV EAX,DWORD PTR SS:[ESP+60]
004019BD  |.  03CF          ADD ECX,EDI
004019BF  |.  33C1          XOR EAX,ECX
004019C1  |.  03C5          ADD EAX,EBP
004019C3  |.  8B6C24 2C     MOV EBP,DWORD PTR SS:[ESP+2C]
004019C7  |.  8D9C03 44EABE>LEA EBX,DWORD PTR DS:[EBX+EAX+A4BEEA44]
004019CE  |.  8BC3          MOV EAX,EBX
004019D0  |.  C1E8 1C       SHR EAX,1C
004019D3  |.  C1E3 04       SHL EBX,4
004019D6  |.  0BC3          OR EAX,EBX
004019D8  |.  8BDF          MOV EBX,EDI
004019DA  |.  03C1          ADD EAX,ECX
004019DC  |.  33D9          XOR EBX,ECX
004019DE  |.  33D8          XOR EBX,EAX
004019E0  |.  03DD          ADD EBX,EBP
004019E2  |.  8B6C24 38     MOV EBP,DWORD PTR SS:[ESP+38]
004019E6  |.  8D941A A9CFDE>LEA EDX,DWORD PTR DS:[EDX+EBX+4BDECFA9]
004019ED  |.  8BDA          MOV EBX,EDX
004019EF  |.  C1EB 15       SHR EBX,15
004019F2  |.  C1E2 0B       SHL EDX,0B
004019F5  |.  0BDA          OR EBX,EDX
004019F7  |.  03D8          ADD EBX,EAX
004019F9  |.  8BD3          MOV EDX,EBX
004019FB  |.  33D1          XOR EDX,ECX
004019FD  |.  33D0          XOR EDX,EAX
004019FF  |.  03D5          ADD EDX,EBP
00401A01  |.  8DBC17 604BBB>LEA EDI,DWORD PTR DS:[EDI+EDX+F6BB4B60]
00401A08  |.  8BD7          MOV EDX,EDI
00401A0A  |.  C1EA 10       SHR EDX,10
00401A0D  |.  C1E7 10       SHL EDI,10
00401A10  |.  0BD7          OR EDX,EDI
00401A12  |.  8BFB          MOV EDI,EBX
00401A14  |.  03D3          ADD EDX,EBX
00401A16  |.  33FA          XOR EDI,EDX
00401A18  |.  8BEF          MOV EBP,EDI
00401A1A  |.  33E8          XOR EBP,EAX
00401A1C  |.  036C24 44     ADD EBP,DWORD PTR SS:[ESP+44]
00401A20  |.  8DAC29 70BCBF>LEA EBP,DWORD PTR DS:[ECX+EBP+BEBFBC70]
00401A27  |.  8BCD          MOV ECX,EBP
00401A29  |.  C1E1 17       SHL ECX,17
00401A2C  |.  C1ED 09       SHR EBP,9
00401A2F  |.  0BCD          OR ECX,EBP
00401A31  |.  8B6C24 50     MOV EBP,DWORD PTR SS:[ESP+50]
00401A35  |.  03CA          ADD ECX,EDX
00401A37  |.  33F9          XOR EDI,ECX
00401A39  |.  03FD          ADD EDI,EBP
00401A3B  |.  8B6C24 1C     MOV EBP,DWORD PTR SS:[ESP+1C]
00401A3F  |.  8DBC38 C67E9B>LEA EDI,DWORD PTR DS:[EAX+EDI+289B7EC6]
00401A46  |.  8BC7          MOV EAX,EDI
00401A48  |.  C1E8 1C       SHR EAX,1C
00401A4B  |.  C1E7 04       SHL EDI,4
00401A4E  |.  0BC7          OR EAX,EDI
00401A50  |.  8BFA          MOV EDI,EDX
00401A52  |.  03C1          ADD EAX,ECX
00401A54  |.  33F9          XOR EDI,ECX
00401A56  |.  33F8          XOR EDI,EAX
00401A58  |.  03FD          ADD EDI,EBP
00401A5A  |.  8B6C24 28     MOV EBP,DWORD PTR SS:[ESP+28]
00401A5E  |.  8D9C3B FA27A1>LEA EBX,DWORD PTR DS:[EBX+EDI+EAA127FA]
00401A65  |.  8BFB          MOV EDI,EBX
00401A67  |.  C1EF 15       SHR EDI,15
00401A6A  |.  C1E3 0B       SHL EBX,0B
00401A6D  |.  0BFB          OR EDI,EBX
00401A6F  |.  03F8          ADD EDI,EAX
00401A71  |.  8BDF          MOV EBX,EDI
00401A73  |.  33D9          XOR EBX,ECX
00401A75  |.  33D8          XOR EBX,EAX
00401A77  |.  03DD          ADD EBX,EBP
00401A79  |.  8D941A 8530EF>LEA EDX,DWORD PTR DS:[EDX+EBX+D4EF3085]
00401A80  |.  8BDA          MOV EBX,EDX
00401A82  |.  C1EB 10       SHR EBX,10
00401A85  |.  C1E2 10       SHL EDX,10
00401A88  |.  0BDA          OR EBX,EDX
00401A8A  |.  8BD7          MOV EDX,EDI
00401A8C  |.  03DF          ADD EBX,EDI
00401A8E  |.  33D3          XOR EDX,EBX
00401A90  |.  8BEA          MOV EBP,EDX
00401A92  |.  33E8          XOR EBP,EAX
00401A94  |.  036C24 34     ADD EBP,DWORD PTR SS:[ESP+34]
00401A98  |.  8DAC29 051D88>LEA EBP,DWORD PTR DS:[ECX+EBP+4881D05]
00401A9F  |.  8BCD          MOV ECX,EBP
00401AA1  |.  C1E1 17       SHL ECX,17
00401AA4  |.  C1ED 09       SHR EBP,9
00401AA7  |.  0BCD          OR ECX,EBP
00401AA9  |.  8B6C24 40     MOV EBP,DWORD PTR SS:[ESP+40]
00401AAD  |.  03CB          ADD ECX,EBX
00401AAF  |.  33D1          XOR EDX,ECX
00401AB1  |.  03D5          ADD EDX,EBP
00401AB3  |.  8D9410 39D0D4>LEA EDX,DWORD PTR DS:[EAX+EDX+D9D4D039]
00401ABA  |.  8BC2          MOV EAX,EDX
00401ABC  |.  C1E8 1C       SHR EAX,1C
00401ABF  |.  C1E2 04       SHL EDX,4
00401AC2  |.  0BC2          OR EAX,EDX
00401AC4  |.  8BD3          MOV EDX,EBX
00401AC6  |.  03C1          ADD EAX,ECX
00401AC8  |.  33D1          XOR EDX,ECX
00401ACA  |.  33D0          XOR EDX,EAX
00401ACC  |.  035424 4C     ADD EDX,DWORD PTR SS:[ESP+4C]
00401AD0  |.  8DBC17 E599DB>LEA EDI,DWORD PTR DS:[EDI+EDX+E6DB99E5]
00401AD7  |.  8BD7          MOV EDX,EDI
00401AD9  |.  C1EA 15       SHR EDX,15
00401ADC  |.  C1E7 0B       SHL EDI,0B
00401ADF  |.  0BD7          OR EDX,EDI
00401AE1  |.  03D0          ADD EDX,EAX
00401AE3  |.  8BFA          MOV EDI,EDX
00401AE5  |.  33F9          XOR EDI,ECX
00401AE7  |.  33F8          XOR EDI,EAX
00401AE9  |.  037C24 58     ADD EDI,DWORD PTR SS:[ESP+58]
00401AED  |.  8D9C3B F87CA2>LEA EBX,DWORD PTR DS:[EBX+EDI+1FA27CF8]
00401AF4  |.  8BFB          MOV EDI,EBX
00401AF6  |.  C1EF 10       SHR EDI,10
00401AF9  |.  C1E3 10       SHL EBX,10
00401AFC  |.  0BFB          OR EDI,EBX
00401AFE  |.  8BDA          MOV EBX,EDX
00401B00  |.  03FA          ADD EDI,EDX
00401B02  |.  33DF          XOR EBX,EDI
00401B04  |.  33D8          XOR EBX,EAX
00401B06  |.  035C24 24     ADD EBX,DWORD PTR SS:[ESP+24]
00401B0A  |.  8D8C19 6556AC>LEA ECX,DWORD PTR DS:[ECX+EBX+C4AC5665]
00401B11  |.  8BD9          MOV EBX,ECX
00401B13  |.  C1E3 17       SHL EBX,17
00401B16  |.  C1E9 09       SHR ECX,9
00401B19  |.  0BD9          OR EBX,ECX
00401B1B  |.  8BCA          MOV ECX,EDX
00401B1D  |.  03DF          ADD EBX,EDI
00401B1F  |.  F7D1          NOT ECX
00401B21  |.  0BCB          OR ECX,EBX
00401B23  |.  33CF          XOR ECX,EDI
00401B25  |.  034C24 1C     ADD ECX,DWORD PTR SS:[ESP+1C]
00401B29  |.  8D8408 442229>LEA EAX,DWORD PTR DS:[EAX+ECX+F4292244]
00401B30  |.  8BC8          MOV ECX,EAX
00401B32  |.  C1E9 1A       SHR ECX,1A
00401B35  |.  C1E0 06       SHL EAX,6
00401B38  |.  0BC8          OR ECX,EAX
00401B3A  |.  8BC7          MOV EAX,EDI
00401B3C  |.  03CB          ADD ECX,EBX
00401B3E  |.  F7D0          NOT EAX
00401B40  |.  0BC1          OR EAX,ECX
00401B42  |.  33C3          XOR EAX,EBX
00401B44  |.  034424 38     ADD EAX,DWORD PTR SS:[ESP+38]
00401B48  |.  8D9402 97FF2A>LEA EDX,DWORD PTR DS:[EDX+EAX+432AFF97]
00401B4F  |.  8BC2          MOV EAX,EDX
00401B51  |.  C1E8 16       SHR EAX,16
00401B54  |.  C1E2 0A       SHL EDX,0A
00401B57  |.  0BC2          OR EAX,EDX
00401B59  |.  8BD3          MOV EDX,EBX
00401B5B  |.  03C1          ADD EAX,ECX
00401B5D  |.  F7D2          NOT EDX
00401B5F  |.  0BD0          OR EDX,EAX
00401B61  |.  33D1          XOR EDX,ECX
00401B63  |.  035424 54     ADD EDX,DWORD PTR SS:[ESP+54]
00401B67  |.  8DBC17 A72394>LEA EDI,DWORD PTR DS:[EDI+EDX+AB9423A7]
00401B6E  |.  8BD7          MOV EDX,EDI
00401B70  |.  C1EA 11       SHR EDX,11
00401B73  |.  C1E7 0F       SHL EDI,0F
00401B76  |.  0BD7          OR EDX,EDI
00401B78  |.  8BF9          MOV EDI,ECX
00401B7A  |.  03D0          ADD EDX,EAX
00401B7C  |.  F7D7          NOT EDI
00401B7E  |.  0BFA          OR EDI,EDX
00401B80  |.  33F8          XOR EDI,EAX
00401B82  |.  037C24 30     ADD EDI,DWORD PTR SS:[ESP+30]
00401B86  |.  8D9C3B 39A093>LEA EBX,DWORD PTR DS:[EBX+EDI+FC93A039]
00401B8D  |.  8BFB          MOV EDI,EBX
00401B8F  |.  C1E7 15       SHL EDI,15
00401B92  |.  C1EB 0B       SHR EBX,0B
00401B95  |.  0BFB          OR EDI,EBX
00401B97  |.  8BD8          MOV EBX,EAX
00401B99  |.  03FA          ADD EDI,EDX
00401B9B  |.  F7D3          NOT EBX
00401B9D  |.  0BDF          OR EBX,EDI
00401B9F  |.  33DA          XOR EBX,EDX
00401BA1  |.  035C24 4C     ADD EBX,DWORD PTR SS:[ESP+4C]
00401BA5  |.  8D8C19 C3595B>LEA ECX,DWORD PTR DS:[ECX+EBX+655B59C3]
00401BAC  |.  8BD9          MOV EBX,ECX
00401BAE  |.  C1EB 1A       SHR EBX,1A
00401BB1  |.  C1E1 06       SHL ECX,6
00401BB4  |.  0BD9          OR EBX,ECX
00401BB6  |.  8BCA          MOV ECX,EDX
00401BB8  |.  03DF          ADD EBX,EDI
00401BBA  |.  F7D1          NOT ECX
00401BBC  |.  0BCB          OR ECX,EBX
00401BBE  |.  33CF          XOR ECX,EDI
00401BC0  |.  034C24 28     ADD ECX,DWORD PTR SS:[ESP+28]
00401BC4  |.  8D8408 92CC0C>LEA EAX,DWORD PTR DS:[EAX+ECX+8F0CCC92]
00401BCB  |.  8BC8          MOV ECX,EAX
00401BCD  |.  C1E9 16       SHR ECX,16
00401BD0  |.  C1E0 0A       SHL EAX,0A
00401BD3  |.  0BC8          OR ECX,EAX
00401BD5  |.  8BC7          MOV EAX,EDI
00401BD7  |.  03CB          ADD ECX,EBX
00401BD9  |.  F7D0          NOT EAX
00401BDB  |.  0BC1          OR EAX,ECX
00401BDD  |.  33C3          XOR EAX,EBX
00401BDF  |.  034424 44     ADD EAX,DWORD PTR SS:[ESP+44]
00401BE3  |.  8D9402 7DF4EF>LEA EDX,DWORD PTR DS:[EDX+EAX+FFEFF47D]
00401BEA  |.  8BC2          MOV EAX,EDX
00401BEC  |.  C1E8 11       SHR EAX,11
00401BEF  |.  C1E2 0F       SHL EDX,0F
00401BF2  |.  0BC2          OR EAX,EDX
00401BF4  |.  8BD3          MOV EDX,EBX
00401BF6  |.  03C1          ADD EAX,ECX
00401BF8  |.  F7D2          NOT EDX
00401BFA  |.  0BD0          OR EDX,EAX
00401BFC  |.  33D1          XOR EDX,ECX
00401BFE  |.  035424 20     ADD EDX,DWORD PTR SS:[ESP+20]
00401C02  |.  8DBC17 D15D84>LEA EDI,DWORD PTR DS:[EDI+EDX+85845DD1]
00401C09  |.  8BD7          MOV EDX,EDI
00401C0B  |.  C1E2 15       SHL EDX,15
00401C0E  |.  C1EF 0B       SHR EDI,0B
00401C11  |.  0BD7          OR EDX,EDI
00401C13  |.  8BF9          MOV EDI,ECX
00401C15  |.  03D0          ADD EDX,EAX
00401C17  |.  F7D7          NOT EDI
00401C19  |.  0BFA          OR EDI,EDX
00401C1B  |.  33F8          XOR EDI,EAX
00401C1D  |.  037C24 3C     ADD EDI,DWORD PTR SS:[ESP+3C]
00401C21  |.  8D9C3B 4F7EA8>LEA EBX,DWORD PTR DS:[EBX+EDI+6FA87E4F]
00401C28  |.  8BFB          MOV EDI,EBX
00401C2A  |.  C1EF 1A       SHR EDI,1A
00401C2D  |.  C1E3 06       SHL EBX,6
00401C30  |.  0BFB          OR EDI,EBX
00401C32  |.  8BD8          MOV EBX,EAX
00401C34  |.  03FA          ADD EDI,EDX
00401C36  |.  F7D3          NOT EBX
00401C38  |.  0BDF          OR EBX,EDI
00401C3A  |.  33DA          XOR EBX,EDX
00401C3C  |.  035C24 58     ADD EBX,DWORD PTR SS:[ESP+58]
00401C40  |.  8D8C19 E0E62C>LEA ECX,DWORD PTR DS:[ECX+EBX+FE2CE6E0]
00401C47  |.  8BD9          MOV EBX,ECX
00401C49  |.  C1EB 16       SHR EBX,16
00401C4C  |.  C1E1 0A       SHL ECX,0A
00401C4F  |.  0BD9          OR EBX,ECX
00401C51  |.  8BCA          MOV ECX,EDX
00401C53  |.  03DF          ADD EBX,EDI
00401C55  |.  F7D1          NOT ECX
00401C57  |.  0BCB          OR ECX,EBX
00401C59  |.  33CF          XOR ECX,EDI
00401C5B  |.  034C24 34     ADD ECX,DWORD PTR SS:[ESP+34]
00401C5F  |.  8D8408 144301>LEA EAX,DWORD PTR DS:[EAX+ECX+A3014314]
00401C66  |.  8BC8          MOV ECX,EAX
00401C68  |.  C1E9 11       SHR ECX,11
00401C6B  |.  C1E0 0F       SHL EAX,0F
00401C6E  |.  0BC8          OR ECX,EAX
00401C70  |.  8BC7          MOV EAX,EDI
00401C72  |.  03CB          ADD ECX,EBX
00401C74  |.  F7D0          NOT EAX
00401C76  |.  0BC1          OR EAX,ECX
00401C78  |.  33C3          XOR EAX,EBX
00401C7A  |.  034424 50     ADD EAX,DWORD PTR SS:[ESP+50]
00401C7E  |.  8D9402 A11108>LEA EDX,DWORD PTR DS:[EDX+EAX+4E0811A1]
00401C85  |.  8BC2          MOV EAX,EDX
00401C87  |.  C1E0 15       SHL EAX,15
00401C8A  |.  C1EA 0B       SHR EDX,0B
00401C8D  |.  0BC2          OR EAX,EDX
00401C8F  |.  8BD3          MOV EDX,EBX
00401C91  |.  03C1          ADD EAX,ECX
00401C93  |.  F7D2          NOT EDX
00401C95  |.  0BD0          OR EDX,EAX
00401C97  |.  33D1          XOR EDX,ECX
00401C99  |.  035424 2C     ADD EDX,DWORD PTR SS:[ESP+2C]
00401C9D  |.  8DBC17 827E53>LEA EDI,DWORD PTR DS:[EDI+EDX+F7537E82]
00401CA4  |.  8BD7          MOV EDX,EDI
00401CA6  |.  C1EA 1A       SHR EDX,1A
00401CA9  |.  C1E7 06       SHL EDI,6
00401CAC  |.  0BD7          OR EDX,EDI
00401CAE  |.  8BF9          MOV EDI,ECX
00401CB0  |.  03D0          ADD EDX,EAX
00401CB2  |.  F7D7          NOT EDI
00401CB4  |.  0BFA          OR EDI,EDX
00401CB6  |.  33F8          XOR EDI,EAX
00401CB8  |.  037C24 48     ADD EDI,DWORD PTR SS:[ESP+48]
00401CBC  |.  8D9C3B 35F23A>LEA EBX,DWORD PTR DS:[EBX+EDI+BD3AF235]
00401CC3  |.  8BFB          MOV EDI,EBX
00401CC5  |.  C1EF 16       SHR EDI,16
00401CC8  |.  C1E3 0A       SHL EBX,0A
00401CCB  |.  0BFB          OR EDI,EBX
00401CCD  |.  8BD8          MOV EBX,EAX
00401CCF  |.  03FA          ADD EDI,EDX
00401CD1  |.  F7D3          NOT EBX
00401CD3  |.  0BDF          OR EBX,EDI
00401CD5  |.  6A 40         PUSH 40
00401CD7  |.  33DA          XOR EBX,EDX
00401CD9  |.  6A 00         PUSH 0
00401CDB  |.  035C24 2C     ADD EBX,DWORD PTR SS:[ESP+2C]
00401CDF  |.  8D8C19 BBD2D7>LEA ECX,DWORD PTR DS:[ECX+EBX+2AD7D2BB]
00401CE6  |.  8BD9          MOV EBX,ECX
00401CE8  |.  C1EB 11       SHR EBX,11
00401CEB  |.  C1E1 0F       SHL ECX,0F
00401CEE  |.  0BD9          OR EBX,ECX
00401CF0  |.  8BCA          MOV ECX,EDX
00401CF2  |.  03DF          ADD EBX,EDI
00401CF4  |.  F7D1          NOT ECX
00401CF6  |.  0BCB          OR ECX,EBX
00401CF8  |.  33CF          XOR ECX,EDI
00401CFA  |.  03CD          ADD ECX,EBP
00401CFC  |.  8B6E 08       MOV EBP,DWORD PTR DS:[ESI+8]
00401CFF  |.  03EB          ADD EBP,EBX
00401D01  |.  8D8408 91D386>LEA EAX,DWORD PTR DS:[EAX+ECX+EB86D391]
00401D08  |.  8B0E          MOV ECX,DWORD PTR DS:[ESI]
00401D0A  |.  03CA          ADD ECX,EDX
00401D0C  |.  8BD0          MOV EDX,EAX
00401D0E  |.  C1E2 15       SHL EDX,15
00401D11  |.  C1E8 0B       SHR EAX,0B
00401D14  |.  0BD0          OR EDX,EAX
00401D16  |.  8B46 04       MOV EAX,DWORD PTR DS:[ESI+4]
00401D19  |.  03D3          ADD EDX,EBX
00401D1B  |.  8B5E 0C       MOV EBX,DWORD PTR DS:[ESI+C]
00401D1E  |.  03C2          ADD EAX,EDX
00401D20  |.  03DF          ADD EBX,EDI
00401D22  |.  8946 04       MOV DWORD PTR DS:[ESI+4],EAX
00401D25  |.  8D4424 24     LEA EAX,DWORD PTR SS:[ESP+24]
00401D29  |.  50            PUSH EAX
00401D2A  |.  890E          MOV DWORD PTR DS:[ESI],ECX
00401D2C  |.  896E 08       MOV DWORD PTR DS:[ESI+8],EBP
00401D2F  |.  895E 0C       MOV DWORD PTR DS:[ESI+C],EBX
00401D32  |.  E8 D9000000   CALL MD5KeyGe.00401E10
00401D37  |.  83C4 18       ADD ESP,18
00401D3A  |.  5F            POP EDI
00401D3B  |.  5E            POP ESI
00401D3C  |.  5D            POP EBP
00401D3D  |.  5B            POP EBX
00401D3E  |.  83C4 40       ADD ESP,40
00401D41  \.  C3            RETN

下面为标准MD5在IDA的特征:

初始4个常数:

.text:004012B0                         sub_4012B0 proc near                    ; CODE XREF: sub_4010A0+140p
.text:004012B0
.text:004012B0                         arg_0= dword ptr  4
.text:004012B0
.text:004012B0 8B 44 24 04                 mov     eax, [esp+arg_0]
.text:004012B4 33 C9                       xor     ecx, ecx
.text:004012B6 89 48 14                    mov     [eax+14h], ecx
.text:004012B9 89 48 10                    mov     [eax+10h], ecx
.text:004012BC C7 00 01 23 45 67           mov     dword ptr [eax], 67452301h
.text:004012C2 C7 40 04 89 AB CD EF        mov     dword ptr [eax+4], 0EFCDAB89h
.text:004012C9 C7 40 08 FE DC BA 98        mov     dword ptr [eax+8], 98BADCFEh
.text:004012D0 C7 40 0C 76 54 32 10        mov     dword ptr [eax+0Ch], 10325476h
.text:004012D7 C3                          retn
.text:004012D7                         sub_4012B0 endp

4轮hash运算(f5):

int __cdecl sub_401400(int a1, int a2)
{
  int v2; // [email protected]
  int b; // [email protected]
  int c; // [email protected]
  int d; // [email protected]
  unsigned int v6; // [email protected]
  unsigned int v7; // [email protected]
  unsigned int v8; // [email protected]
  int v9; // [email protected]
  unsigned int v10; // [email protected]
  int v11; // [email protected]
  unsigned int v12; // [email protected]
  unsigned int v13; // [email protected]
  unsigned int v14; // [email protected]
  int v15; // [email protected]
  unsigned int v16; // [email protected]
  int v17; // [email protected]
  unsigned int v18; // [email protected]
  unsigned int v19; // [email protected]
  unsigned int v20; // [email protected]
  unsigned int v21; // [email protected]
  unsigned int v22; // [email protected]
  int v23; // [email protected]
  unsigned int v24; // [email protected]
  int v25; // [email protected]
  unsigned int v26; // [email protected]
  int v27; // [email protected]
  unsigned int v28; // [email protected]
  unsigned int v29; // [email protected]
  unsigned int v30; // [email protected]
  int v31; // [email protected]
  int v32; // [email protected]
  unsigned int v33; // [email protected]
  unsigned int v34; // [email protected]
  int v35; // [email protected]
  unsigned int v36; // [email protected]
  int v37; // [email protected]
  unsigned int v38; // [email protected]
  int v39; // [email protected]
  unsigned int v40; // [email protected]
  int v41; // [email protected]
  unsigned int v42; // [email protected]
  int v43; // [email protected]
  unsigned int v44; // [email protected]
  int v45; // [email protected]
  unsigned int v46; // [email protected]
  int v47; // [email protected]
  unsigned int v48; // [email protected]
  int v49; // [email protected]
  unsigned int v50; // [email protected]
  int v51; // [email protected]
  unsigned int v52; // [email protected]
  int v53; // [email protected]
  unsigned int v54; // [email protected]
  unsigned int v55; // [email protected]
  int v56; // [email protected]
  unsigned int v57; // [email protected]
  unsigned int v58; // [email protected]
  unsigned int v59; // [email protected]
  int v60; // [email protected]
  unsigned int v61; // [email protected]
  unsigned int v62; // [email protected]
  int v63; // [email protected]
  unsigned int v64; // [email protected]
  int v65; // [email protected]
  unsigned int v66; // [email protected]
  unsigned int v67; // [email protected]
  unsigned int v68; // [email protected]
  int v69; // [email protected]
  unsigned int v70; // [email protected]
  int v71; // [email protected]
  unsigned int v72; // [email protected]
  unsigned int v73; // [email protected]
  unsigned int v74; // [email protected]
  int v75; // [email protected]
  unsigned int v76; // [email protected]
  int v77; // [email protected]
  unsigned int v78; // [email protected]
  int v79; // [email protected]
  unsigned int v80; // [email protected]
  int v81; // [email protected]
  unsigned int v82; // [email protected]
  int v83; // [email protected]
  unsigned int v84; // [email protected]
  int v85; // [email protected]
  unsigned int v86; // [email protected]
  int v87; // [email protected]
  unsigned int v88; // [email protected]
  int v89; // [email protected]
  unsigned int v90; // [email protected]
  int v91; // [email protected]
  unsigned int v92; // [email protected]
  int v93; // [email protected]
  unsigned int v94; // [email protected]
  int v95; // [email protected]
  unsigned int v96; // [email protected]
  int v97; // [email protected]
  unsigned int v98; // [email protected]
  int v99; // [email protected]
  unsigned int v100; // [email protected]
  int v101; // [email protected]
  unsigned int v102; // [email protected]
  int v103; // [email protected]
  unsigned int v104; // [email protected]
  int v105; // [email protected]
  unsigned int v106; // [email protected]
  int v107; // [email protected]
  unsigned int v108; // [email protected]
  int v109; // [email protected]
  int v110; // [email protected]
  unsigned int v111; // [email protected]
  int v112; // [email protected]
  int v113; // [email protected]
  int v114; // [email protected]
  int v116; // [sp+10h] [bp-28955B78h]@1
  int v117; // [sp+14h] [bp-28955B74h]@1
  int v118; // [sp+18h] [bp-28955B70h]@1
  int v119; // [sp+1Ch] [bp-28955B6Ch]@1
  int v120; // [sp+20h] [bp-28955B68h]@1
  int v121; // [sp+24h] [bp-28955B64h]@1
  int v122; // [sp+28h] [bp-28955B60h]@1
  int v123; // [sp+2Ch] [bp-28955B5Ch]@1
  int v124; // [sp+30h] [bp-28955B58h]@1
  int v125; // [sp+34h] [bp-28955B54h]@1
  int v126; // [sp+38h] [bp-28955B50h]@1
  int v127; // [sp+3Ch] [bp-28955B4Ch]@1
  int v128; // [sp+40h] [bp-28955B48h]@1
  int v129; // [sp+44h] [bp-28955B44h]@1
  int v130; // [sp+48h] [bp-28955B40h]@1
  int v131; // [sp+4Ch] [bp-28955B3Ch]@1
  int a; // [sp+54h] [bp-28955B34h]@1
  unsigned int v133; // [sp+54h] [bp-28955B34h]@1
  unsigned int v134; // [sp+54h] [bp-28955B34h]@1
  unsigned int v135; // [sp+54h] [bp-28955B34h]@1
  unsigned int v136; // [sp+54h] [bp-28955B34h]@1
  unsigned int v137; // [sp+54h] [bp-28955B34h]@1
  unsigned int v138; // [sp+54h] [bp-28955B34h]@1
  unsigned int v139; // [sp+54h] [bp-28955B34h]@1

  v2 = a1;
  b = *(_DWORD *)(a1 + 4);
  c = *(_DWORD *)(a1 + 8);
  d = *(_DWORD *)(a1 + 12);
  a = *(_DWORD *)a1;
  sub_401DA0(&v116, a2, 64);
  v6 = b + (((a + v116 + (b & c | d & ~b) + 0xD76AA478) << 7) | ((a + v116 + (b & c | d & ~b) + 0xD76AA478u) >> 25));  //循环右移25位相当于左移7位
  v7 = v6
     + (((v117 + (v6 & b | c & ~v6) + d + 0xE8C7B756) << 12) | ((v117 + (v6 & b | c & ~v6) + d + 0xE8C7B756) >> 20));
  v8 = c + v118 + (v6 & v7 | b & ~v7) - 0xDBDF8F25;
  v9 = v7 + ((v8 << 17) | (v8 >> 15));
  v10 = v9
      + (((b + v119 + (v9 & v7 | v6 & ~v9) + 0xC1BDCEEE) >> 10) | ((b + v119 + (v9 & v7 | v6 & ~v9) + 0xC1BDCEEE) << 22));
  v133 = v10;
  v11 = v120 + (v10 & v9 | v7 & ~v10);
  v12 = v133 + (((v6 + v11 - 176418897) << 7) | ((v6 + v11 - 176418897) >> 25));
  v13 = v12
      + (((v7 + v121 + (v12 & v133 | v9 & ~v12) - 0xB87839D6) << 12) | ((v7
                                                                       + v121
                                                                       + (v12 & v133 | v9 & ~v12)
                                                                       - 0xB87839D6) >> 20));
  v14 = v9 + v122 + (v12 & v13 | v133 & ~v13) - 1473231341;
  v15 = v13 + ((v14 << 17) | (v14 >> 15));
  v16 = v15
      + (((v133 + v123 + (v15 & v13 | v12 & ~v15) + 0xFD469501) >> 10) | ((v133
                                                                         + v123
                                                                         + (v15 & v13 | v12 & ~v15)
                                                                         + 0xFD469501) << 22));
  v134 = v16;
  v17 = v124 + (v16 & v15 | v13 & ~v16);
  v18 = v134 + (((v12 + v17 - 0x967F6728) << 7) | ((v12 + v17 - 0x967F6728) >> 25));
  v19 = v18
      + (((v13 + v125 + (v18 & v134 | v15 & ~v18) + 0x8B44F7AF) << 12) | ((v13
                                                                         + v125
                                                                         + (v18 & v134 | v15 & ~v18)
                                                                         + 0x8B44F7AF) >> 20));
  v20 = v126
      + (v18 & (v18
              + (((v13 + v125 + (v18 & v134 | v15 & ~v18) + 0x8B44F7AF) << 12) | ((v13
                                                                                 + v125
                                                                                 + (v18 & v134 | v15 & ~v18)
                                                                                 + 0x8B44F7AF) >> 20))) | v134 & ~(v18 + (((v13 + v125 + (v18 & v134 | v15 & ~v18) + 0x8B44F7AF) << 12) | ((v13 + v125 + (v18 & v134 | v15 & ~v18) + 0x8B44F7AF) >> 20))));
  v21 = v19 + (((v15 + v20 - 42063) << 17) | ((v15 + v20 - 42063) >> 15));
  v135 = v21
       + (((v134 + v127 + (v21 & v19 | v18 & ~v21) - 1990404162) >> 10) | ((v134
                                                                          + v127
                                                                          + (v21 & v19 | v18 & ~v21)
                                                                          - 1990404162) << 22));
  v22 = v18 + v128 + (v135 & v21 | v19 & ~v135) + 1804603682;
  v23 = v135 + ((v22 << 7) | (v22 >> 25));
  v24 = v19 + v129 + (v23 & v135 | v21 & ~v23) - 40341101;
  v25 = v23 + ((v24 << 12) | (v24 >> 20));
  v26 = v21 + v130 + (~v25 & v135 | v23 & v25) - 1502002290;
  v27 = v25 + ((v26 << 17) | (v26 >> 15));
  v28 = v27
      + (((v135 + v131 + (v27 & v25 | v23 & ~v27) + 1236535329) >> 10) | ((v135
                                                                         + v131
                                                                         + (v27 & v25 | v23 & ~v27)
                                                                         + 1236535329) << 22));
  v136 = v28;
  v29 = v23 + v117 + (~v25 & v27 | v28 & v25) - 165796510;
  v30 = v28;
  v31 = v28 + (32 * v29 | (v29 >> 27));
  v32 = v122 + (v31 & v27 | v30 & ~v27);
  v33 = v31 + (((v25 + v32 - 1069501632) << 9) | ((unsigned int)(v25 + v32 - 1069501632) >> 23));
  v34 = v27 + v127 + (v136 & v33 | v31 & ~v30) + 643717713;
  v35 = v33 + ((v34 << 14) | (v34 >> 18));
  v137 = v35
       + (((v136 + v116 + (v31 & v35 | v33 & ~v31) - 373897302) >> 12) | ((v136
                                                                         + v116
                                                                         + (v31 & v35 | v33 & ~v31)
                                                                         - 373897302) << 20));
  v36 = v31 + v121 + (v137 & v33 | v35 & ~v33) - 701558691;
  v37 = v137 + (32 * v36 | (v36 >> 27));
  v38 = v33 + v126 + (v37 & v35 | v137 & ~v35) + 38016083;
  v39 = v37 + ((v38 << 9) | (v38 >> 23));
  v40 = v35 + v131 + (v137 & (v37 + ((v38 << 9) | (v38 >> 23))) | v37 & ~v137) - 660478335;
  v41 = v39 + ((v40 << 14) | (v40 >> 18));
  v138 = v41
       + (((v137 + v120 + (v37 & v41 | v39 & ~v37) - 405537848) >> 12) | ((v137
                                                                         + v120
                                                                         + (v37 & v41 | v39 & ~v37)
                                                                         - 405537848) << 20));
  v42 = v37 + v125 + (v138 & v39 | v41 & ~v39) + 568446438;
  v43 = v138 + (32 * v42 | (v42 >> 27));
  v44 = v39 + v130 + (v43 & v41 | v138 & ~v41) - 1019803690;
  v45 = v43 + ((v44 << 9) | (v44 >> 23));
  v46 = v41 + v119 + (v138 & (v43 + ((v44 << 9) | (v44 >> 23))) | v43 & ~v138) - 187363961;
  v47 = v45 + ((v46 << 14) | (v46 >> 18));
  v139 = v47
       + (((v138 + v124 + (v43 & v47 | v45 & ~v43) + 1163531501) >> 12) | ((v138
                                                                          + v124
                                                                          + (v43 & v47 | v45 & ~v43)
                                                                          + 1163531501) << 20));
  v48 = v43 + v129 + (v139 & v45 | v47 & ~v45) - 1444681467;
  v49 = v139 + (32 * v48 | (v48 >> 27));
  v50 = v45 + v118 + (v49 & v47 | v139 & ~v47) - 51403784;
  v51 = v49 + ((v50 << 9) | (v50 >> 23));
  v52 = v47 + v123 + (v139 & (v49 + ((v50 << 9) | (v50 >> 23))) | v49 & ~v139) + 1735328473;
  v53 = v51 + ((v52 << 14) | (v52 >> 18));
  v54 = v53
      + (((v139 + v128 + (v49 & v53 | v51 & ~v49) - 1926607734) >> 12) | ((v139
                                                                         + v128
                                                                         + (v49 & v53 | v51 & ~v49)
                                                                         - 1926607734) << 20));
  v55 = v49 + v121 + (v54 ^ v53 ^ v51) - 378558;
  v56 = v54 + (16 * v55 | (v55 >> 28));
  v57 = v56
      + (((v51 + v124 + (v56 ^ v54 ^ v53) - 2022574463) << 11) | ((v51 + v124 + (v56 ^ v54 ^ v53) - 2022574463) >> 21));
  v58 = v57
      + (((v53 + v127 + (v56 ^ v54 ^ v57) + 1839030562) << 16) | ((v53 + v127 + (v56 ^ v54 ^ v57) + 1839030562) >> 16));
  v59 = v54 + v130 + (v56 ^ v58 ^ v57) - 35309556;
  v60 = v58 + ((v59 >> 9) | (v59 << 23));
  v61 = v60
      + (16 * (v56 + v117 + (v60 ^ v58 ^ v57) - 1530992060) | ((v56 + v117 + (v60 ^ v58 ^ v57) - 1530992060) >> 28));
  v62 = v57 + v120 + (v61 ^ v60 ^ v58) + 1272893353;
  v63 = v61 + ((v62 << 11) | (v62 >> 21));
  v64 = v58 + v123 + (v61 ^ v60 ^ (v61 + ((v62 << 11) | (v62 >> 21)))) - 155497632;
  v65 = v63 + ((v64 << 16) | (v64 >> 16));
  v66 = v65
      + (((v60 + v126 + (v61 ^ v65 ^ v63) - 1094730640) >> 9) | ((v60 + v126 + (v61 ^ v65 ^ v63) - 1094730640) << 23));
  v67 = v66 + (16 * (v61 + v129 + (v66 ^ v65 ^ v63) + 681279174) | ((v61 + v129 + (v66 ^ v65 ^ v63) + 681279174) >> 28));
  v68 = v63 + v116 + (v67 ^ v66 ^ v65) - 358537222;
  v69 = v67 + ((v68 << 11) | (v68 >> 21));
  v70 = v65 + v119 + (v67 ^ v66 ^ (v67 + ((v68 << 11) | (v68 >> 21)))) - 722521979;
  v71 = v69 + ((v70 << 16) | (v70 >> 16));
  v72 = v71 + (((v66 + v122 + (v67 ^ v71 ^ v69) + 76029189) >> 9) | ((v66 + v122 + (v67 ^ v71 ^ v69) + 76029189) << 23));
  v73 = v72 + (16 * (v67 + v125 + (v72 ^ v71 ^ v69) - 640364487) | ((v67 + v125 + (v72 ^ v71 ^ v69) - 640364487) >> 28));
  v74 = v69 + v128 + (v73 ^ v72 ^ v71) - 421815835;
  v75 = v73 + ((v74 << 11) | (v74 >> 21));
  v76 = v71 + v131 + (v73 ^ v72 ^ (v73 + ((v74 << 11) | (v74 >> 21)))) + 530742520;
  v77 = v75 + ((v76 << 16) | (v76 >> 16));
  v78 = v72 + v118 + (v73 ^ v77 ^ v75) - 995338651;
  v79 = v77 + ((v78 >> 9) | (v78 << 23));
  v80 = v73 + v116 + (v77 ^ (v79 | ~v75)) - 198630844;
  v81 = v79 + ((v80 << 6) | (v80 >> 26));
  v82 = v75 + v123 + (v79 ^ (v81 | ~v77)) + 1126891415;
  v83 = v81 + ((v82 << 10) | (v82 >> 22));
  v84 = v77 + v130 + (v81 ^ (v83 | ~v79)) - 1416354905;
  v85 = v83 + ((v84 << 15) | (v84 >> 17));
  v86 = v79 + v121 + (v83 ^ (v85 | ~v81)) - 57434055;
  v87 = v85 + ((v86 >> 11) | (v86 << 21));
  v88 = v81 + v128 + (v85 ^ (v87 | ~v83)) + 1700485571;
  v89 = v87 + ((v88 << 6) | (v88 >> 26));
  v90 = v83 + v119 + (v87 ^ (v89 | ~v85)) - 1894986606;
  v91 = v89 + ((v90 << 10) | (v90 >> 22));
  v92 = v85 + v126 + (v89 ^ (v91 | ~v87)) - 1051523;
  v93 = v91 + ((v92 << 15) | (v92 >> 17));
  v94 = v87 + v117 + (v91 ^ (v93 | ~v89)) - 2054922799;
  v95 = v93 + ((v94 >> 11) | (v94 << 21));
  v96 = v89 + v124 + (v93 ^ (v95 | ~v91)) + 1873313359;
  v97 = v95 + ((v96 << 6) | (v96 >> 26));
  v98 = v91 + v131 + (v95 ^ (v97 | ~v93)) - 30611744;
  v99 = v97 + ((v98 << 10) | (v98 >> 22));
  v100 = v93 + v122 + (v97 ^ (v99 | ~v95)) - 1560198380;
  v101 = v99 + ((v100 << 15) | (v100 >> 17));
  v102 = v95 + v129 + (v99 ^ (v101 | ~v97)) + 1309151649;
  v103 = v101 + ((v102 >> 11) | (v102 << 21));
  v104 = v97 + v120 + (v101 ^ (v103 | ~v99)) - 145523070;
  v105 = v103 + ((v104 << 6) | (v104 >> 26));
  v106 = v99 + v127 + (v103 ^ (v105 | ~v101)) - 1120210379;
  v107 = v105 + ((v106 << 10) | (v106 >> 22));
  v108 = v101 + v118 + (v105 ^ (v107 | ~v103)) + 718787259;
  v109 = v107 + ((v108 << 15) | (v108 >> 17));
  v110 = v109 + *(_DWORD *)(v2 + 8);
  v111 = v103 + v125 + (v107 ^ (v109 | ~v105)) - 343485551;
  v112 = v105 + *(_DWORD *)v2;
  v113 = v109 + ((v111 >> 11) | (v111 << 21));
  v114 = v107 + *(_DWORD *)(v2 + 12);
  *(_DWORD *)(v2 + 4) += v113;
  *(_DWORD *)v2 = v112;
  *(_DWORD *)(v2 + 8) = v110;
  *(_DWORD *)(v2 + 12) = v114;
  return sub_401E10(&v116, 0, 64);
}
时间: 2024-10-26 09:55:44

MD5加密算法的识别的相关文章

MD5加密算法(java及js)

为了防止用户登陆过程中信息被拦截导致信息泄露,我们应该在客户端就对用户密码进行加密.浏览器提交给服务器的是加密后的信息,即使被恶意拦截,被拦截信息也已做了加密处理,现在比较安全的一种加密算法是MD5加密算法,尽管MD5是一种单向的加密算法,但网上也有破解网站,所以为了进一步提高安全性,可以进行两次md5加密,或者结合其他的加密方法如3des等进行二次加密. 代码如下: js版: var hexcase = 0; function hex_md5(a) { if (a == "") re

IOS开发基础之—MD5加密算法

IOS开发基础之—MD5加密算法 MD5加密算法,实现类别如下: #import <CommonCrypto/CommonDigest.h> @interface NSString (md5) -(NSString *) md5HexDigest; @end #import "NSString+MD5HexDigest.h" @implementation NSString (md5) -(NSString *) md5HexDigest { const char *ori

RFC1321 MD5加密算法

global.h 1 /* GLOBAL.H - RSAREF types and constants 2 */ 3 4 /* PROTOTYPES should be set to one if and only if the compiler supports 5 function argument prototyping. 6 The following makes PROTOTYPES default to 0 if it has not already 7 been defined w

MD5加密算法(实际应用)

1 package Util; 2 3 import java.security.MessageDigest; 4 import java.security.NoSuchAlgorithmException; 5 6 import sun.security.provider.MD5; 7 8 public class MD5Util { 9 private static final char[] hexDigest = new char[]{'0','1','2','3','4','5','6'

XE6 MD5 加密算法

XE6 MD5 加密算法Delphifunction MD5(const texto: string): string; var idmd5: TIdHashMessageDigest5; begin idmd5 := TIdHashMessageDigest5.Create; try result := idmd5.HashStringAsHex(texto); finally idmd5.Free; end; end; c++builder #include <IdHashMessageDi

MD5加密算法详细分析_C实现

MD5加密算法 本文为原创作品,转载请注明出处:http://write.blog.csdn.net/postedit/51736426--开心! 维基百科对其描述: MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致.MD5由罗纳德·李维斯特设计,于1992年公开,用以替换MD4算法.这套算法的程序在 RFC 1321 中被加以规范. 将

一起谈谈MD5加密算法

MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆:所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文. 对信息系统或者网站系统来说,MD5算法主要用在用户注册口令的加密,对于普通强度的口令加密,可以通过以下三种方式进行破解: (1)在线查询密码.一些在线的MD

MD5加密算法简单示例

MD5加密算法简单示例 现在网络上一般的网站,只要功能稍微完善一点的,都需要用户进行注册,提供诸如用户名.用户密码.电子邮件.甚至是电话号码.详细住址等个人隐私信息,然后才可以享受网站提供的一些特殊的信息或者服务.为了增加安全性,有必要对数据库中的隐私数据进行加密. MD5算法,即"Message-Digest Algorithm 5(信息-摘要算法)",它是由MD2.MD3.MD4 发展而来的一种单向加密算法,也就是哈希(HASH)算法,是由国际著名的公钥加密算法标准RSA的第一设计

md5加密算法c语言版

from: http://blog.sina.com.cn/s/blog_693de6100101kcu6.html 注:以下是md5加密算法c语言版(16/32位) --------------------------------------------------- 网上找到的md5函数的实现,包括三个文件,依次如下: 头文件 TL_MD5.h 1 [cpp] 2 #ifndef MD5_H 3 #define MD5_H 4 5 typedef struct 6 { 7 unsigned