-
-
XXX疯狂 For C++算法分析
-
发表于: 2011-1-11 23:14 8058
-
【文章标题】: XXX疯狂 For C++算法分析
【文章作者】: dgrzh
【软件名称】: 某C++的学习视频
【使用工具】: OD
【操作平台】: WinXP
【作者声明】: 只是出于对软件破解的兴趣和对逆向工程的爱好,没有其他目的。失误之处还请高手多多赐教!为了不引起不必要的纠纷所以本帖谢绝转载。
【文章简介】: 本C++学习视频采用天狼星第三代加密系统,在破解过程中加密系统的设计者设计的暗桩使破解工作很繁琐,发了好多时间才分析完注册算法,虽然注册成功,但连接网络,提示本教程开始播放后将断开网络连接,本教程关闭时会恢复连接,要继续吗?确定之后出现错误提示“Cannot change Visible in OnShow or OnHide”,点确定后屏幕一片漆黑还伴有杂音,根本看不到学习视频,不知怎么回事,不知是否注册之后还有网络验证,还请高手多多赐教!本文主要是对XXX疯狂 For C++注册算法的分析。
机器码:5678012345336208055332657158863938205016
以下是关键代码,通过插件--字符串参考--查找ASC--找到“注册成功”字符串来到关键代码处,在段首下断点,重载OD,运行,输入
用户名:dgrzh
假码:111222333444555666777888999111222333444555666777888999111222333444555666777888999111222333444555666777888999111222333444555666777888999
004269E0 . 55 PUSH EBP ; (初始化 cpu 选择状态)
004269E1 . 8BEC MOV EBP,ESP
004269E3 . 81C4 20F5FFFF ADD ESP,-0AE0
004269E9 . 53 PUSH EBX
004269EA . 56 PUSH ESI
004269EB . 57 PUSH EDI
004269EC . 8BF0 MOV ESI,EAX
004269EE . B8 88094C00 MOV EAX,《真正的.004C0988
004269F3 . E8 C0D80600 CALL 《真正的.004942B8
004269F8 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],8 ;
00426A01 . 33D2 XOR EDX,EDX
00426A03 . 33C9 XOR ECX,ECX
00426A05 . 8955 FC MOV DWORD PTR SS:[EBP-4],EDX ;
00426A08 . 33C0 XOR EAX,EAX
00426A0A . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426A10 . 33D2 XOR EDX,EDX
00426A12 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],14
00426A1B . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],20 ;
00426A24 . 894D F8 MOV DWORD PTR SS:[EBP-8],ECX ;
00426A27 . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426A2D . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],14
00426A36 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],2C ;
00426A3F . 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX ;
00426A42 . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426A48 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],14
00426A51 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],38 ;
00426A5A . 8955 F0 MOV DWORD PTR SS:[EBP-10],EDX ;
00426A5D . 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] ;
00426A60 . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426A66 . 8B9E E0020000 MOV EBX,DWORD PTR DS:[ESI+2E0] ;
00426A6C . 8BC3 MOV EAX,EBX ;
00426A6E . E8 49280400 CALL 《真正的.004692BC ;
00426A73 . 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10] ;
00426A76 . 33D2 XOR EDX,EDX
00426A78 . 8955 EC MOV DWORD PTR SS:[EBP-14],EDX ;
00426A7B . 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14] ;
00426A7E . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426A84 . E8 4BB80700 CALL 《真正的.004A22D4 ;
00426A89 . 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14] ;
00426A8C . 8BC3 MOV EAX,EBX ;
00426A8E . 8B12 MOV EDX,DWORD PTR DS:[EDX] ;
00426A90 . E8 57280400 CALL 《真正的.004692EC ;
00426A95 . FF8D 54FFFFFF DEC DWORD PTR SS:[EBP-AC] ;
00426A9B . 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14] ;
00426A9E . BA 02000000 MOV EDX,2 ;
00426AA3 . E8 68B50700 CALL 《真正的.004A2010 ;
00426AA8 . FF8D 54FFFFFF DEC DWORD PTR SS:[EBP-AC] ;
00426AAE . 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10] ;
00426AB1 . BA 02000000 MOV EDX,2 ;
00426AB6 . E8 55B50700 CALL 《真正的.004A2010 ;
00426ABB . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],44 ;
00426AC4 . 33C9 XOR ECX,ECX
00426AC6 . 894D E8 MOV DWORD PTR SS:[EBP-18],ECX ;
00426AC9 . 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18] ;
00426ACC . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426AD2 . 8B86 E0020000 MOV EAX,DWORD PTR DS:[ESI+2E0] ;
00426AD8 . E8 DF270400 CALL 《真正的.004692BC ;
00426ADD . 837D E8 00 CMP DWORD PTR SS:[EBP-18],0 ;
00426AE1 . 74 05 JE SHORT 《真正的.00426AE8
00426AE3 . 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18] ;
00426AE6 . EB 05 JMP SHORT 《真正的.00426AED
00426AE8 > B9 44034C00 MOV ECX,《真正的.004C0344 ;
00426AED > 8BF9 MOV EDI,ECX ;
00426AEF . 33C0 XOR EAX,EAX
00426AF1 . 56 PUSH ESI
00426AF2 . 83C9 FF OR ECX,FFFFFFFF ;
00426AF5 . F2:AE REPNE SCAS BYTE PTR ES:[EDI] ;
00426AF7 . F7D1 NOT ECX ;
00426AF9 . 2BF9 SUB EDI,ECX ;
00426AFB . 8DB5 2CFEFFFF LEA ESI,DWORD PTR SS:[EBP-1D4] ;
00426B01 . 87F7 XCHG EDI,ESI ;
00426B03 . 8BD1 MOV EDX,ECX ;
00426B05 . 8BC7 MOV EAX,EDI ;
00426B07 . C1E9 02 SHR ECX,2 ;
00426B0A . 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18] ;
00426B0D . F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>;
00426B0F . 8BCA MOV ECX,EDX ;
00426B11 . BA 02000000 MOV EDX,2 ;
00426B16 . 83E1 03 AND ECX,3 ;
00426B19 . F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>;
00426B1B . 5E POP ESI ;
00426B1C . FF8D 54FFFFFF DEC DWORD PTR SS:[EBP-AC] ;
00426B22 . E8 E9B40700 CALL 《真正的.004A2010
00426B27 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],50
00426B30 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],5C ;
00426B39 . 8B9E E8020000 MOV EBX,DWORD PTR DS:[ESI+2E8] ;
00426B3F . 33C0 XOR EAX,EAX
00426B41 . 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX ;
00426B44 . 81C3 08020000 ADD EBX,208 ;
00426B4A . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426B50 . 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C] ;
00426B53 . 8B03 MOV EAX,DWORD PTR DS:[EBX] ;
00426B55 . 8B08 MOV ECX,DWORD PTR DS:[EAX] ;
00426B57 . FF51 1C CALL DWORD PTR DS:[ECX+1C] ;
00426B5A . 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C] ;
00426B5D . 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] ;
00426B60 . E8 DBB40700 CALL 《真正的.004A2040 ;
00426B65 . FF8D 54FFFFFF DEC DWORD PTR SS:[EBP-AC] ;
00426B6B . 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C] ;
00426B6E . BA 02000000 MOV EDX,2 ;
00426B73 . E8 98B40700 CALL 《真正的.004A2010 ;
00426B78 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],68 ;
00426B81 . 837D F8 00 CMP DWORD PTR SS:[EBP-8],0 ;
00426B85 . 74 05 JE SHORT 《真正的.00426B8C
00426B87 . 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ;
00426B8A . EB 05 JMP SHORT 《真正的.00426B91
00426B8C > B9 45034C00 MOV ECX,《真正的.004C0345
00426B91 > 51 PUSH ECX ;
00426B92 . 56 PUSH ESI ;
00426B93 . 33C0 XOR EAX,EAX ;
00426B95 . 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] ;
00426B98 . 8945 E0 MOV DWORD PTR SS:[EBP-20],EAX ;
00426B9B . 52 PUSH EDX ;
00426B9C . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426BA2 . E8 D10B0000 CALL 《真正的.00427778 ;
00426BA7 . 83C4 0C ADD ESP,0C
00426BAA . 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20] ;
00426BAD . 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00426BB0 . E8 8BB40700 CALL 《真正的.004A2040
00426BB5 . FF8D 54FFFFFF DEC DWORD PTR SS:[EBP-AC] ;
00426BBB . 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20] ;
00426BBE . BA 02000000 MOV EDX,2
00426BC3 . E8 48B40700 CALL 《真正的.004A2010
00426BC8 . 837D F8 00 CMP DWORD PTR SS:[EBP-8],0
00426BCC . 74 05 JE SHORT 《真正的.00426BD3
00426BCE . 8B7D F8 MOV EDI,DWORD PTR SS:[EBP-8] ;
00426BD1 . EB 05 JMP SHORT 《真正的.00426BD8
00426BD3 > BF 46034C00 MOV EDI,《真正的.004C0346
00426BD8 > 57 PUSH EDI
00426BD9 . E8 DAD30600 CALL 《真正的.00493FB8 ;
00426BDE . 59 POP ECX ;
00426BDF . 8985 34FFFFFF MOV DWORD PTR SS:[EBP-CC],EAX ;
00426BE5 . 8B85 34FFFFFF MOV EAX,DWORD PTR SS:[EBP-CC] ; 假码长度87
00426BEB . 83C0 FB ADD EAX,-5 ; 假码长度87-5等于82
00426BEE . 50 PUSH EAX ; /Arg3
00426BEF . 57 PUSH EDI ; |Arg2 假码
00426BF0 . 56 PUSH ESI ; |Arg1
00426BF1 . E8 220C0000 CALL 《真正的.00427818 ; \这个CALL计算出注册码倒数5位值
00426BF6 . 83C4 0C ADD ESP,0C
00426BF9 . 0FB7D8 MOVZX EBX,AX ; 将上面的CALL计算出EAX值的结果取其AX的值赋给EBX为下面的关键比较做准备,这时的AX的十进制值就是伪注册码倒数5位值,为什么说它是伪注册码倒数5位值,因为随着我们每次确定注册码的值时,都要将假码倒数5位值修改成这里AX的十进制值,才能跳向成功,继续调试,只有都确定了注册码前面82位值时(82位是我这里的假码长度87去掉倒数5位的十六进制长度,当然你的假码长度并不一定要这么长,也可以只要15位(十六进制长度),当然这是后话了),上面的CALL计算出AX的值才是最终的注册码倒数5位值。
00426BFC . 6A 05 PUSH 5 ;
00426BFE . 8B85 34FFFFFF MOV EAX,DWORD PTR SS:[EBP-CC] ;
00426C04 . 03C7 ADD EAX,EDI ;
00426C06 . 83C0 FB ADD EAX,-5 ;
00426C09 . 50 PUSH EAX ;
00426C0A . 8D95 2CF8FFFF LEA EDX,DWORD PTR SS:[EBP-7D4] ;
00426C10 . 52 PUSH EDX ;
00426C11 . E8 FED10600 CALL 《真正的.00493E14 ;
00426C16 . C685 31F8FFFF>MOV BYTE PTR SS:[EBP-7CF],0 ;
00426C1D . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],74 ;
00426C26 . 83C4 0C ADD ESP,0C
00426C29 . 8D95 2CF8FFFF LEA EDX,DWORD PTR SS:[EBP-7D4] ;
00426C2F . 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24] ;
00426C32 . E8 DDB20700 CALL 《真正的.004A1F14 ;
00426C37 . 8BD0 MOV EDX,EAX ;
00426C39 . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426C3F . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00426C42 . E8 F9B30700 CALL 《真正的.004A2040 ;
00426C47 . FF8D 54FFFFFF DEC DWORD PTR SS:[EBP-AC] ;
00426C4D . 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24] ;
00426C50 . BA 02000000 MOV EDX,2 ;
00426C55 . E8 B6B30700 CALL 《真正的.004A2010 ;
00426C5A . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] ;
00426C5D . E8 FAB60700 CALL 《真正的.004A235C ; 这个CALL取假码倒数5位的值转十六进制并将值放入EAX
00426C62 . 3BD8 CMP EBX,EAX ; 这里是第1个关键比较将上面两个CALL计算的值进行比较相等才能跳向注册成功,我们把假码倒数5位暂时改成这里EBX值的十进制值,重载OD,运行,输入新的假码值,跳过下面的注册失败1,继续调试
00426C64 . 0F84 81000000 JE 《真正的.00426CEB
00426C6A . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],80
00426C73 . BA 47034C00 MOV EDX,《真正的.004C0347 ; 注册失败1,注册码不完整,请检查注册码是否已经全部复制或是否已经全部输入
00426C78 . 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
00426C7B . E8 94B20700 CALL 《真正的.004A1F14
00426C80 . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC]
00426C86 . 8B00 MOV EAX,DWORD PTR DS:[EAX]
以下代码省略
..........................................................................................................................................................................................................................................................
跳过注册失败1,我们来到这里
00426CEB > \6A 03 PUSH 3 ;
00426CED . 8B85 34FFFFFF MOV EAX,DWORD PTR SS:[EBP-CC] ;
00426CF3 . 03C7 ADD EAX,EDI ;
00426CF5 . 83C0 F8 ADD EAX,-8 ;
00426CF8 . 50 PUSH EAX ;
00426CF9 . 8D95 2CF8FFFF LEA EDX,DWORD PTR SS:[EBP-7D4] ;
00426CFF . 52 PUSH EDX ;
00426D00 . E8 0FD10600 CALL 《真正的.00493E14 ;
00426D05 . C685 2FF8FFFF>MOV BYTE PTR SS:[EBP-7D1],0 ;
00426D0C . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],8C ;
00426D15 . 83C4 0C ADD ESP,0C
00426D18 . 8D95 2CF8FFFF LEA EDX,DWORD PTR SS:[EBP-7D4] ;
00426D1E . 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C] ;
00426D21 . E8 EEB10700 CALL 《真正的.004A1F14 ;
00426D26 . 8BD0 MOV EDX,EAX ;
00426D28 . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426D2E . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] ;
00426D31 . E8 0AB30700 CALL 《真正的.004A2040 ;
00426D36 . FF8D 54FFFFFF DEC DWORD PTR SS:[EBP-AC]
00426D3C . 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C] ;
00426D3F . BA 02000000 MOV EDX,2
00426D44 . E8 C7B20700 CALL 《真正的.004A2010
00426D49 . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00426D4C . E8 0BB60700 CALL 《真正的.004A235C ; 这里截取假码倒数8-6位十进制值转十六进制
00426D51 . 8BD8 MOV EBX,EAX ; 将结果存放在EBX中
00426D53 . 8D85 2CF8FFFF LEA EAX,DWORD PTR SS:[EBP-7D4] ;
00426D59 . 53 PUSH EBX ;
00426D5A . 57 PUSH EDI ;
00426D5B . 50 PUSH EAX ;
00426D5C . E8 B3D00600 CALL 《真正的.00493E14 ; 从假码开始按EBX中的值取字节
00426D61 . C6841D 2CF8FF>MOV BYTE PTR SS:[EBP+EBX-7D4],0 ;
00426D69 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],98 ;
00426D72 . 83C4 0C ADD ESP,0C ;
00426D75 . 8D95 2CF8FFFF LEA EDX,DWORD PTR SS:[EBP-7D4] ;
00426D7B . 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30] ;
00426D7E . E8 91B10700 CALL 《真正的.004A1F14 ;
00426D83 . 8BD0 MOV EDX,EAX ;
00426D85 . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426D8B . 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00426D8E . E8 ADB20700 CALL 《真正的.004A2040 ;
00426D93 . FF8D 54FFFFFF DEC DWORD PTR SS:[EBP-AC] ;
00426D99 . 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30] ;
00426D9C . BA 02000000 MOV EDX,2
00426DA1 . E8 6AB20700 CALL 《真正的.004A2010
00426DA6 . 8B8D 34FFFFFF MOV ECX,DWORD PTR SS:[EBP-CC] ; 假码长度87
00426DAC . 8D043B LEA EAX,DWORD PTR DS:[EBX+EDI] ; 当按EBX中的值截取字节,这里的值指向截断处后面的字节
00426DAF . 2BCB SUB ECX,EBX ; 假码长度减去假码倒数8-6位十六进制必须等于8
00426DB1 . 8D95 2CF8FFFF LEA EDX,DWORD PTR SS:[EBP-7D4] ; 从假码开始按EBX中的值取字节
00426DB7 . 83C1 F8 ADD ECX,-8 ; 从上面取值到这里是一个暗桩如果这里的减值不等于0,会造成下面的CALL不能正确截取前面7F位假码参与后面的运算,会出错,这里其实是判断注册码倒数8-6位的值应该等于假码去掉后面8位的十进制长度,注册码后8位其实是起着钥匙的作用,只有正确了才能通向注册成功。真正注册成功保存在C:\WINDOWS/ai6aplaydd0.dat里的注册码是去掉后8位的,由于这里我们确定了注册码倒数8-6位的值,所以必须从头来过修改假码倒数8位值通过这两个关口,继续下面的调试
00426DBA . 51 PUSH ECX ;
00426DBB . 50 PUSH EAX ;
00426DBC . 52 PUSH EDX ;
00426DBD . E8 52D00600 CALL 《真正的.00493E14 ;
00426DC2 . 8B8D 34FFFFFF MOV ECX,DWORD PTR SS:[EBP-CC] ;
00426DC8 . 83C4 0C ADD ESP,0C
00426DCB . 2BCB SUB ECX,EBX ;
00426DCD . 8D95 2CF8FFFF LEA EDX,DWORD PTR SS:[EBP-7D4] ;
00426DD3 . 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
00426DD6 . C6840D 24F8FF>MOV BYTE PTR SS:[EBP+ECX-7DC],0 ;
00426DDE . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],0A4 ;
00426DE7 . E8 28B10700 CALL 《真正的.004A1F14
00426DEC . 8BD0 MOV EDX,EAX ;
00426DEE . FF85 54FFFFFF INC DWORD PTR SS:[EBP-AC] ;
00426DF4 . 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
00426DF7 . E8 44B20700 CALL 《真正的.004A2040 ;
00426DFC . FF8D 54FFFFFF DEC DWORD PTR SS:[EBP-AC] ;
00426E02 . 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34] ;
00426E05 . BA 02000000 MOV EDX,2
00426E0A . E8 01B20700 CALL 《真正的.004A2010 ;
00426E0F . 837D F8 00 CMP DWORD PTR SS:[EBP-8],0 ;
00426E13 . 74 05 JE SHORT 《真正的.00426E1A ;
00426E15 . 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8] ;
00426E18 . EB 05 JMP SHORT 《真正的.00426E1F
00426E1A > B9 8D034C00 MOV ECX,《真正的.004C038D ;
以下代码省略
..........................................................................................................................................................................................................................................................
00426F4E . E8 F504FFFF CALL 《真正的.00417448 ; 计算注册码倒数13-9位和倒数16-14位值
00426F53 . 59 POP ECX
00426F54 . 3C 01 CMP AL,1 ; AL必须等于1
00426F56 . 0F85 EA040000 JNZ 《真正的.00427446
00426F5C . 8B0D 68894C00 MOV ECX,DWORD PTR DS:[4C8968] ;
00426F62 . 8B01 MOV EAX,DWORD PTR DS:[ECX]
00426F64 . 50 PUSH EAX ;
00426F65 . E8 2EBEFDFF CALL 《真正的.00402D98 ; 计算注册码前5位值
00426F6A . 59 POP ECX
00426F6B . 3C 01 CMP AL,1 ; AL必须等于1
00426F6D . 0F85 71020000 JNZ 《真正的.004271E4
00426F73 . 66:C785 48FFF>MOV WORD PTR SS:[EBP-B8],0B0
00426F7C . BA 8F034C00 MOV EDX,《真正的.004C038F ; 注册成功
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CALL 《真正的.00427818 进入这个CALL看如何计算注册码倒数5位值
00427818 /$ 55 PUSH EBP
00427819 |. 8BEC MOV EBP,ESP
0042781B |. 56 PUSH ESI
0042781C |. 57 PUSH EDI
0042781D |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
00427820 |. BF 41050000 MOV EDI,541 ;
00427825 |. 33C0 XOR EAX,EAX
00427827 |. 33F6 XOR ESI,ESI
00427829 |. 3B75 10 CMP ESI,DWORD PTR SS:[EBP+10] ;
0042782C |. 7D 2C JGE SHORT 《真正的.0042785A
0042782E |> 8D543E 03 /LEA EDX,DWORD PTR DS:[ESI+EDI+3] ;
00427832 |. 8BFA |MOV EDI,EDX ;
00427834 |. B2 80 |MOV DL,80 ;
00427836 |> F6C4 80 |/TEST AH,80 ;
00427839 |. 74 08 ||JE SHORT 《真正的.00427843
0042783B |. 03C0 ||ADD EAX,EAX ;
0042783D |. 66:35 2110 ||XOR AX,1021 ;
00427841 |. EB 02 ||JMP SHORT 《真正的.00427845
00427843 |> 03C0 ||ADD EAX,EAX ;
00427845 |> 8411 ||TEST BYTE PTR DS:[ECX],DL
00427847 |. 74 04 ||JE SHORT 《真正的.0042784D
00427849 |. 66:35 2110 ||XOR AX,1021 ;
0042784D |> D0EA ||SHR DL,1 ;
0042784F |. 84D2 ||TEST DL,DL
00427851 |.^ 75 E3 |\JNZ SHORT 《真正的.00427836 这个循环每次将EAX值乘2并根据(AH值同80与和每位假码十六进制值同DL与的结果)将AX值同1021异或0-2次,共循环8次
00427853 |. 41 |INC ECX
00427854 |. 46 |INC ESI
00427855 |. 3B75 10 |CMP ESI,DWORD PTR SS:[EBP+10]
00427858 |.^ 7C D4 \JL SHORT 《真正的.0042782E 这个外面循环循环次数等于假码长度减5这里等于87-5=82这里的长度值都是十六进制
0042785A |> 5F POP EDI
0042785B |. 5E POP ESI
0042785C |. 5D POP EBP
0042785D \. C3 RETN
这个CALL就是将假码去掉倒数5位的值,我这里是将前82位假码参与到EAX值的加密计算,并将EAX计算结果取其AX的值赋给EBX为下面的第1个关键比较做准备。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CALL 《真正的.00417448 进入这个CALL看如何计算注册码倒数13-9位和倒数16-14位值
00417448 $ 55 PUSH EBP
00417449 . 8BEC MOV EBP,ESP
0041744B . 83C4 B4 ADD ESP,-4C
0041744E . B8 60CF4B00 MOV EAX,《真正的.004BCF60
00417453 . 53 PUSH EBX
00417454 . 56 PUSH ESI ;
00417455 . 57 PUSH EDI
00417456 . E8 5DCE0700 CALL 《真正的.004942B8
0041745B . 66:C745 E0 08>MOV WORD PTR SS:[EBP-20],8
00417461 . 33D2 XOR EDX,EDX
00417463 . 8955 FC MOV DWORD PTR SS:[EBP-4],EDX
00417466 . FF45 EC INC DWORD PTR SS:[EBP-14]
00417469 . 66:C745 E0 14>MOV WORD PTR SS:[EBP-20],14
0041746F . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] ;
00417472 . 81C1 E5030000 ADD ECX,3E5
00417478 . 51 PUSH ECX
00417479 . E8 3ACB0700 CALL 《真正的.00493FB8 ;
0041747E . 59 POP ECX
0041747F . 8BD8 MOV EBX,EAX
00417481 . 85DB TEST EBX,EBX
00417483 . 75 23 JNZ SHORT 《真正的.004174A8
00417485 . 33C0 XOR EAX,EAX
00417487 . BA 02000000 MOV EDX,2
0041748C . 50 PUSH EAX
0041748D . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00417490 . FF4D EC DEC DWORD PTR SS:[EBP-14]
00417493 . E8 78AB0800 CALL 《真正的.004A2010
00417498 . 58 POP EAX
00417499 . 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30]
0041749C . 64:8915 00000>MOV DWORD PTR FS:[0],EDX
004174A3 . E9 35020000 JMP 《真正的.004176DD
004174A8 > 33C9 XOR ECX,ECX
004174AA . 894D C8 MOV DWORD PTR SS:[EBP-38],ECX ;
004174AD . 33C0 XOR EAX,EAX
004174AF . 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8] ;
004174B2 . 81C2 E5030000 ADD EDX,3E5 ;
004174B8 . EB 09 JMP SHORT 《真正的.004174C3
004174BA > 33C9 XOR ECX,ECX
004174BC . 40 INC EAX
004174BD . 8A0A MOV CL,BYTE PTR DS:[EDX] 去掉倒数8位的假码
004174BF . 014D C8 ADD DWORD PTR SS:[EBP-38],ECX ; [EBP-38]中保存累加和的值
004174C2 . 42 INC EDX ;
004174C3 > 8D4B F8 LEA ECX,DWORD PTR DS:[EBX-8] ; 去掉倒数8位的假码长度减8,即去掉后16位假码的长度
004174C6 . 3BC1 CMP EAX,ECX
004174C8 .^ 7C F0 JL SHORT 《真正的.004174BA 这个循环计算去掉后16位假码值的累加和
004174CA . 8D4D BC LEA ECX,DWORD PTR SS:[EBP-44]
004174CD . 8D43 FB LEA EAX,DWORD PTR DS:[EBX-5] ;
004174D0 . 894D B8 MOV DWORD PTR SS:[EBP-48],ECX
004174D3 . 33D2 XOR EDX,EDX
004174D5 . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
004174D8 . 3BD8 CMP EBX,EAX ;
004174DA . 8DB401 E50300>LEA ESI,DWORD PTR DS:[ECX+EAX+3E5] ;
004174E1 . 7E 11 JLE SHORT 《真正的.004174F4
004174E3 > 8B7D B8 MOV EDI,DWORD PTR SS:[EBP-48]
004174E6 . 8A0E MOV CL,BYTE PTR DS:[ESI] ;
004174E8 . 46 INC ESI ;
004174E9 . 42 INC EDX ;
004174EA . 880F MOV BYTE PTR DS:[EDI],CL ;
004174EC . 40 INC EAX ;
004174ED . FF45 B8 INC DWORD PTR SS:[EBP-48] ;
004174F0 . 3BD8 CMP EBX,EAX ;
004174F2 .^ 7F EF JG SHORT 《真正的.004174E3
004174F4 > C64415 BC 00 MOV BYTE PTR SS:[EBP+EDX-44],0 ;
004174F9 . 66:C745 E0 20>MOV WORD PTR SS:[EBP-20],20
004174FF . 8D55 BC LEA EDX,DWORD PTR SS:[EBP-44] ;
00417502 . 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00417505 . E8 0AAA0800 CALL 《真正的.004A1F14
0041750A . 8BD0 MOV EDX,EAX
0041750C . FF45 EC INC DWORD PTR SS:[EBP-14] ;
0041750F . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00417512 . E8 29AB0800 CALL 《真正的.004A2040
00417517 . FF4D EC DEC DWORD PTR SS:[EBP-14]
0041751A . 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
0041751D . BA 02000000 MOV EDX,2
00417522 . E8 E9AA0800 CALL 《真正的.004A2010
00417527 . 66:C745 E0 2C>MOV WORD PTR SS:[EBP-20],2C
0041752D . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00417530 . E8 27AE0800 CALL 《真正的.004A235C 这里截取假码倒数13-9位十进制值转十六进制,将结果存放在EAX中。
00417535 . 3B45 C8 CMP EAX,DWORD PTR SS:[EBP-38] ; 将EAX的值同[EBP-38]中的值比较必须相等,这里其实是判断注册码倒数13-9位十进制值等于去掉后16位假码值的累加和的十进制值,由于这里确定了注册码倒数13-9位值,所以必须从头来过修改假码倒数13位值通过这第三个关口,继续下面的调试
00417538 . 74 23 JE SHORT 《真正的.0041755D
0041753A . 33C0 XOR EAX,EAX
0041753C . BA 02000000 MOV EDX,2
00417541 . 50 PUSH EAX
00417542 . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00417545 . FF4D EC DEC DWORD PTR SS:[EBP-14]
00417548 . E8 C3AA0800 CALL 《真正的.004A2010
0041754D . 58 POP EAX
0041754E . 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30]
00417551 . 64:8915 00000>MOV DWORD PTR FS:[0],EDX
00417558 . E9 80010000 JMP 《真正的.004176DD
0041755D > 66:C745 E0 14>MOV WORD PTR SS:[EBP-20],14
00417563 . EB 35 JMP SHORT 《真正的.0041759A
00417565 . 33C0 XOR EAX,EAX
00417567 . BA 02000000 MOV EDX,2
0041756C . 50 PUSH EAX
0041756D . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00417570 . FF4D EC DEC DWORD PTR SS:[EBP-14]
00417573 . E8 98AA0800 CALL 《真正的.004A2010
00417578 . 58 POP EAX
00417579 . 50 PUSH EAX
0041757A . 33D2 XOR EDX,EDX
0041757C . 8955 EC MOV DWORD PTR SS:[EBP-14],EDX
0041757F . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
00417582 . 51 PUSH ECX
00417583 . E8 3B810800 CALL 《真正的.0049F6C3
00417588 . 59 POP ECX
00417589 . 58 POP EAX
0041758A . E9 4E010000 JMP 《真正的.004176DD
0041758F . 66:C745 E0 34>MOV WORD PTR SS:[EBP-20],34
00417595 . E8 747A0800 CALL 《真正的.0049F00E
0041759A > 33D2 XOR EDX,EDX
0041759C . 33C0 XOR EAX,EAX
0041759E . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
004175A1 . 8DB1 E5030000 LEA ESI,DWORD PTR DS:[ECX+3E5] ;
004175A7 . EB 04 JMP SHORT 《真正的.004175AD
004175A9 > 3216 XOR DL,BYTE PTR DS:[ESI] ; [ESI]中是去掉倒数8位的假码
004175AB . 40 INC EAX
004175AC . 46 INC ESI
004175AD > 8D4B F8 LEA ECX,DWORD PTR DS:[EBX-8]
004175B0 . 3BC1 CMP EAX,ECX ECX存储去掉倒数16位的假码长度
004175B2 .^ 7C F5 JL SHORT 《真正的.004175A9 这个循环将去掉后16位假码值逐个异或,将结果赋值给DL
004175B4 . 33C0 XOR EAX,EAX
004175B6 . 8D4D BC LEA ECX,DWORD PTR SS:[EBP-44] ;
004175B9 . 8AC2 MOV AL,DL ; DL值赋值给AL
004175BB . 33D2 XOR EDX,EDX
004175BD . 8945 CC MOV DWORD PTR SS:[EBP-34],EAX ; EAX又将值赋值给[EBP-34]
004175C0 . 894D B4 MOV DWORD PTR SS:[EBP-4C],ECX ;
004175C3 . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] ;
004175C6 . 8D43 F8 LEA EAX,DWORD PTR DS:[EBX-8] ;
004175C9 . 8DB401 E50300>LEA ESI,DWORD PTR DS:[ECX+EAX+3E5] ;
004175D0 . EB 0D JMP SHORT 《真正的.004175DF
004175D2 > 8B7D B4 MOV EDI,DWORD PTR SS:[EBP-4C]
004175D5 . 8A0E MOV CL,BYTE PTR DS:[ESI]
004175D7 . 42 INC EDX
004175D8 . 40 INC EAX
004175D9 . 880F MOV BYTE PTR DS:[EDI],CL
004175DB . FF45 B4 INC DWORD PTR SS:[EBP-4C]
004175DE . 46 INC ESI
004175DF > 8D4B FB LEA ECX,DWORD PTR DS:[EBX-5] ;
004175E2 . 3BC1 CMP EAX,ECX ;
004175E4 .^ 7C EC JL SHORT 《真正的.004175D2
004175E6 . C64415 BC 00 MOV BYTE PTR SS:[EBP+EDX-44],0 ;
004175EB . 66:C745 E0 38>MOV WORD PTR SS:[EBP-20],38 ;
004175F1 . 8D55 BC LEA EDX,DWORD PTR SS:[EBP-44] ;
004175F4 . 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C] ;
004175F7 . E8 18A90800 CALL 《真正的.004A1F14
004175FC . 8BD0 MOV EDX,EAX ;
004175FE . FF45 EC INC DWORD PTR SS:[EBP-14] ;
00417601 . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] ;
00417604 . E8 37AA0800 CALL 《真正的.004A2040
00417609 . FF4D EC DEC DWORD PTR SS:[EBP-14] ;
0041760C . 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C] ;
0041760F . BA 02000000 MOV EDX,2
00417614 . E8 F7A90800 CALL 《真正的.004A2010
00417619 . 66:C745 E0 44>MOV WORD PTR SS:[EBP-20],44 ;
0041761F . 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] ;
00417622 . 81C1 D0030000 ADD ECX,3D0 ;
00417628 . 51 PUSH ECX ;
00417629 . 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ;
0041762C . 50 PUSH EAX ;
0041762D . E8 6E6F0000 CALL 《真正的.0041E5A0 ;
00417632 . 33D2 XOR EDX,EDX EDX等于0
00417634 . 83C4 08 ADD ESP,8
00417637 . 8AD0 MOV DL,AL ;
00417639 . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] ;
0041763C . 8BCA MOV ECX,EDX ; ECX等于0
0041763E . C1E1 06 SHL ECX,6
00417641 . 2BCA SUB ECX,EDX
00417643 . C1E1 02 SHL ECX,2
00417646 . 2BCA SUB ECX,EDX
00417648 . C1E1 03 SHL ECX,3
0041764B . 014D CC ADD DWORD PTR SS:[EBP-34],ECX ; [EBP-34]的值加0
0041764E . E8 09AD0800 CALL 《真正的.004A235C ; 这里截取假码倒数16-14位值转十六进制,将结果存放在EAX中。
00417653 . 3B45 CC CMP EAX,DWORD PTR SS:[EBP-34] ; 将EAX的值同[EBP-34]中的值比较必须相等,这里其实是判断注册码倒数16-14位十进制值等于去掉后16位假码值逐个异或结果的十进制值,由于这里确定了注册码倒数16-14位值,所以必须从头来过修改假码倒数16位值通过这第四个关口,继续下面的调试
00417656 . 74 20 JE SHORT 《真正的.00417678
00417658 . 33C0 XOR EAX,EAX
0041765A . BA 02000000 MOV EDX,2
0041765F . 50 PUSH EAX
00417660 . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
00417663 . FF4D EC DEC DWORD PTR SS:[EBP-14]
00417666 . E8 A5A90800 CALL 《真正的.004A2010
0041766B . 58 POP EAX
0041766C . 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30]
0041766F . 64:8915 00000>MOV DWORD PTR FS:[0],EDX
00417676 . EB 65 JMP SHORT 《真正的.004176DD
00417678 > 66:C745 E0 14>MOV WORD PTR SS:[EBP-20],14 ;
0041767E . EB 32 JMP SHORT 《真正的.004176B2
00417680 . 33C0 XOR EAX,EAX
00417682 . BA 02000000 MOV EDX,2
00417687 . 50 PUSH EAX
00417688 . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0041768B . FF4D EC DEC DWORD PTR SS:[EBP-14]
0041768E . E8 7DA90800 CALL 《真正的.004A2010
00417693 . 58 POP EAX
00417694 . 50 PUSH EAX
00417695 . 33D2 XOR EDX,EDX
00417697 . 8955 EC MOV DWORD PTR SS:[EBP-14],EDX
0041769A . 8D4D D0 LEA ECX,DWORD PTR SS:[EBP-30]
0041769D . 51 PUSH ECX
0041769E . E8 20800800 CALL 《真正的.0049F6C3
004176A3 . 59 POP ECX
004176A4 . 58 POP EAX
004176A5 . EB 36 JMP SHORT 《真正的.004176DD
004176A7 . 66:C745 E0 4C>MOV WORD PTR SS:[EBP-20],4C
004176AD . E8 5C790800 CALL 《真正的.0049F00E
004176B2 > 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
004176B5 . B0 01 MOV AL,1 ; 来到这里AL=1,
004176B7 . C782 A8030000>MOV DWORD PTR DS:[EDX+3A8],1
004176C1 . 50 PUSH EAX
004176C2 . 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] ;
004176C5 . FF4D EC DEC DWORD PTR SS:[EBP-14] ;
004176C8 . BA 02000000 MOV EDX,2
004176CD . E8 3EA90800 CALL 《真正的.004A2010
004176D2 . 58 POP EAX ;
004176D3 . 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30]
004176D6 . 64:8915 00000>MOV DWORD PTR FS:[0],EDX
004176DD > 5F POP EDI
004176DE . 5E POP ESI
004176DF . 5B POP EBX
004176E0 . 8BE5 MOV ESP,EBP
004176E2 . 5D POP EBP
004176E3 . C3 RETN 到这里这个CALL成功返回AL=1,顺利进入下面的CALL
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CALL 《真正的.00402D98 进入这个CALL看如何计算注册码前5位值
00402DA8 /$ 55 PUSH EBP
00402DA9 |. 8BEC MOV EBP,ESP
00402DAB |. 81C4 28FDFFFF ADD ESP,-2D8 ;
00402DB1 |. B8 1CC34B00 MOV EAX,《真正的.004BC31C
00402DB6 |. 53 PUSH EBX
00402DB7 |. 56 PUSH ESI
00402DB8 |. 57 PUSH EDI
00402DB9 |. 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
00402DBC |. E8 F7140900 CALL 《真正的.004942B8
00402DC1 |. 66:C745 E4 08>MOV WORD PTR SS:[EBP-1C],8 ;
00402DC7 |. 33D2 XOR EDX,EDX
00402DC9 |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX ;
00402DCC |. FF45 F0 INC DWORD PTR SS:[EBP-10] ;
00402DCF |. 66:C745 E4 14>MOV WORD PTR SS:[EBP-1C],14 ;
00402DD5 |. 0FBE8E E50300>MOVSX ECX,BYTE PTR DS:[ESI+3E5] ;
00402DDC |. 894D C4 MOV DWORD PTR SS:[EBP-3C],ECX ;
00402DDF |. 0FBE86 E60300>MOVSX EAX,BYTE PTR DS:[ESI+3E6] ;
00402DE6 |. 8945 C0 MOV DWORD PTR SS:[EBP-40],EAX ;
00402DE9 |. 0FBEBE E70300>MOVSX EDI,BYTE PTR DS:[ESI+3E7] ;
00402DF0 |. 0FBE86 E80300>MOVSX EAX,BYTE PTR DS:[ESI+3E8] ;
00402DF7 |. 8945 BC MOV DWORD PTR SS:[EBP-44],EAX ;
00402DFA |. 0FBE96 E90300>MOVSX EDX,BYTE PTR DS:[ESI+3E9] ;
00402E01 |. 8955 B8 MOV DWORD PTR SS:[EBP-48],EDX ;
00402E04 |. 0FBE8E EB0300>MOVSX ECX,BYTE PTR DS:[ESI+3EB] ;
00402E0B |. 894D B4 MOV DWORD PTR SS:[EBP-4C],ECX ;
00402E0E |. 8B45 C4 MOV EAX,DWORD PTR SS:[EBP-3C] ;
00402E11 |. 8B55 B4 MOV EDX,DWORD PTR SS:[EBP-4C] ;
00402E14 |. 0345 C0 ADD EAX,DWORD PTR SS:[EBP-40] ;
00402E17 |. 03C7 ADD EAX,EDI ;
00402E19 |. 0345 BC ADD EAX,DWORD PTR SS:[EBP-44]
00402E1C |. 0345 B8 ADD EAX,DWORD PTR SS:[EBP-48] ;
00402E1F |. C1E2 03 SHL EDX,3 ;
00402E22 |. 03C2 ADD EAX,EDX ;
00402E24 |. 33DB XOR EBX,EBX
00402E26 |. 8945 B0 MOV DWORD PTR SS:[EBP-50],EAX ;
00402E29 |> 8D04DB /LEA EAX,DWORD PTR DS:[EBX+EBX*8]
00402E2C |. B9 5A000000 |MOV ECX,5A
00402E31 |. 99 |CDQ
00402E32 |. F77D C0 |IDIV DWORD PTR SS:[EBP-40] ;
00402E35 |. 0155 B0 |ADD DWORD PTR SS:[EBP-50],EDX ;
00402E38 |. 8BC3 |MOV EAX,EBX
00402E3A |. 99 |CDQ
00402E3B |. F7F9 |IDIV ECX ;
00402E3D |. 8A45 B0 |MOV AL,BYTE PTR SS:[EBP-50] ;
00402E40 |. 81FB 3F1F0000 |CMP EBX,1F3F
00402E46 |. 888415 30FDFF>|MOV BYTE PTR SS:[EBP+EDX-2D0],AL ;
00402E4D |. 75 2A |JNZ SHORT 《真正的.00402E79 ;
00402E4F |. DB45 C4 |FILD DWORD PTR SS:[EBP-3C]
00402E52 |. DC0D 0C344000 |FMUL QWORD PTR DS:[40340C]
00402E58 |. 8B45 B0 |MOV EAX,DWORD PTR SS:[EBP-50] ;
00402E5B |. B9 64000000 |MOV ECX,64
00402E60 |. 99 |CDQ
00402E61 |. F7F9 |IDIV ECX
00402E63 |. 8985 2CFDFFFF |MOV DWORD PTR SS:[EBP-2D4],EAX
00402E69 |. DB85 2CFDFFFF |FILD DWORD PTR SS:[EBP-2D4]
00402E6F |. DEC1 |FADDP ST(1),ST
00402E71 |. E8 1E810900 |CALL 《真正的.0049AF94 ;
00402E76 |. 8945 B8 |MOV DWORD PTR SS:[EBP-48],EAX ;
00402E79 |> 0FBE96 E70300>|MOVSX EDX,BYTE PTR DS:[ESI+3E7] ;
00402E80 |. 8D0C92 |LEA ECX,DWORD PTR DS:[EDX+EDX*4] ;
00402E83 |. 8D0C4A |LEA ECX,DWORD PTR DS:[EDX+ECX*2] ;
00402E86 |. 81C1 70110100 |ADD ECX,11170 ;
00402E8C |. 3BD9 |CMP EBX,ECX
00402E8E |. 75 4B |JNZ SHORT 《真正的.00402EDB ;
00402E90 |. DB45 C4 |FILD DWORD PTR SS:[EBP-3C]
00402E93 |. DC0D 0C344000 |FMUL QWORD PTR DS:[40340C]
00402E99 |. 8B45 B0 |MOV EAX,DWORD PTR SS:[EBP-50] ;
00402E9C |. B9 64000000 |MOV ECX,64
00402EA1 |. 99 |CDQ
00402EA2 |. F7F9 |IDIV ECX
00402EA4 |. 8985 2CFDFFFF |MOV DWORD PTR SS:[EBP-2D4],EAX
00402EAA |. DB85 2CFDFFFF |FILD DWORD PTR SS:[EBP-2D4]
00402EB0 |. DEC1 |FADDP ST(1),ST
00402EB2 |. D825 14344000 |FSUB DWORD PTR DS:[403414]
00402EB8 |. 0FBE86 E70300>|MOVSX EAX,BYTE PTR DS:[ESI+3E7] ;
00402EBF |. 8D1480 |LEA EDX,DWORD PTR DS:[EAX+EAX*4] ;
00402EC2 |. 8D1450 |LEA EDX,DWORD PTR DS:[EAX+EDX*2] ;
00402EC5 |. 8995 28FDFFFF |MOV DWORD PTR SS:[EBP-2D8],EDX
00402ECB |. DB85 28FDFFFF |FILD DWORD PTR SS:[EBP-2D8]
00402ED1 |. DEC1 |FADDP ST(1),ST
00402ED3 |. E8 BC800900 |CALL 《真正的.0049AF94 ;
00402ED8 |. 8945 BC |MOV DWORD PTR SS:[EBP-44],EAX ;
00402EDB |> 0FBE96 E70300>|MOVSX EDX,BYTE PTR DS:[ESI+3E7] ;
00402EE2 |. 8D0C92 |LEA ECX,DWORD PTR DS:[EDX+EDX*4] ;
00402EE5 |. 8D0C4A |LEA ECX,DWORD PTR DS:[EDX+ECX*2] ;
00402EE8 |. B8 80380100 |MOV EAX,13880 ;
00402EED |. 2BC1 |SUB EAX,ECX
00402EEF |. 3BD8 |CMP EBX,EAX
00402EF1 |. 75 21 |JNZ SHORT 《真正的.00402F14
00402EF3 |. 33D2 |XOR EDX,EDX EDX=0
00402EF5 |. 33C9 |XOR ECX,ECX
00402EF7 |. 8955 CC |MOV DWORD PTR SS:[EBP-34],EDX [EBP-34]=EDX=0
00402EFA |. 8D86 D0030000 |LEA EAX,DWORD PTR DS:[ESI+3D0]
00402F00 |> 33D2 |/XOR EDX,EDX
00402F02 |. 41 ||INC ECX
00402F03 |. 8A10 ||MOV DL,BYTE PTR DS:[EAX] [EAX]存储用户名
00402F05 |. 40 ||INC EAX
00402F06 |. 69D2 C2000000 ||IMUL EDX,EDX,0C2 用户名逐个乘以C2
00402F0C |. 0155 CC ||ADD DWORD PTR SS:[EBP-34],EDX ; 将上面乘的结果累加起来存储在[EBP-34]中
00402F0F |. 83F9 14 ||CMP ECX,14
00402F12 |.^ 7C EC |\JL SHORT 《真正的.00402F00 这个循环将用户名逐个乘以C2,将结果累加起来存储在[EBP-34]中,我这里的结果是19B7E
00402F14 |> 8D43 64 |LEA EAX,DWORD PTR DS:[EBX+64]
00402F17 |. B9 03000000 |MOV ECX,3
00402F1C |. 99 |CDQ
00402F1D |. F7F9 |IDIV ECX ;
00402F1F |. 8B55 B0 |MOV EDX,DWORD PTR SS:[EBP-50] ;
00402F22 |. 43 |INC EBX
00402F23 |. 2BD0 |SUB EDX,EAX ;
00402F25 |. 81FB A0860100 |CMP EBX,186A0
00402F2B |. 8955 B4 |MOV DWORD PTR SS:[EBP-4C],EDX ;
00402F2E |.^ 0F8C F5FEFFFF \JL 《真正的.00402E29
00402F34 |. 8B45 C0 MOV EAX,DWORD PTR SS:[EBP-40] ;
00402F37 |. C1E0 03 SHL EAX,3 ;
00402F3A |. 8BCF MOV ECX,EDI ;
00402F3C |. C1E1 02 SHL ECX,2 ;
00402F3F |. 03C1 ADD EAX,ECX ;
00402F41 |. 8985 2CFDFFFF MOV DWORD PTR SS:[EBP-2D4],EAX ;
00402F47 |. DB85 2CFDFFFF FILD DWORD PTR SS:[EBP-2D4]
00402F4D |. DB45 B4 FILD DWORD PTR SS:[EBP-4C] ;
00402F50 |. DC0D 18344000 FMUL QWORD PTR DS:[403418] ;
00402F56 |. DEC1 FADDP ST(1),ST
00402F58 |. E8 37800900 CALL 《真正的.0049AF94
00402F5D |. 8945 C4 MOV DWORD PTR SS:[EBP-3C],EAX ;
00402F60 |. 8B45 B4 MOV EAX,DWORD PTR SS:[EBP-4C] ;
00402F63 |. 8B55 BC MOV EDX,DWORD PTR SS:[EBP-44] ;
00402F66 |. C1E2 02 SHL EDX,2 ;
00402F69 |. C1E7 03 SHL EDI,3 ;
00402F6C |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2] ;
00402F6F |. 03FA ADD EDI,EDX ;
00402F71 |. 03F8 ADD EDI,EAX ;
00402F73 |. 897D C0 MOV DWORD PTR SS:[EBP-40],EDI ;
00402F76 |. 8B7D BC MOV EDI,DWORD PTR SS:[EBP-44] ;
00402F79 |. 8B55 B8 MOV EDX,DWORD PTR SS:[EBP-48] ;
00402F7C |. C1E2 02 SHL EDX,2 ;
00402F7F |. 8B4D B8 MOV ECX,DWORD PTR SS:[EBP-48] ;
00402F82 |. C1E7 03 SHL EDI,3 ;
00402F85 |. 03FA ADD EDI,EDX ;
00402F87 |. 8B55 B4 MOV EDX,DWORD PTR SS:[EBP-4C] ;
00402F8A |. C1E2 02 SHL EDX,2 ;
00402F8D |. 03F8 ADD EDI,EAX ;
00402F8F |. C1E1 03 SHL ECX,3 ;
00402F92 |. 03CA ADD ECX,EDX ;
00402F94 |. 03C8 ADD ECX,EAX ;
00402F96 |. 894D BC MOV DWORD PTR SS:[EBP-44],ECX ;
00402F99 |. 8B4D B4 MOV ECX,DWORD PTR SS:[EBP-4C] ;
00402F9C |. 8B55 C0 MOV EDX,DWORD PTR SS:[EBP-40] ;
00402F9F |. C1E2 02 SHL EDX,2 ;
00402FA2 |. C1E1 03 SHL ECX,3 ;
00402FA5 |. 03CA ADD ECX,EDX ;
00402FA7 |. 8BD7 MOV EDX,EDI ;
00402FA9 |. 03C8 ADD ECX,EAX ;
00402FAB |. 894D B8 MOV DWORD PTR SS:[EBP-48],ECX ;
00402FAE |. 8B4D C4 MOV ECX,DWORD PTR SS:[EBP-3C] ;
00402FB1 |. C1E2 02 SHL EDX,2 ;
00402FB4 |. C1E1 03 SHL ECX,3 ;
00402FB7 |. 03CA ADD ECX,EDX
00402FB9 |. 03C8 ADD ECX,EAX ;
00402FBB |. 894D B4 MOV DWORD PTR SS:[EBP-4C],ECX ;
00402FBE |. 8D8D A8FEFFFF LEA ECX,DWORD PTR SS:[EBP-158] ;
00402FC4 |. 8B45 CC MOV EAX,DWORD PTR SS:[EBP-34] ;
00402FC7 |. 50 PUSH EAX ;
00402FC8 |. 68 459B4B00 PUSH 《真正的.004B9B45 ;
00402FCD |. 51 PUSH ECX ;
00402FCE |. E8 21460900 CALL 《真正的.004975F4 ;
00402FD3 |. 83C4 0C ADD ESP,0C
00402FD6 |. 8D86 E5050000 LEA EAX,DWORD PTR DS:[ESI+5E5] ;
00402FDC |. 56 PUSH ESI
00402FDD |. 57 PUSH EDI
00402FDE |. 8BF8 MOV EDI,EAX ;
00402FE0 |. 33C0 XOR EAX,EAX
00402FE2 |. 83C9 FF OR ECX,FFFFFFFF ;
00402FE5 |. 8DB5 A8FDFFFF LEA ESI,DWORD PTR SS:[EBP-258]
00402FEB |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00402FED |. F7D1 NOT ECX ;
00402FEF |. 2BF9 SUB EDI,ECX ;
00402FF1 |. 8BD1 MOV EDX,ECX ;
00402FF3 |. 87F7 XCHG EDI,ESI ;
00402FF5 |. C1E9 02 SHR ECX,2 ;
00402FF8 |. 8BC7 MOV EAX,EDI ;
00402FFA |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>;
00402FFC |. 8BCA MOV ECX,EDX ;
00402FFE |. 8D85 A8FDFFFF LEA EAX,DWORD PTR SS:[EBP-258] ;
00403004 |. 83E1 03 AND ECX,3 ;
00403007 |. F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
00403009 |. 5F POP EDI
0040300A |. 5E POP ESI
0040300B |. 50 PUSH EAX ;
0040300C |. 56 PUSH ESI ;
0040300D |. E8 06B90100 CALL 《真正的.0041E918 ;
00403012 |. 83C4 08 ADD ESP,8 ;
00403015 |. 8D95 A8FEFFFF LEA EDX,DWORD PTR SS:[EBP-158] ;
0040301B |. 52 PUSH EDX ;
0040301C |. 8D8D A8FDFFFF LEA ECX,DWORD PTR SS:[EBP-258] ;
00403022 |. 51 PUSH ECX ;
00403023 |. E8 000F0900 CALL 《真正的.00493F28 ; 这个CALL将机器码前20位同[EBP-34]中的十进制值连接起来存储在EAX中,数值为(56780123453362080553105342)
00403028 |. 83C4 08 ADD ESP,8 ;
0040302B |. 33C9 XOR ECX,ECX ;
0040302D |. 8D9D A8FDFFFF LEA EBX,DWORD PTR SS:[EBP-258] ; [EBP-258]里存储的值为(56780123453362080553105342)
00403033 |> 8B45 CC /MOV EAX,DWORD PTR SS:[EBP-34] ;
00403036 |. 51 |PUSH ECX
00403037 |. 99 |CDQ
00403038 |. B9 64000000 |MOV ECX,64
0040303D |. F7F9 |IDIV ECX ;
0040303F |. 59 |POP ECX ;
00403040 |. 8D51 64 |LEA EDX,DWORD PTR DS:[ECX+64] ;
00403043 |. 41 |INC ECX ;
00403044 |. F7EA |IMUL EDX ;
00403046 |. 0FBE13 |MOVSX EDX,BYTE PTR DS:[EBX] ;
00403049 |. 0345 C4 |ADD EAX,DWORD PTR SS:[EBP-3C] ;
0040304C |. 43 |INC EBX
0040304D |. 03C2 |ADD EAX,EDX ;
0040304F |. 83F9 14 |CMP ECX,14
00403052 |. 8945 C4 |MOV DWORD PTR SS:[EBP-3C],EAX ;
00403055 |.^ 7C DC \JL SHORT 《真正的.00403033
00403057 |. 8D85 94FDFFFF LEA EAX,DWORD PTR SS:[EBP-26C] ;
0040305D |. 50 PUSH EAX ;
0040305E |. 8D8E E5030000 LEA ECX,DWORD PTR DS:[ESI+3E5] ;
00403064 |. 51 PUSH ECX ;
00403065 |. E8 EAFCFFFF CALL 《真正的.00402D54 ; 用MD5循环加密去掉倒数8位的假码
0040306A |. 83C4 08 ADD ESP,8
0040306D |. 68 00010000 PUSH 100 ;
00403072 |. E8 09060900 CALL 《真正的.00493680 ;
00403077 |. 59 POP ECX
00403078 |. 8945 C8 MOV DWORD PTR SS:[EBP-38],EAX
0040307B |. 8B45 C8 MOV EAX,DWORD PTR SS:[EBP-38] ;
0040307E |. 56 PUSH ESI
0040307F |. 8BF0 MOV ESI,EAX ;
00403081 |. 57 PUSH EDI
00403082 |. 33C0 XOR EAX,EAX ;
00403084 |. 8DBD A8FDFFFF LEA EDI,DWORD PTR SS:[EBP-258] ;
0040308A |. 83C9 FF OR ECX,FFFFFFFF
0040308D |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0040308F |. F7D1 NOT ECX ;
00403091 |. 2BF9 SUB EDI,ECX ;
00403093 |. 8BD1 MOV EDX,ECX ;
00403095 |. 87F7 XCHG EDI,ESI ;
00403097 |. C1E9 02 SHR ECX,2
0040309A |. 8BC7 MOV EAX,EDI
0040309C |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
0040309E |. 8BCA MOV ECX,EDX
004030A0 |. 8D95 A8FDFFFF LEA EDX,DWORD PTR SS:[EBP-258]
004030A6 |. 83E1 03 AND ECX,3
004030A9 |. F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
004030AB |. 5F POP EDI
004030AC |. 5E POP ESI
004030AD |. 8B45 C8 MOV EAX,DWORD PTR SS:[EBP-38] ;
004030B0 |. 8986 10190000 MOV DWORD PTR DS:[ESI+1910],EAX
004030B6 |. 52 PUSH EDX
004030B7 |. E8 FC0E0900 CALL 《真正的.00493FB8 ; 计算上面数字长度为1A
004030BC |. 59 POP ECX
004030BD |. 8945 D0 MOV DWORD PTR SS:[EBP-30],EAX ; [EBP-30]=1A
004030C0 |. 8D85 A8FDFFFF LEA EAX,DWORD PTR SS:[EBP-258] ;
004030C6 |. 33C9 XOR ECX,ECX ;
004030C8 |. 8945 AC MOV DWORD PTR SS:[EBP-54],EAX ;
004030CB |. 33DB XOR EBX,EBX ;
004030CD |. 3B4D D0 CMP ECX,DWORD PTR SS:[EBP-30] ;
004030D0 |. 7D 17 JGE SHORT 《真正的.004030E9
004030D2 |> 8B55 AC /MOV EDX,DWORD PTR SS:[EBP-54] ; [EBP-54]里存储的值为(56780123453362080553105342)
004030D5 |. 33C0 |XOR EAX,EAX ; 0
004030D7 |. 8A02 |MOV AL,BYTE PTR DS:[EDX] ;
004030D9 |. 8D51 01 |LEA EDX,DWORD PTR DS:[ECX+1] ;
004030DC |. F7EA |IMUL EDX ;
004030DE |. 03D8 |ADD EBX,EAX ;
004030E0 |. 41 |INC ECX ;
004030E1 |. FF45 AC |INC DWORD PTR SS:[EBP-54]
004030E4 |. 3B4D D0 |CMP ECX,DWORD PTR SS:[EBP-30] ; 循环1A次
004030E7 |.^ 7C E9 \JL SHORT 《真正的.004030D2 ; 这个循环将[EBP-54]里的ASCII值逐一取出乘以自身所在位置数,并将结果累加起来放入EBX中,这里结果值为4624
004030E9 |> 33C9 XOR ECX,ECX ;
004030EB |> 8B86 A4030000 /MOV EAX,DWORD PTR DS:[ESI+3A4] ;
004030F1 |. F7E9 |IMUL ECX
004030F3 |. 03F8 |ADD EDI,EAX
004030F5 |. 41 |INC ECX
004030F6 |. 83F9 14 |CMP ECX,14
004030F9 |.^ 7C F0 \JL SHORT 《真正的.004030EB ;
004030FB |. 8B96 A4030000 MOV EDX,DWORD PTR DS:[ESI+3A4] ;
00403101 |. 8A86 E5030000 MOV AL,BYTE PTR DS:[ESI+3E5] ;
00403107 |. 8BCA MOV ECX,EDX ;
00403109 |. 8885 A8FEFFFF MOV BYTE PTR SS:[EBP-158],AL ;
0040310F |. 8D1451 LEA EDX,DWORD PTR DS:[ECX+EDX*2] ;
00403112 |. C1E2 04 SHL EDX,4 ;
00403115 |. 03D1 ADD EDX,ECX ;
00403117 |. 8D1451 LEA EDX,DWORD PTR DS:[ECX+EDX*2] ;
0040311A |. 03DA ADD EBX,EDX ;
0040311C |. 8A96 E6030000 MOV DL,BYTE PTR DS:[ESI+3E6] ;
00403122 |. 8895 A9FEFFFF MOV BYTE PTR SS:[EBP-157],DL ;
00403128 |. 8A8E E7030000 MOV CL,BYTE PTR DS:[ESI+3E7] ;
0040312E |. 888D AAFEFFFF MOV BYTE PTR SS:[EBP-156],CL ;
00403134 |. 8A86 E8030000 MOV AL,BYTE PTR DS:[ESI+3E8] ;
0040313A |. 8885 ABFEFFFF MOV BYTE PTR SS:[EBP-155],AL ;
00403140 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] ;
00403143 |. 8A96 E9030000 MOV DL,BYTE PTR DS:[ESI+3E9] ;
00403149 |. 8895 ACFEFFFF MOV BYTE PTR SS:[EBP-154],DL ;
0040314F |. 8D95 A8FEFFFF LEA EDX,DWORD PTR SS:[EBP-158] ;
00403155 |. C685 ADFEFFFF>MOV BYTE PTR SS:[EBP-153],0 ;
0040315C |. 66:C745 E4 20>MOV WORD PTR SS:[EBP-1C],20 ;
00403162 |. E8 ADED0900 CALL 《真正的.004A1F14
00403167 |. 8BD0 MOV EDX,EAX
00403169 |. FF45 F0 INC DWORD PTR SS:[EBP-10]
0040316C |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
0040316F |. E8 CCEE0900 CALL 《真正的.004A2040
00403174 |. FF4D F0 DEC DWORD PTR SS:[EBP-10]
00403177 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
0040317A |. BA 02000000 MOV EDX,2
0040317F |. E8 8CEE0900 CALL 《真正的.004A2010
00403184 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] ;
00403187 |. E8 D0F10900 CALL 《真正的.004A235C 这里截取假码前5位值转十六进制
0040318C |. 8BC8 MOV ECX,EAX ;
0040318E |. 2BCB SUB ECX,EBX ; 这里判断注册码前5位的十六进制值必须小于等于4624
00403190 |. 85C9 TEST ECX,ECX ;
00403192 |. /7E 4D JLE SHORT 《真正的.004031E1 这里要跳
00403194 |. 83F9 07 CMP ECX,7
00403197 |. 7F 48 JG SHORT 《真正的.004031E1
00403199 |. F6C1 01 TEST CL,1
0040319C |. 74 12 JE SHORT 《真正的.004031B0
0040319E |. 8B96 24060000 MOV EDX,DWORD PTR DS:[ESI+624]
004031A4 |. 81E2 FFFEFFFF AND EDX,FFFFFEFF
004031AA |. 8996 24060000 MOV DWORD PTR DS:[ESI+624],EDX
004031B0 |> F6C1 02 TEST CL,2
004031B3 |. 74 0D JE SHORT 《真正的.004031C2
004031B5 |. A1 E8844B00 MOV EAX,DWORD PTR DS:[4B84E8]
004031BA |. 33D2 XOR EDX,EDX
004031BC |. 8990 6C020000 MOV DWORD PTR DS:[EAX+26C],EDX
004031C2 |> F6C1 04 TEST CL,4
004031C5 |. 74 10 JE SHORT 《真正的.004031D7
004031C7 |. C786 20060000>MOV DWORD PTR DS:[ESI+620],1
004031D1 |. FF86 34060000 INC DWORD PTR DS:[ESI+634]
004031D7 |> 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
004031DA |. E8 7DF10900 CALL 《真正的.004A235C
004031DF |. 8BD8 MOV EBX,EAX
004031E1 |> 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
004031E4 |. E8 73F10900 CALL 《真正的.004A235C ; 这里截取假码前5位值转十六进制
004031E9 |. 3BD8 CMP EBX,EAX ; 这里其实是判断注册码前5位的十六进制值必须等于4624
004031EB |. 74 23 JE SHORT 《真正的.00403210 ; 这里相等跳向成功
004031ED |. 33C0 XOR EAX,EAX
004031EF |. BA 02000000 MOV EDX,2
004031F4 |. 50 PUSH EAX
004031F5 |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4]
004031F8 |. FF4D F0 DEC DWORD PTR SS:[EBP-10]
004031FB |. E8 10EE0900 CALL 《真正的.004A2010
00403200 |. 58 POP EAX
00403201 |. 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C]
00403204 |. 64:8915 00000>MOV DWORD PTR FS:[0],EDX
0040320B |. E9 F5010000 JMP 《真正的.00403405 ; 跳向失败
00403210 |> 33C9 XOR ECX,ECX ;
00403212 |> 8B45 C0 /MOV EAX,DWORD PTR SS:[EBP-40] ;
00403215 |. 03C3 |ADD EAX,EBX ;
00403217 |. 2BC1 |SUB EAX,ECX
00403219 |. 8945 C0 |MOV DWORD PTR SS:[EBP-40],EAX
0040321C |. 41 |INC ECX
0040321D |. 83F9 14 |CMP ECX,14
00403220 |.^ 7C F0 \JL SHORT 《真正的.00403212 ;
00403222 |. 33C9 XOR ECX,ECX ;
00403224 |> 8B7D C0 /MOV EDI,DWORD PTR SS:[EBP-40] ;
00403227 |. 03FB |ADD EDI,EBX
00403229 |. 2BF9 |SUB EDI,ECX
0040322B |. 41 |INC ECX
0040322C |. 83F9 0A |CMP ECX,0A
0040322F |.^ 7C F3 \JL SHORT 《真正的.00403224 ;
00403231 |. C786 A8030000>MOV DWORD PTR DS:[ESI+3A8],1 ;
0040323B |. 81C3 CF070000 ADD EBX,7CF ;
00403241 |. 33C9 XOR ECX,ECX ;
00403243 |. 899E 40190000 MOV DWORD PTR DS:[ESI+1940],EBX ;
00403249 |. 8D85 94FDFFFF LEA EAX,DWORD PTR SS:[EBP-26C] ;
0040324F |> 33D2 /XOR EDX,EDX ;
00403251 |. 41 |INC ECX ;
00403252 |. 8A10 |MOV DL,BYTE PTR DS:[EAX] ;
00403254 |. 40 |INC EAX
00403255 |. 3155 BC |XOR DWORD PTR SS:[EBP-44],EDX ;
00403258 |. 83F9 0A |CMP ECX,0A
0040325B |.^ 7C F2 \JL SHORT 《真正的.0040324F ;
0040325D |. 8D9E E5040000 LEA EBX,DWORD PTR DS:[ESI+4E5] ;
00403263 |. 53 PUSH EBX
00403264 |. E8 4F0D0900 CALL 《真正的.00493FB8
00403269 |. 59 POP ECX
0040326A |. 8945 CC MOV DWORD PTR SS:[EBP-34],EAX ;
0040326D |. 8B45 CC MOV EAX,DWORD PTR SS:[EBP-34]
00403270 |. 40 INC EAX ;
00403271 |. 50 PUSH EAX ;
00403272 |. E8 09040900 CALL 《真正的.00493680 ;
00403277 |. 59 POP ECX
00403278 |. 8945 C8 MOV DWORD PTR SS:[EBP-38],EAX ;
0040327B |. 8B55 C8 MOV EDX,DWORD PTR SS:[EBP-38]
0040327E |. 56 PUSH ESI
0040327F |. 57 PUSH EDI
00403280 |. 33C0 XOR EAX,EAX
00403282 |. 8BFB MOV EDI,EBX
00403284 |. 83C9 FF OR ECX,FFFFFFFF
00403287 |. F2:AE REPNE SCAS BYTE PTR ES:[EDI]
00403289 |. F7D1 NOT ECX
0040328B |. 2BF9 SUB EDI,ECX ;
0040328D |. 8BF2 MOV ESI,EDX ;
0040328F |. 87F7 XCHG EDI,ESI
00403291 |. 8BD1 MOV EDX,ECX ;
00403293 |. 8BC7 MOV EAX,EDI ;
00403295 |. C1E9 02 SHR ECX,2 ;
00403298 |. F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
0040329A |. 8BCA MOV ECX,EDX ;
0040329C |. 83E1 03 AND ECX,3 ;
0040329F |. F3:A4 REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
004032A1 |. 8B45 C8 MOV EAX,DWORD PTR SS:[EBP-38] ;
004032A4 |. 8B55 CC MOV EDX,DWORD PTR SS:[EBP-34] ;
004032A7 |. 5F POP EDI
004032A8 |. 5E POP ESI
004032A9 |. C60410 00 MOV BYTE PTR DS:[EAX+EDX],0
004032AD |. 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34] ;
004032B0 |. 51 PUSH ECX
004032B1 |. 8B45 C8 MOV EAX,DWORD PTR SS:[EBP-38] ;
004032B4 |. 50 PUSH EAX
004032B5 |. 56 PUSH ESI
004032B6 |. E8 D1B60100 CALL 《真正的.0041E98C
004032BB |. 83C4 0C ADD ESP,0C
004032BE |. 33DB XOR EBX,EBX ;
004032C0 |> 8BC3 /MOV EAX,EBX ;
004032C2 |. B9 0A000000 |MOV ECX,0A ;
004032C7 |. 99 |CDQ
004032C8 |. F7F9 |IDIV ECX ;
004032CA |. 8B45 C8 |MOV EAX,DWORD PTR SS:[EBP-38] ;
004032CD |. 0FBE1410 |MOVSX EDX,BYTE PTR DS:[EAX+EDX] ;
004032D1 |. 3155 B8 |XOR DWORD PTR SS:[EBP-48],EDX ;
004032D4 |. 8B4D CC |MOV ECX,DWORD PTR SS:[EBP-34] ;
004032D7 |. 8B55 CC |MOV EDX,DWORD PTR SS:[EBP-34] ;
004032DA |. 8BC1 |MOV EAX,ECX ;
004032DC |. 8D0C88 |LEA ECX,DWORD PTR DS:[EAX+ECX*4] ;
004032DF |. C1E1 04 |SHL ECX,4 ;
004032E2 |. 2BC8 |SUB ECX,EAX ;
004032E4 |. 81C1 BE000000 |ADD ECX,0BE ;
004032EA |. 3BD9 |CMP EBX,ECX ;
004032EC |. 8BCA |MOV ECX,EDX ;
004032EE |. 8D1451 |LEA EDX,DWORD PTR DS:[ECX+EDX*2] ;
004032F1 |. C1E2 04 |SHL EDX,4 ;
004032F4 |. 03D1 |ADD EDX,ECX ;
004032F6 |. 03D2 |ADD EDX,EDX ;
004032F8 |. 81C2 BE000000 |ADD EDX,0BE ;
004032FE |. 3BDA |CMP EBX,EDX ;
00403300 |. 75 3C |JNZ SHORT 《真正的.0040333E
00403302 |. 8B45 C8 |MOV EAX,DWORD PTR SS:[EBP-38] ;
00403305 |. 8B55 CC |MOV EDX,DWORD PTR SS:[EBP-34] ;
00403308 |. C60410 00 |MOV BYTE PTR DS:[EAX+EDX],0 ;
0040330C |. 33C9 |XOR ECX,ECX ;
0040330E |. 8B45 C8 |MOV EAX,DWORD PTR SS:[EBP-38] ;
00403311 |. 8BD0 |MOV EDX,EAX
00403313 |. 8955 A8 |MOV DWORD PTR SS:[EBP-58],EDX ;
00403316 |. 3B4D CC |CMP ECX,DWORD PTR SS:[EBP-34] ;
00403319 |. 7D 23 |JGE SHORT 《真正的.0040333E
0040331B |> 8BC1 |/MOV EAX,ECX
0040331D |. 25 0F000080 ||AND EAX,8000000F ;
00403322 |. 79 05 ||JNS SHORT 《真正的.00403329
00403324 |. 48 ||DEC EAX
00403325 |. 83C8 F0 ||OR EAX,FFFFFFF0
00403328 |. 40 ||INC EAX
00403329 |> 8A9405 94FDFF>||MOV DL,BYTE PTR SS:[EBP+EAX-26C]
00403330 |. 8B45 A8 ||MOV EAX,DWORD PTR SS:[EBP-58]
00403333 |. 3010 ||XOR BYTE PTR DS:[EAX],DL
00403335 |. 41 ||INC ECX
00403336 |. FF45 A8 ||INC DWORD PTR SS:[EBP-58]
00403339 |. 3B4D CC ||CMP ECX,DWORD PTR SS:[EBP-34]
0040333C |.^ 7C DD |\JL SHORT 《真正的.0040331B
0040333E |> 43 |INC EBX ;
0040333F |. 81FB A1860100 |CMP EBX,186A1 ;
00403345 |.^ 0F8C 75FFFFFF \JL 《真正的.004032C0
0040334B |. 8B55 C0 MOV EDX,DWORD PTR SS:[EBP-40] ;
0040334E |. 8B45 B4 MOV EAX,DWORD PTR SS:[EBP-4C] ;
00403351 |. 8BCF MOV ECX,EDI ;
00403353 |. C1E1 02 SHL ECX,2 ;
00403356 |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2] ;
00403359 |. C1E2 03 SHL EDX,3 ;
0040335C |. 03D1 ADD EDX,ECX ;
0040335E |. 03D0 ADD EDX,EAX ;
00403360 |. 8955 C4 MOV DWORD PTR SS:[EBP-3C],EDX ;
00403363 |. 8B55 BC MOV EDX,DWORD PTR SS:[EBP-44] ;
00403366 |. 8B4D B4 MOV ECX,DWORD PTR SS:[EBP-4C] ;
00403369 |. C1E2 02 SHL EDX,2 ;
0040336C |. C1E7 03 SHL EDI,3 ;
0040336F |. 8D0C49 LEA ECX,DWORD PTR DS:[ECX+ECX*2] ;
00403372 |. 03FA ADD EDI,EDX ;
00403374 |. 03F9 ADD EDI,ECX ;
00403376 |. 897D C0 MOV DWORD PTR SS:[EBP-40],EDI ;
00403379 |. 8B45 B4 MOV EAX,DWORD PTR SS:[EBP-4C] ;
0040337C |. 8B4D B8 MOV ECX,DWORD PTR SS:[EBP-48] ;
0040337F |. C1E1 02 SHL ECX,2 ;
00403382 |. 8B7D BC MOV EDI,DWORD PTR SS:[EBP-44] ;
00403385 |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2] ;
00403388 |. 8B55 B4 MOV EDX,DWORD PTR SS:[EBP-4C] ;
0040338B |. 03C8 ADD ECX,EAX ;
0040338D |. 8B45 B8 MOV EAX,DWORD PTR SS:[EBP-48] ;
00403390 |. 83C1 03 ADD ECX,3 ;
00403393 |. D3E7 SHL EDI,CL ;
00403395 |. 8B4D B4 MOV ECX,DWORD PTR SS:[EBP-4C] ;
00403398 |. C1E0 03 SHL EAX,3 ;
0040339B |. C1E2 02 SHL EDX,2 ;
0040339E |. 8D0C49 LEA ECX,DWORD PTR DS:[ECX+ECX*2] ;
004033A1 |. 03C2 ADD EAX,EDX ;
004033A3 |. 03C1 ADD EAX,ECX ;
004033A5 |. 8945 BC MOV DWORD PTR SS:[EBP-44],EAX ;
004033A8 |. 8B45 C8 MOV EAX,DWORD PTR SS:[EBP-38] ;
004033AB |. 05 D0000000 ADD EAX,0D0 ;
004033B0 |. 8986 B0060000 MOV DWORD PTR DS:[ESI+6B0],EAX ;
004033B6 |. 8B45 B4 MOV EAX,DWORD PTR SS:[EBP-4C] ;
004033B9 |. 8B55 B4 MOV EDX,DWORD PTR SS:[EBP-4C] ;
004033BC |. 8B4D C0 MOV ECX,DWORD PTR SS:[EBP-40] ;
004033BF |. C1E1 02 SHL ECX,2 ;
004033C2 |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2] ;
004033C5 |. C1E2 03 SHL EDX,3 ;
004033C8 |. 03D1 ADD EDX,ECX ;
004033CA |. 8BCF MOV ECX,EDI ;
004033CC |. 03D0 ADD EDX,EAX ;
004033CE |. 8955 B8 MOV DWORD PTR SS:[EBP-48],EDX ;
004033D1 |. 8B55 C4 MOV EDX,DWORD PTR SS:[EBP-3C] ;
004033D4 |. 8B45 B4 MOV EAX,DWORD PTR SS:[EBP-4C] ;
004033D7 |. C1E1 02 SHL ECX,2 ;
004033DA |. C1E2 03 SHL EDX,3 ;
004033DD |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2] ;
004033E0 |. 03D1 ADD EDX,ECX ;
004033E2 |. 03D0 ADD EDX,EAX ;
004033E4 |. B0 01 MOV AL,1 ; 来到这里AL=1
004033E6 |. 8955 B4 MOV DWORD PTR SS:[EBP-4C],EDX ;
004033E9 |. 50 PUSH EAX
004033EA |. FF4D F0 DEC DWORD PTR SS:[EBP-10] ;
004033ED |. 8D45 FC LEA EAX,DWORD PTR SS:[EBP-4] ;
004033F0 |. BA 02000000 MOV EDX,2
004033F5 |. E8 16EC0900 CALL 《真正的.004A2010
004033FA |. 58 POP EAX
004033FB |. 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C] ;
004033FE |. 64:8915 00000>MOV DWORD PTR FS:[0],EDX
00403405 |> 5F POP EDI
00403406 |. 5E POP ESI
00403407 |. 5B POP EBX
00403408 |. 8BE5 MOV ESP,EBP
0040340A |. 5D POP EBP
0040340B \. C3 RETN 这里这个CALL成功返回AL=1,至此注册码所有值分析完毕
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面给出注册码算法:
首先将用户名(dgrzh)逐个乘以C2,将结果累加起来转十进制等于105342,在将它连接到机器码前20位后面,等于(56780123453362080553105342),将它们的ASCII值逐一取出乘以自身所在位置数,将结果累加起来得到4624,转十进制得到注册码前5位值为
17956,
注册码倒数16-14位值等于去掉后16位假码值,为17956逐个异或结果的十进制值等于060,
注册码倒数13-9位值等于去掉后16位假码值,为17956的累加和的十进制值等于00268,
注册码倒数8-6位的值等于去掉后面8位的十进制长度也就是上面三段注册码的长度和等于013,
注册码倒数5位值等于AX=7751,十进制值为30545,
char ECX[]={"179560600026801300000"};
int EDI=541;
int EAX=0;
int ESI=0;
for(ESI=0,ESI<16,ESI++)
{
EDX=ESI+EDI+3;
EDI=EDX;
DL=80;
do \\循环8次
{
if((AH and 80)==0)
EAX=EAX*2;
else
EAX=EAX*2;
ax=(ax xor 1021);
if((ECX[0] and DL)==0)
DL=DL/2;
else
ax=(ax xor 1021);
DL=DL/2;
}while(DL!=0)
ECX++;
}
EAX=78427751
最终获得:
机器码: 5678012345336208055332657158863938205016
用户名: dgrzh
注册码: 179560600026801330545