这是从国外搞来的算法,小菜一直不明白这算法的一行一行意思,所以请大家帮忙写一下注释,并且解释一下为什么是这么算的,这是从 OD 抠出来的代码:
00456015 8BD0 MOV EDX,EAX
00456017 85D2 TEST EDX,EDX
00456019 7E 1B JLE SHORT cnp.00456036
0045601B B8 01000000 MOV EAX,1
00456020 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4] (*01*)
00456023 0FB64C01 FF MOVZX ECX,BYTE PTR DS:[EAX+ECX-1] (*02*)
00456028 0FAFC8 IMUL ECX,EAX (*03*)
0045602B 03F1 ADD ESI,ECX (*04*)
0045602D 8D0CC0 LEA ECX,[EAX*8+EAX] (*05*)
00456030 03F1 ADD ESI,ECX (*06*)
00456032 40 INC EAX
00456033 4A DEC EDX
00456034 75 EA JNZ SHORT cnp.00456020 (*07*)
00456036 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00456039 E8 1E12FBFF CALL cnp.0040725C
0045603E 3BF0 CMP ESI,EAX
00456040 75 04 JNE SHORT cnp.00456046
00456042 B3 01 MOV BL,1
00456044 EB 02 JMP SHORT cnp.00456048
打星号的就是算法的7个运算部分,请大牛解答一下,特别是中括号里的寄存器 减数字的这个是怎么运算的?比如:[EAX+ECX-1],
在这里,比如我输入的用户名是: cxj98,
运算开始都是取用户名第一个字母,第一个字母取出来后,是怎么变成数字的?是字母 ASCII 码转换的,还是用户名位数转换的,还是其它什么转换成的16进制,然后取出来后,又是怎么开始计算的,算出来后,又是怎么样?最后好像还重复第二个字母的运算,算来算去,算到最后,怎么组合成最终的注册码的,请大牛花点时间耐心帮小菜分析一下,并写出详细运算过程,小菜感激不尽中。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)