能力值:
( LV2,RANK:10 )
|
-
-
2 楼
0040116F . 83F8 20 CMP EAX,20 ; 比较注册名每一位的ASCII值是否等于20
为什么只比较20,不比较其他数值呢?
跟出了我自己的注册码
zero
BS-200BA1B9-1792
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
不得不顶,刚学,谢谢指点
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
取20是看是不是数字或者字母,ASCII值32(16进制20)是空格,必须大于32才是数字或者字母.
0FBE81 F22040>MOVSX EAX,BYTE PTR DS:[ECX+4020F2] ; 从右向左取用户名每一位的ASCII值
这里我没看懂,MOVSX是先符号扩展再传送,那么为什么是从右向左取呢?
在OD里看到了堆栈内容,的确如此,但是又产生了疑问,这句好象没什么用?来看下面的代码
00401193 . 6BC3 02 imul eax, ebx,2
上一句赋了值,这一句又直接取代了,那上一句有什么用处?
看OD的自动注释,很容易得到注册码,不过自己分析,还是够呛,新手上路,多多指点.
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
这是我看懂的第一篇破文,谢了。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
确实适合新手 学了
|
能力值:
( LV6,RANK:80 )
|
-
-
7 楼
明码好明显奥。。。适合新手学习
|
能力值:
( LV3,RANK:30 )
|
-
-
8 楼
本人是菜鸟.请高手们多多指点.
我想纠正一下上面朋友的说法.
下面的代码好象不是判断数字或字母.而是如果是空格就忽略,读下一个字符.
0040116F . 83F8 20 CMP EAX,20 ; 比较注册名每一位的ASCII值是否等于20
00401172 . 74 07 JE SHORT CrackMe0.0040117B
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
这是我第一个写出注册机的程序,感谢。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
[QUOTE=茶半;239875]取20是看是不是数字或者字母,ASCII值32(16进制20)是空格,必须大于32才是数字或者字母.
0FBE81 F22040>MOVSX EAX,BYTE PTR DS:[ECX+4020F2] ; 从右向左取用户名每一位的ASCII值
这里我没看懂,MOVSX是先符号扩展...[/QUOTE]
上面那一句完全没用。。。
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
适合新手 学习了
|
能力值:
( LV13,RANK:388 )
|
-
-
12 楼
注册码那么长都是唬人的
BS-200BA1B9-前缀是固定的,后面跟个注册名ascii的和的4倍就好
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
[QUOTE=bitt;787844]注册码那么长都是唬人的
BS-200BA1B9-前缀是固定的,后面跟个注册名ascii的和的4倍就好
#include "stdafx.h"
int main(int argc, char* argv[])
{
char name[10];
int pwd=0,i=0;
printf(&qu...[/QUOTE]
BS- 这一段是一样的,后面的200BA1B9跟name的长度有关的
|
能力值:
( LV13,RANK:388 )
|
-
-
14 楼
哦对 看到了
重来个 #include "stdafx.h"
#include <string.h>
int main(int argc, char* argv[])
{
char name[10];
int serial1=0x654789,serial2=0,i=0;
printf("plz input you name:\n");
scanf("%s",name);
for(i=0;i<strlen(name);i++)
{
serial1--;
serial1*=3;
serial1--;
}
i=0;
while(name[i]!='\0')
{
serial2+=(int)name[i]*4;
i++;
}
printf("your serial is:BS-%lX-%lu\n",serial1,serial2);
return 0;
}
|
|
|