首页
社区
课程
招聘
[原创]偶的第一个注册机```
发表于: 2006-12-30 12:45 11248

[原创]偶的第一个注册机```

2006-12-30 12:45
11248

偶闭关了两个月,,学了汇编和C!!出关后马上找了个小crack试试身手。。。忽忽~~比偶以前顺手多理啊!!
所以啊~~~偶还是建议大家听看雪老大滴话,,去学学c,,再学汇编!没错
这个crack真的很菜的!!算法也很简单。。大家看看:

name:jiangwu55
code:121212

切到SICE中,设断BPX HMEMCPY 返回后按CHECK IT!
被拦到了,按几下F12就回到这里了.....
:0042D4CD E88EC9FEFF              call 00419E60  //从这里出来,它读NAME
:0042D4D2 837DF800                cmp dword ptr [ebp-08], 00000000  //输入了吗???
:0042D4D6 7414                    je 0042D4EC  //OH!!NO!!!
:0042D4D8 8D55F4                  lea edx, dword ptr [ebp-0C]
:0042D4DB 8B86E0010000            mov eax, dword ptr [esi+000001E0]
:0042D4E1 E87AC9FEFF              call 00419E60    //读SERIAL
:0042D4E6 837DF400                cmp dword ptr [ebp-0C], 00000000   //输入了吗???
:0042D4EA 750F                    jne 0042D4FB   //输入了就JUMP

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042D4D6(C)
|

* Possible StringData Ref from Code Obj ->"One of the fields is empty!" "  <====嗯@%#^$*
                                  |
:0042D4EC B8C8D54200              mov eax, 0042D5C8
:0042D4F1 E802FCFFFF              call 0042D0F8
:0042D4F6 E98C000000              jmp 0042D587
执行0042D4EA处的命令后,来到这儿:
:0042D4FB BB01000000              mov ebx, 00000001
.........
.........
:0042D524 8D55F8                  lea edx, dword ptr [ebp-08]        *******
:0042D527 8B86DC010000            mov eax, dword ptr [esi+000001DC]     |
:0042D52D E82EC9FEFF              call 00419E60                         |
:0042D532 8B45F8                  mov eax, dword ptr [ebp-08]           |
:0042D535 33D2                    xor edx, edx                          |
:0042D537 8A5418FF                mov dl, byte ptr [eax+ebx-01]         |
:0042D53B 83C205                  add edx, 00000005   *********      计算注册码!!!!
:0042D53E 8D45F0                  lea eax, dword ptr [ebp-10]           |
:0042D541 E8A261FDFF              call 004036E8                         |
:0042D546 8B55F0                  mov edx, dword ptr [ebp-10]           |
:0042D549 8D45FC                  lea eax, dword ptr [ebp-04]           |
:0042D54C E87762FDFF              call 004037C8                         |
:0042D551 43                      inc ebx                               |
:0042D552 3BFB                    cmp edi, ebx                          |
:0042D554 7DCE                    jge 0042D524                       ********
.................
:0042D564 8B45F8                  mov eax, dword ptr [ebp-08]   //假注册码121212
:0042D567 8B55FC                  mov edx, dword ptr [ebp-04]   //真注册码onfsl|z::
:0042D56A E86163FDFF              call 004038D0     //比较
:0042D56F 750C                    jne 0042D57D      

* Possible StringData Ref from Code Obj ->"Congratz cracker! hehehe"  <===西西~~
                                  |
:0042D571 B8ECD54200              mov eax, 0042D5EC
:0042D576 E87DFBFFFF              call 0042D0F8
:0042D57B EB0A                    jmp 0042D587

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042D56F(C)
|

* Possible StringData Ref from Code Obj ->"No no no! :( Try again!"   <===错
                                  |
:0042D57D B810D64200              mov eax, 0042D610
:0042D582 E871FBFFFF              call 0042D0F8
非常简单的算法如下:
NAME的每个字符的ASCII码+5
---------------------------------------------------
偶汇编还没学完,,差那么一点水平;注册机就用C写了:

/*大菜一号版注册机*/
#include <stdio.h>
#include <string.h>
void main()
{
  char name[100];
  int  asciiname[100];
  int i,k=0;
  printf("                      ***************************\n");
  printf("                           Daniel-rj[06]keygen\n");
  printf("                      ***************************\n");
  for(i=0;i<4;i++)
    puts(" ");
  printf("                           name: ");
  gets(name);
  k=strlen(name);
  for(i=0;i<k;i++)
   asciiname[i]=name[i];
  for(i=0;i<k;i++)
   {
     name[i]=asciiname[i]+5;
}
  printf("                           code: ");
   for(i=0;i<k;i++)
    printf("%c",name[i]);
}
  

NAME:jiangwu55
SERIAL:onfsl|z::

全部就是这样了```简单收工>.<

还有个小问题,,偶知道算法;但总是写不出注册机,不知哪位大虾赐教~~谢
具体算法是这样滴:

输入的name的每位的ascii*2+0aH(即十进制的10),再累加``
所有name的ascii累加后再加上0b437027就是真码了``

此算法很简单,,可是偶写出来总是错的`可能偶的C还有待加强`55555


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (25)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
怎么没有编译好的注册机?
2006-12-30 13:41
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
3
呵``偶c++还米学``
那种dos窗口的注册机不好看哦
2006-12-30 13:46
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
4
希望楼主继续努力。另外如果把代码分析写得详细一点就好了,给出的注册机最好是已经编译好的,而不是只有代码
2006-12-30 14:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
出师拉,我还要慢慢学啊
在看<WIN32编程>

用WIN32汇编也能出窗口啊
不一定要C++的
2006-12-30 14:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
输入的name的每位的ascii*2+0aH(即十进制的10),再累加``
所有name的ascii累加后再加上0b437027就是真码了``

此算法很简单,,可是偶写出来总是错的`可能偶的C还有待加强`55555

------------------------------

你是怎么写的?
2006-12-30 14:32
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
7
for(i=0;i<k;i++)
  {asciiname[i]=name[i]
    }
for(i=0;i<k;i++)
{
asciiname=asciiname[i]*2+0x0ah;
s+=asciiname;---->累加}
s+=0b437027;
printf("%d",s);
就是这样了``
2006-12-30 14:49
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
8
最初由 笨笨雄 发布
希望楼主继续努力。另外如果把代码分析写得详细一点就好了,给出的注册机最好是已经编译好的,而不是只有代码


OOOOOOKKKKKK~~~~!!!
2006-12-30 14:51
0
雪    币: 201
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
int i = 0;
unsigned int key = 0;
while(name[i])
{
  key += name[i] * 2 + 0x0a;
  i++;
}
key += 0x0b437027;
2006-12-30 14:51
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
10
所真的,我的C,忘得差不多啦
2006-12-30 18:33
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
11
不错,可以做我的老师了,厉害
2006-12-30 20:19
0
雪    币: 236
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
for(i=0;i<4;i++)
    puts(" ");

-----------------------------------------
谁能说一下这个语句的作用吗?

谢谢!
2006-12-30 20:55
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
13
for(i=0;i<k;i++)
   asciiname[i]=name[i];
  for(i=0;i<k;i++)
   {
     name[i]=asciiname[i]+5;
}
//////////////////////////////???

  for(i=0;i<k;i++)
     name[i] += 5;
2006-12-30 21:10
0
雪    币: 236
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
最初由 jjnet 发布
for(i=0;i<k;i++)
asciiname=name;
for(i=0;i<k;i++)
{
name=asciiname+5;
........


应该行不通吧!

别人的两个for语句是对数组里的字符进行操作!
2006-12-30 21:32
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
15
.....
2006-12-31 09:14
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
16
最初由 itking 发布
应该行不通吧!

别人的两个for语句是对数组里的字符进行操作!


这两句滴意思偶是打算把字符数组赋给整型数组,,得到其ascii
2006-12-31 09:38
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
17
最初由 fexsilence 发布
int i = 0;
unsigned int key = 0;
while(name)
{
key += name * 2 + 0x0a;
........


这位仁兄``
这个while(anme[i])p这个句子,,如果还++的话那条件不永远为真??死循环!
2006-12-31 09:40
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
18
最初由 itking 发布
for(i=0;i<4;i++)
puts(" ");

-----------------------------------------
谁能说一下这个语句的作用吗?
........


用这个for循环,,执行四次puts(" ");
puts这个语句执行完后会自动换行``所以我用这个换了四行`主要是为了输出格式!!你可以把代码编译看看``
2006-12-31 09:44
0
雪    币: 201
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
......
2006-12-31 15:18
0
雪    币: 236
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
最初由 大菜一号 发布
用这个for循环,,执行四次puts(" ");
puts这个语句执行完后会自动换行``所以我用这个换了四行`主要是为了输出格式!!你可以把代码编译看看``


明白了.谢谢!

我正在学c++ ,所以,对于c只是一知半解.
2006-12-31 19:32
0
雪    币: 4419
活跃值: (894)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
学了两年了,c还没学会
2006-12-31 20:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
偶是新手~虚心学习~
2007-1-1 04:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
他是用C 语言写的,不是C++
2007-6-29 21:36
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
24
这么老的帖子,也上来了,不容易,我顶!
2007-6-29 23:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
有知道哪位大侠能做个vb程序破解的动画教程,最近下了个“执业医师助考大师 5.0(口腔助理)”可就是破不了
2007-6-30 00:36
0
游客
登录 | 注册 方可回帖
返回
//