算法说明~~~~~~~~~呵呵~~~~~~~~ (2千字)
0167:0041A908 MOVSX ECX,BYTE [ESP+EAX+14] 将你的用户名第一个字符放入ECX0167:0041A90D ADD ESI,ECX ESI=ESI+ECX(第一次时ESI=0)
0167:0041A90F INC EAX EAX=EAX+1
0167:0041A910 CMP EAX,EDI 比较EAX,EDI(EDI中是你用户名的长度
0167:0041A912 JL 0041A908 EAX<EDI时往上跳,
0167:0041A914 MOV [ESP+10],ESI 以上几行的作用是将你的用户名累加
0167:0041A918 XOR ECX,ECX 清空ECX
0167:0041A91A XOR ESI,ESI 清空ESI
0167:0041A91C TEST EDI,EDI
0167:0041A91E JNG 0041A953
0167:0041A920 CMP ECX,BYTE +0A 比较ECX是否小于10
0167:0041A923 JNL 0041A958 ***这边是第一次的*** |***这边是以后的***
0167:0041A925 TEST ECX,ECX 由于第一次ECX=0所以 |以后ECX不为0
0167:0041A927 JNG 0041A930 直接跳止41A930 |所以这不跳
0167:0041A929 MOVSX EAX,BYTE [ECX+EBP-01] |将上次计算的结果放入EAX中
0167:0041A92E JMP SHORT 0041A93F |直接蹦到41A93F
0167:0041A930 MOVSX EDX,BYTE [ESP+ESI+14] 取你的用户名的第一个字符放入EDX中 |XXXXXXXXXXXXXXXXXXXXXXX
0167:0041A935 MOV EAX,[ESP+10] ESP+10中存放的是你用户名累加后的结果 |XXXXXXXXXXXXXXXXXXXXXXX
0167:0041A939 ADD EDX,ECX EDX=EDX+ECX |XXXXXXXXXXXXXXXXXXXXXXX
0167:0041A93B LEA EAX,[EDX+EAX+68] EAX=用户名累加后的结果+第一个字符+104 |XXXXXXXXXXXXXXXXXXXXXXX
0167:0041A93F CDQ |以后同左边
0167:0041A940 MOV EBX,1A EAX÷26 整数部分放入EAX
0167:0041A945 IDIV EBX 余数放入EDX
0167:0041A947 ADD EDX,BYTE +61 EDX+97
0167:0041A94A INC ESI ESI+1
0167:0041A94B MOV [ECX+EBP],DL 将DL放入ECX+EBP的值中
0167:0041A94E INC ECX ECX+1
0167:0041A94F CMP ESI,EDI 比较ESI,EDI(EDI是你用户名的长度)
示例:用户名masiqi用户名累加得644,累加结果+第一个字符(即“m”)+104=857
859÷26整数为32,余25,余数+97=122 查ASCII表得“z”
第二次122÷26 余18,余数+97=115 查ASCII表得“s”
第3次115÷26 余11,余数+97=108 查ASCII表得“l”
第4次108÷26 余4,余数+97=101 查ASCII表得“e”
第5次101÷26 余23,余数+97=120 查ASCII表得“x”
第6次120÷26 余16,余数+97=113 查ASCII表得“q”
第7次113÷26 余9,余数+97=106 查ASCII表得“j”
第8次106÷26 余2,余数+97=99 查ASCII表得“c”
第9次99÷26 余21,余数+97=118 查ASCII表得“v”
第10次118÷26 余14,余数+97=111 查ASCII表得“o”
