深入探究:Brad Soblesky.2的算法分析
作者:孟翔飞 来源:赛迪论坛 添加时间:2006-5-26 13:16:58比较是否取完004015D8 |. 8B4D E0 |mov ecx,dword ptr ss:[ebp-20]
004015DB |. 51 |push ecx ; /Arg1
004015DC |. 8D4D EC |lea ecx,dword ptr ss:[ebp-14] ; |
004015DF |. E8 1C030000 |call Brad_Sob.00401900 ; \Brad_Sob.00401900
逐个取注册码,并换成16进制数值,现在是rockandtcl所以第一次的话取’r’->72
004015E4 |. 0FBED0 |movsx edx,al
EDX=72
004015E7 |. 8B45 F0 |mov eax,dword ptr ss:[ebp-10]
第一次是装入常数81276345(16进制)放在EAX
004015EA |. 03C2 |add eax,edx
EAX与EDX相加保存在EAX=812763B7
004015EC |. 8945 F0 |mov dword ptr ss:[ebp-10],eax
保存相加的结果
004015EF |. 8B4D E0 |mov ecx,dword ptr ss:[ebp-20]
取位置数,因为是C编写的,根据字符数组的定义,第一个字符是STRING[0],所以这时候ECX=0
004015F2 |. C1E1 08 |shl ecx,8
移位,现在是0,所以移位后还是0,如果是1的话就是100,依此类推
004015F5 |. 8B55 F0 |mov edx,dword ptr ss:[ebp-10]
EDX=812763B7
004015F8 |. 33D1 |xor edx,ecx
异或运算后 保存在EDX
004015FA |. 8955 F0 |mov dword ptr ss:[ebp-10],edx
保存刚才异或运算后的结果 812763B7
004015FD |. 8B45 E0 |mov eax,dword ptr ss:[ebp-20]
取相加的结果 812763B7
00401600 |. 83C0 01 |add eax,1
注册名字符的位置数加1放在EAX,EAX=1
00401603 |. 8B4D E4 |mov ecx,dword ptr ss:[ebp-1C]
00401606 |. 0FAF4D E0 |imul ecx,dword ptr ss:[ebp-20]
注册名字符的位置数与注册名的总长度相乘,放在ECX,第一次的时候位置数为0
所以相乘的结果是0,保存在ECX中
0040160A |. F7D1 |not ecx
非运算 ECX=FFFFFFFF
0040160C |. 0FAFC1 |imul eax,ecx
这时候EAX=FFFFFFFF
0040160F |. 8B55 F0 |mov edx,dword ptr ss:[ebp-10]
取异或的结果 放在EDX。EDX=812763B7
00401612 |. 0FAFD0 |imul edx,eax