能力值:
( LV2,RANK:10 )
|
-
-
4 楼
小弟刚学破解,分析过程可那有点乱或者错误,清谅解。
我分析如下:
用od加载程序,查找关键字符串来到关键call
00491B80 /. 55 PUSH EBP
00491B81 |. 8BEC MOV EBP,ESP
00491B83 |. 6A 00 PUSH 0
00491B85 |. 6A 00 PUSH 0
00491B87 |. 53 PUSH EBX
00491B88 |. 56 PUSH ESI
00491B89 |. 8BF0 MOV ESI,EAX
00491B8B |. 33C0 XOR EAX,EAX
00491B8D |. 55 PUSH EBP
00491B8E |. 68 651C4900 PUSH crackme.00491C65
00491B93 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
00491B96 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00491B99 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
00491B9C |. 8B86 FC020000 MOV EAX,DWORD PTR DS:[ESI+2FC]
00491BA2 |. E8 211CFBFF CALL crackme.004437C8
00491BA7 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00491BAA |. E8 69FFFFFF CALL crackme.00491B18 ; 此call为关键call,按f7进入
00491BAF |. 84C0 TEST AL,AL
00491BB1 |. 0F84 89000000 JE crackme.00491C40 ; 此跳为关键跳,但是改此跳不能完美爆破。程序重启后还得重新注册。
我输入的用户名:maomao 假注册码:0123456789
进入此(00491BAA |. E8 69FFFFFF CALL crackme.00491B18call,f8单步来到
00491B38 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00491B3B |. E8 9C2CF7FF CALL crackme.004047DC
00491B40 |. 83F8 0A CMP EAX,0A ; 判断注册码是否大于10位,否则直接跳过算法部分
,00491B43 |. 7C 0E JL SHORT crackme.00491B53
00491B45 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00491B48 |. E8 F7FCFFFF CALL crackme.00491844 ; 此call重要,必须进入
00491B4D |. 84C0 TEST AL,AL
00491B4F |. 74 02 JE SHORT crackme.00491B53
继续f7进入后,单步来到
00491892 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
00491895 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00491898 |. 8A52 01 MOV DL,BYTE PTR DS:[EDX+1] ; 读取假注册码的第二位
0049189B |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
0049189E |. C600 01 MOV BYTE PTR DS:[EAX],1
004918A1 |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
004918A4 |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
004918A7 |. E8 2816F7FF CALL crackme.00402ED4
004918AC |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
004918AF |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004918B2 |. 8A52 04 MOV DL,BYTE PTR DS:[EDX+4] ; 读取第五位
004918B5 |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
004918B8 |. C600 01 MOV BYTE PTR DS:[EAX],1
004918BB |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
004918BE |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
004918C1 |. B1 02 MOV CL,2
004918C3 |. E8 DC15F7FF CALL crackme.00402EA4
004918C8 |. 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C] ; 把从假注册码取出的两位放在一起
004918CB |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
004918CE |. E8 0116F7FF CALL crackme.00402ED4
004918D3 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
004918D6 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004918D9 |. 8A52 06 MOV DL,BYTE PTR DS:[EDX+6] ; 读取第7位
004918DC |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
004918DF |. C600 01 MOV BYTE PTR DS:[EAX],1
004918E2 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
004918E5 |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
004918E8 |. B1 03 MOV CL,3
004918EA |. E8 B515F7FF CALL crackme.00402EA4
004918EF |. 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
004918F2 |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
004918F5 |. E8 DA15F7FF CALL crackme.00402ED4
004918FA |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
004918FD |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00491900 |. 8A52 07 MOV DL,BYTE PTR DS:[EDX+7] ; 读取第八位
00491903 |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
00491906 |. C600 01 MOV BYTE PTR DS:[EAX],1
00491909 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
0049190C |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
0049190F |. B1 04 MOV CL,4
00491911 |. E8 8E15F7FF CALL crackme.00402EA4
00491916 |. 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C]
00491919 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
0049191C |. E8 B315F7FF CALL crackme.00402ED4
00491921 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
00491924 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00491927 |. 8A52 09 MOV DL,BYTE PTR DS:[EDX+9] ; 读取第九位
0049192A |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
0049192D |. C600 01 MOV BYTE PTR DS:[EAX],1
00491930 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
00491933 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
00491936 |. B1 05 MOV CL,5
00491938 |. E8 6715F7FF CALL crackme.00402EA4
0049193D |. 8D55 CC LEA EDX,DWORD PTR SS:[EBP-34]
00491940 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
00491943 |. E8 382EF7FF CALL crackme.00404780
00491948 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14]
0049194B |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
0049194E |. 59 POP ECX ; 这出站的是假注册码的位数
0049194F |. E8 D42EF7FF CALL crackme.00404828
00491954 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 从假注册码中取出的2、5、7、10位和注册码的位数放在一起,我假设为x
00491957 |. 0FB600 MOVZX EAX,BYTE PTR DS:[EAX] ; 从x中取出第一位
0049195A |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0049195D |. 0FB652 01 MOVZX EDX,BYTE PTR DS:[EDX+1] ; 取出第二位
00491961 |. 03C2 ADD EAX,EDX ; 貌似主要的算法从这开始
00491963 |. B9 05000000 MOV ECX,5
00491968 |. 99 CDQ
00491969 |. F7F9 IDIV ECX
0049196B |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为b
0049196E |. 8855 F4 MOV BYTE PTR SS:[EBP-C],DL
00491971 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00491974 |. 33C9 XOR ECX,ECX
00491976 |. 8A48 02 MOV CL,BYTE PTR DS:[EAX+2] ; 取x的第3位
00491979 |. 8BC1 MOV EAX,ECX
0049197B |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0049197E |. 0FB652 03 MOVZX EDX,BYTE PTR DS:[EDX+3] ; 第4为
00491982 |. 03C2 ADD EAX,EDX
00491984 |. BE 05000000 MOV ESI,5
00491989 |. 99 CDQ
0049198A |. F7FE IDIV ESI
0049198C |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为e
0049198F |. 8855 F5 MOV BYTE PTR SS:[EBP-B],DL
00491992 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00491995 |. 0FB640 04 MOVZX EAX,BYTE PTR DS:[EAX+4] ; 第5位
00491999 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0049199C |. 0FB652 05 MOVZX EDX,BYTE PTR DS:[EDX+5] ; 第6位
004919A0 |. 03C2 ADD EAX,EDX
004919A2 |. BE 05000000 MOV ESI,5
004919A7 |. 99 CDQ
004919A8 |. F7FE IDIV ESI
004919AA |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为b
004919AD |. 8855 F6 MOV BYTE PTR SS:[EBP-A],DL
004919B0 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004919B3 |. 0FB640 06 MOVZX EAX,BYTE PTR DS:[EAX+6] ; 第7位
004919B7 |. 03C1 ADD EAX,ECX
004919B9 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
004919BC |. 0FB652 01 MOVZX EDX,BYTE PTR DS:[EDX+1] ; 取x的第二位
004919C0 |. 03C2 ADD EAX,EDX
004919C2 |. B9 05000000 MOV ECX,5
004919C7 |. 99 CDQ
004919C8 |. F7F9 IDIV ECX
004919CA |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为e
004919CD |. 8855 F7 MOV BYTE PTR SS:[EBP-9],DL
我就只能分析到这,下面的我就分析的模糊不清了,忘大侠指点一下关键之处!!!!谢谢!!!
注册码也没有追出来,哎!郁闷
只会爆破,爆破关键点在:
00491B69 .^\E9 5A23F7FF JMP crackme.00403EC8
00491B6E .^ EB F0 JMP SHORT crackme.00491B60
00491B70 . 8BC3 MOV EAX,EBX ; 此为爆破关键点,吧mov改为or
00491B72 . 5B POP EBX
00491B73 . 59 POP ECX
00491B74 . 5D POP EBP
00491B75 . C3 RETN
希望大大们指点一下
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
标 题: 一个小程序的算法分析送给初学者
作 者: mkamao
时 间: 2009-06-11,23:00
链接:http://bbs.pediy.com/showthread.php?p=640505#post640505
小弟刚学破解,分析过程可那有点乱或者错误,清谅解。
本程序无壳,直接用od加载程序,查找关键字符串来到关键call
00491B80 /. 55 PUSH EBP
00491B81 |. 8BEC MOV EBP,ESP
00491B83 |. 6A 00 PUSH 0
00491B85 |. 6A 00 PUSH 0
00491B87 |. 53 PUSH EBX
00491B88 |. 56 PUSH ESI
00491B89 |. 8BF0 MOV ESI,EAX
00491B8B |. 33C0 XOR EAX,EAX
00491B8D |. 55 PUSH EBP
00491B8E |. 68 651C4900 PUSH crackme.00491C65
00491B93 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
00491B96 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
00491B99 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
00491B9C |. 8B86 FC020000 MOV EAX,DWORD PTR DS:[ESI+2FC]
00491BA2 |. E8 211CFBFF CALL crackme.004437C8
00491BA7 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00491BAA |. E8 69FFFFFF CALL crackme.00491B18 ; 此call为关键call,按f7进入
00491BAF |. 84C0 TEST AL,AL
00491BB1 |. 0F84 89000000 JE crackme.00491C40 ; 此跳为关键跳,但是改此跳不能完美爆破。程序重启后还得重新注册。
我输入的用户名:maomao 假注册码:A1234567B910
进入此(00491BAA |. E8 69FFFFFF CALL crackme.00491B18call,f8单步来到
00491B38 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00491B3B |. E8 9C2CF7FF CALL crackme.004047DC
00491B40 |. 83F8 0A CMP EAX,0A ; 判断注册码是否大于10位,否则直接跳过算法部分
,00491B43 |. 7C 0E JL SHORT crackme.00491B53
00491B45 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00491B48 |. E8 F7FCFFFF CALL crackme.00491844 ; 此call重要,必须进入
00491B4D |. 84C0 TEST AL,AL
00491B4F |. 74 02 JE SHORT crackme.00491B53
继续f7进入后,单步来到
00491892 |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
00491895 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00491898 |. 8A52 01 MOV DL,BYTE PTR DS:[EDX+1] ; 读取假注册码的第二位
0049189B |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
0049189E |. C600 01 MOV BYTE PTR DS:[EAX],1
004918A1 |. 8D55 E8 LEA EDX,DWORD PTR SS:[EBP-18]
004918A4 |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
004918A7 |. E8 2816F7FF CALL crackme.00402ED4
004918AC |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
004918AF |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004918B2 |. 8A52 04 MOV DL,BYTE PTR DS:[EDX+4] ; 读取第五位
004918B5 |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
004918B8 |. C600 01 MOV BYTE PTR DS:[EAX],1
004918BB |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
004918BE |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
004918C1 |. B1 02 MOV CL,2
004918C3 |. E8 DC15F7FF CALL crackme.00402EA4
004918C8 |. 8D55 E4 LEA EDX,DWORD PTR SS:[EBP-1C] ; 把从假注册码取出的两位放在一起
004918CB |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
004918CE |. E8 0116F7FF CALL crackme.00402ED4
004918D3 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
004918D6 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
004918D9 |. 8A52 06 MOV DL,BYTE PTR DS:[EDX+6] ; 读取第7位
004918DC |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
004918DF |. C600 01 MOV BYTE PTR DS:[EAX],1
004918E2 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
004918E5 |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
004918E8 |. B1 03 MOV CL,3
004918EA |. E8 B515F7FF CALL crackme.00402EA4
004918EF |. 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24]
004918F2 |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
004918F5 |. E8 DA15F7FF CALL crackme.00402ED4
004918FA |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
004918FD |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00491900 |. 8A52 07 MOV DL,BYTE PTR DS:[EDX+7] ; 读取第八位
00491903 |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
00491906 |. C600 01 MOV BYTE PTR DS:[EAX],1
00491909 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
0049190C |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
0049190F |. B1 04 MOV CL,4
00491911 |. E8 8E15F7FF CALL crackme.00402EA4
00491916 |. 8D55 D4 LEA EDX,DWORD PTR SS:[EBP-2C]
00491919 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
0049191C |. E8 B315F7FF CALL crackme.00402ED4
00491921 |. 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
00491924 |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
00491927 |. 8A52 09 MOV DL,BYTE PTR DS:[EDX+9] ; 读取第九位
0049192A |. 8850 01 MOV BYTE PTR DS:[EAX+1],DL
0049192D |. C600 01 MOV BYTE PTR DS:[EAX],1
00491930 |. 8D55 E0 LEA EDX,DWORD PTR SS:[EBP-20]
00491933 |. 8D45 CC LEA EAX,DWORD PTR SS:[EBP-34]
00491936 |. B1 05 MOV CL,5
00491938 |. E8 6715F7FF CALL crackme.00402EA4
0049193D |. 8D55 CC LEA EDX,DWORD PTR SS:[EBP-34]
00491940 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
00491943 |. E8 382EF7FF CALL crackme.00404780
00491948 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14]
0049194B |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
0049194E |. 59 POP ECX ; 这出站的是假注册码的位数
0049194F |. E8 D42EF7FF CALL crackme.00404828
00491954 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 从假注册码中取出的2、5、7、10位和注册码的位数放在一起,我假设为x
00491957 |. 0FB600 MOVZX EAX,BYTE PTR DS:[EAX] ; 从x中取出第一位
0049195A |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0049195D |. 0FB652 01 MOVZX EDX,BYTE PTR DS:[EDX+1] ; 取出第二位
00491961 |. 03C2 ADD EAX,EDX ; 貌似主要的算法从这开始
00491963 |. B9 05000000 MOV ECX,5
00491968 |. 99 CDQ
00491969 |. F7F9 IDIV ECX
0049196B |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为b
0049196E |. 8855 F4 MOV BYTE PTR SS:[EBP-C],DL
00491971 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00491974 |. 33C9 XOR ECX,ECX
00491976 |. 8A48 02 MOV CL,BYTE PTR DS:[EAX+2] ; 取x的第3位
00491979 |. 8BC1 MOV EAX,ECX
0049197B |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0049197E |. 0FB652 03 MOVZX EDX,BYTE PTR DS:[EDX+3] ; 第4为
00491982 |. 03C2 ADD EAX,EDX
00491984 |. BE 05000000 MOV ESI,5
00491989 |. 99 CDQ
0049198A |. F7FE IDIV ESI
0049198C |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为e
0049198F |. 8855 F5 MOV BYTE PTR SS:[EBP-B],DL
00491992 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00491995 |. 0FB640 04 MOVZX EAX,BYTE PTR DS:[EAX+4] ; 第5位
00491999 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0049199C |. 0FB652 05 MOVZX EDX,BYTE PTR DS:[EDX+5] ; 第6位
004919A0 |. 03C2 ADD EAX,EDX
004919A2 |. BE 05000000 MOV ESI,5
004919A7 |. 99 CDQ
004919A8 |. F7FE IDIV ESI
004919AA |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为b
004919AD |. 8855 F6 MOV BYTE PTR SS:[EBP-A],DL
004919B0 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
004919B3 |. 0FB640 06 MOVZX EAX,BYTE PTR DS:[EAX+6] ; 第7位
004919B7 |. 03C1 ADD EAX,ECX
004919B9 |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
004919BC |. 0FB652 01 MOVZX EDX,BYTE PTR DS:[EDX+1] ; 取x的第二位
004919C0 |. 03C2 ADD EAX,EDX
004919C2 |. B9 05000000 MOV ECX,5
004919C7 |. 99 CDQ
004919C8 |. F7F9 IDIV ECX
004919CA |. 80C2 61 ADD DL,61 ; 余数+61,其结果ascii码为e
004919CD |. 8855 F7 MOV BYTE PTR SS:[EBP-9],DL
接下来继续:
004919D0 |. 8D45 C8 LEA EAX,DWORD PTR SS:[EBP-38]
004919D3 |. 8A55 F4 MOV DL,BYTE PTR SS:[EBP-C] ; 取x中的数算出的结果为bebb的第一位
004919D6 |. E8 292DF7FF CALL crackme.00404704
004919DB |. 8B45 C8 MOV EAX,DWORD PTR SS:[EBP-38]
004919DE |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
004919E1 |. B9 01000000 MOV ECX,1
004919E6 |. E8 D130F7FF CALL crackme.00404ABC ; 把b放到14678912
004919EB |. 8D45 C4 LEA EAX,DWORD PTR SS:[EBP-3C]
004919EE |. 8A55 F7 MOV DL,BYTE PTR SS:[EBP-9] ; 取bbeb的最后一位
004919F1 |. E8 0E2DF7FF CALL crackme.00404704
004919F6 |. 8B45 C4 MOV EAX,DWORD PTR SS:[EBP-3C]
004919F9 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
004919FC |. B9 03000000 MOV ECX,3
00491A01 |. E8 B630F7FF CALL crackme.00404ABC ; 变为b467912
00491A06 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00491A09 |. 0FB600 MOVZX EAX,BYTE PTR DS:[EAX]
00491A0C |. B9 3B000000 MOV ECX,3B
00491A11 |. 33D2 XOR EDX,EDX
00491A13 |. F7F1 DIV ECX
00491A15 |. 83FA 2E CMP EDX,2E ; 判断假注册码的第一位是否为字母,否为注册失败
00491A18 |. 0F87 A4000000 JA crackme.00491AC2
00491A1E |. 8D45 C0 LEA EAX,DWORD PTR SS:[EBP-40]
00491A21 |. 8A55 F5 MOV DL,BYTE PTR SS:[EBP-B] ; 取bbeb的第三位
00491A24 |. E8 DB2CF7FF CALL crackme.00404704
00491A29 |. 8B45 C0 MOV EAX,DWORD PTR SS:[EBP-40]
00491A2C |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
00491A2F |. B9 05000000 MOV ECX,5
00491A34 |. E8 8330F7FF CALL crackme.00404ABC ; e67912
00491A39 |. 8D45 BC LEA EAX,DWORD PTR SS:[EBP-44]
00491A3C |. 8A55 F6 MOV DL,BYTE PTR SS:[EBP-A]
00491A3F |. E8 C02CF7FF CALL crackme.00404704
00491A44 |. 8B45 BC MOV EAX,DWORD PTR SS:[EBP-44]
00491A47 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
00491A4A |. B9 09000000 MOV ECX,9
00491A4F |. E8 6830F7FF CALL crackme.00404ABC
00491A54 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] ; b12
00491A57 |. B9 01000000 MOV ECX,1
00491A5C |. BA 09000000 MOV EDX,9
00491A61 |. E8 0E30F7FF CALL crackme.00404A74
00491A66 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] ; b1b4e67912
00491A69 |. B9 01000000 MOV ECX,1
00491A6E |. BA 07000000 MOV EDX,7
00491A73 |. E8 FC2FF7FF CALL crackme.00404A74
00491A78 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00491A7B |. 0FB640 08 MOVZX EAX,BYTE PTR DS:[EAX+8]
00491A7F |. B9 3D000000 MOV ECX,3D
00491A84 |. 33D2 XOR EDX,EDX
00491A86 |. F7F1 DIV ECX
00491A88 |. 83FA 2A CMP EDX,2A
00491A8B |. 77 35 JA SHORT crackme.00491AC2 ; 判断假注册码的第九位是否为字母,否则注册失败
00491A8D |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00491A90 |. B9 01000000 MOV ECX,1
00491A95 |. BA 02000000 MOV EDX,2
00491A9A |. E8 D52FF7FF CALL crackme.00404A74 ; bb4e6912
00491A9F |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00491AA2 |. B9 01000000 MOV ECX,1
00491AA7 |. BA 06000000 MOV EDX,6
00491AAC |. E8 C32FF7FF CALL crackme.00404A74
00491AB1 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00491AB4 |. BA 101B4900 MOV EDX,crackme.00491B10 ; bb4e612
00491AB9 |. E8 622EF7FF CALL crackme.00404920 ; 此值为软件给的固定值为be9c912,用来与用假注册码算出来的值进行比较,相等则注册成功
00491ABE |. 75 02 JNZ SHORT crackme.00491AC2
然后找注册码的存放位置:
00491BCC |. E8 83D9FDFF CALL crackme.0046F554
00491BD1 |. B1 01 MOV CL,1
00491BD3 |. BA 7C1C4900 MOV EDX,crackme.00491C7C ; software\lansee 根据这个提示我们就可以想到它的注册码放在注册表里面。
00491BD8 |. 8BC3 MOV EAX,EBX
00491BDA |. E8 D9D9FDFF CALL crackme.0046F5B8
00491BDF |. 84C0 TEST AL,AL
00491BE1 |. 74 1D JE SHORT crackme.00491C00
00491BE3 |. 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
00491BE6 |. 8B86 FC020000 MOV EAX,DWORD PTR DS:[ESI+2FC]
00491BEC |. E8 D71BFBFF CALL crackme.004437C8
00491BF1 |. 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]
00491BF4 |. BA 941C4900 MOV EDX,crackme.00491C94 ; serial
算法分析结果:
经过大致的分析,还有与be9c912比较,我们可以推出:
1.注册码必须是十二位的,第一位和第九位必须是字母,字母任意。
2.注册码的第五位和7位都必须是9
3.注册码的第2位与第5位相加结果对5求余+61,结果转化为ASCII码必须是b
4. 注册码的第7位与第8位相加结果对5求余+61,结果转化为ASCII码必须是c
5.注册码的第5位与第7位相加结果在加2,然后对5求余+61,结果转化为ASCII码必须是e
6.其余位数随便。
7.注册码保存在[HKEY_LOCAL_MACHINE\SOFTWARE\LanSee]下的。
这个算法必须进行逆推。才能找到知道注册码。
还有就是完美爆破的关键点:
爆破,爆破关键点在:
00491B69 .^\E9 5A23F7FF JMP crackme.00403EC8
00491B6E .^ EB F0 JMP SHORT crackme.00491B60
00491B70 . 8BC3 MOV EAX,EBX ; 此为爆破关键点,吧mov改为or
00491B72 . 5B POP EBX
00491B73 . 59 POP ECX
00491B74 . 5D POP EBP
00491B75 . C3 RETN
btw:通过这次的算法分析,收获颇多。呵呵,这是俺第一次仔细分析,说来惭愧啊。学习了一两个月,看了黑鹰算法分析教程的几个例子,心就痒痒,总想自己分析一个,就下了一个小程序先分析了一下了,没有分析出来。然后在看雪求助:http://bbs.pediy.com/showthread.php?t=91136,谢谢blackeyes大哥的帮助。经过这一提示后,俺也花了一上午时间才分析出来,可能是小弟笨吧。但是幸苦分析出来了,心情还不错的。就好好地整理了一下,发出来吧,供我一样的菜菜鸟学习吧。
要想分析算法清楚明了并且速度快,还是得多多的看前辈的帖子。积累经验。就不会像我这样慢了。破解速度自然就快了。还有一点就是像前辈们说的要有一颗恒心,坚持到底。不放弃。
|