首页
社区
课程
招聘
[推荐]重新发,Creak it or Reverse it!!!
发表于: 2008-10-19 15:21 5588

[推荐]重新发,Creak it or Reverse it!!!

2008-10-19 15:21
5588
本软件的重点不是实现的功能,我同学拿过来只是让我试下他的注册部分。
结果,很简单的注册算法。但是对我来说费类很大的周折。
各位同仁菜一下它吧,呵呵
要求:
1.crack it
2.说出大体的算法写出注册机更好。

再次说明算法很简单。

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
2
拜托楼主有没有版权啊?
不要瞎蒙人啊!违法的!

机器码 :04026228230
注册码 :MKQwM2YmM26mMtX=

楼主把分析贴出来了!我就不跟帖贴分析过程了!软件注册机制不是很好!
把注册的信息导入任何一台机器都可以注册成功!

也就是或上面的注册码在任何机器上都有用!只要改注册信息就好了!

附件是注册机和一个注册码!
注册机及万能注册表
上传的附件:
2008-10-19 20:52
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我晕
跟出来很简单
注册算法呢?

再次声明,绝对不会有什么版权问题!!!
再说这么简单的发功能,没必要写这么复杂的界面啊(界面挺不错的)。
说明软件的实现依据是arp攻击。
至于机器码怎么计算的,算法是怎么生成的,大家分析下。

我只有一个目的,跟大家多交流多学习,只有在不断的学习与交流中才能成长的更快,
有时候一个问题,你要考虑很久都不会有结果,当时突然看到别人的见解,就像当头棒喝、豁然开朗一样。。。。。
2008-10-19 22:17
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也是刚入门,把自己得分析过程写出来,各位大侠指正。

1.初步分析软件的注册方式
运行程序->显示主机的相关信息->确定,提示未注册->点击注册—>通过机器码和注册码相互认证的
->输入假的注册码——>点击确定-->显示已注册,重启程序。
结论:程序在每次启动的时候,通过读取文件/注册表信息 来判断是否注册。

2.判断认证方式
输入假的注册码:pematrix
设置断点:bpx GetDlgItemTextA
点击确定,中断程序。
中断在一个子程序里面(程序多次调用了这个函数,用来取得对话框里面的信息),
这个子程序的地址是   ---0040E19B
F8运行到调用子程序的地址 -00405F90  |.  E8 06820000   call    0040E19B

上下观察一下,发现原来是写注册表的,两个函数RegOpenKeyExA(打开注册表和子键)
和RegSetValueEXA(设置键值)

00405FA5  |.  50            push    eax                              ; /BufSize
00405FA6  |.  8D4424 20     lea     eax, dword ptr [esp+20]          ; |
00405FAA  |.  50            push    eax                              ; |Buffer
00405FAB  |.  6A 01         push    1                                ; |ValueType = REG_SZ
00405FAD  |.  53            push    ebx                              ; |Reserved
00405FAE  |.  8B1D 10A04300 mov     ebx, dword ptr [<&ADVAPI32.RegSe>; |ADVAPI32.RegSetValueExA
00405FB4  |.  68 F0B44300   push    0043B4F0                         ; |ValueName = "MachineNum"
00405FB9  |.  57            push    edi                              ; |hKey
00405FBA  |.  FFD3          call    ebx                              ; \RegSetValueExA

这里写注册表的值是:MachineNum
打开注册表,搜索MachineNum  ->MachineNum 的值是我们的机器码
                  下面还有一个RegistryNum 的值是我们输入的假的注册码pematrix(是明文保存的?)

得出结论:程序以明文形式保存机器码和注册码在注册表里面;
         在每次启动时,肯定要读取注册表,进行判断比较。
   所以,设置断点:bpx RegQueryValueEx   (在读取注册表时断)

3. 跟踪认证方式
(清除断点,重新载入程序)
设置断点:bpx RegQueryValueEx
猜想:从注册表读取MachineNum,RigisterNum,然后对这两个值做相应的处理,最后比较判断。
运行程序,停在
00402F7B  |.  FF15 1CA04300 call    dword ptr [<&ADVAPI32.RegQueryVa>; \RegQueryValueExA  ,从注册表取得机器码
按F8向下,并查看寄存器窗口中的数据变化,发现可疑数据否,原来只是一个读取注册表的子程序。
按F8返回到了调用它的地址,如下
0040378C  |.  E8 BFF7FFFF   call    00402F50    ;  调用函数读取注册表。。
按F8继续,
004037D1  |> \57            push    edi
004037D2  |.  BF FBAA4300   mov     edi, 0043AAFB
004037D7  |.  8D7424 14     lea     esi, dword ptr [esp+14]
004037DB  |.  B9 01000000   mov     ecx, 1
004037E0  |.  33D2          xor     edx, edx
004037E2  |.  F3:A6         repe    cmps byte ptr es:[edi], byte ptr [e>
004037E4  |.  75 14         jnz     short 004037FA
004037E6  |>  85ED          test    ebp, ebp
004037E8  |.  0F84 0C010000 je      004038FA
004037EE  |.  55            push    ebp                                 ; /hKey
004037EF  |.  FF15 24A04300 call    dword ptr [<&ADVAPI32.RegCloseKey>] ; \RegCloseKey
004037F5  |.  E9 00010000   jmp     004038FA
004037FA  |>  8D4424 14     lea     eax, dword ptr [esp+14]
004037FE  |.  50            push    eax
004037FF  |.  E8 FCD7FFFF   call    00401000                            ;  这个函数就是对机器码的运算,计算出注册码来。写算法就要分析这个调用了。
此时查看寄存器窗口,EAX的值为注册码。EAX 0013E880 ASCII "MKQpM2PiNF9mNKUwMFIwN6=="
00403804  |.  83C4 04       add     esp, 4

后面是对计算出得注册码处理,然后从注册表读取用户输入得注册码。
~~~待续
2008-10-20 19:33
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
5
新帖提示,所有新发布的内容都在二楼!

此处贴个源码吧!
#include "string.h"
#include "math.h"
#include "stdio.h"

main()
{
char MachineNum[24]="",sum[40]="",SN[2]="";
char *tab="XBCKPTZHUJDLMNOEQRSFIVWAYG3190856742+/abczyfgqojwsmtiphrlnuvkxed";
int MachineNumlen=0,i=0,tempMN=0;
  printf("-----------NETCUT CRACK-----------\nMachineNum:");
  scanf("%s",MachineNum);
  MachineNumlen=strlen(MachineNum);
  tempMN=MachineNumlen/3;
  for(i=0;i<tempMN;i++)
  {
    sprintf(SN,"%c",tab[MachineNum[i*3] >> 2]);
	strcat(sum,SN);
    sprintf(SN,"%c",tab[MachineNum[i*3+1]>>4 | (MachineNum[i*3] & 0x3) << 4]);
	strcat(sum,SN);
    sprintf(SN,"%c",tab[(MachineNum[i*3+1] & 0xf)*2*2 | MachineNum[i*3+1] >> 6]);
	strcat(sum,SN);
    sprintf(SN,"%c",tab[MachineNum[i*3+2] & 0x3f]);
	strcat(sum,SN);
  }

if(MachineNumlen%3==1)
  {
    sprintf(SN,"%c",tab[MachineNum[tempMN*3]>>2]);
	strcat(sum,SN);
    sprintf(SN,"%c==",tab[(MachineNum[tempMN*3] & 3)<<4]);
	strcat(sum,SN);
  }
if(MachineNumlen%3==2)
  {
    sprintf(SN,"%c",tab[MachineNum[tempMN*3]>>2]);
	strcat(sum,SN);
    sprintf(SN,"%c",tab[MachineNum[tempMN*3+1]>>4 | (MachineNum[tempMN*3] & 3) << 4]);
	strcat(sum,SN);
    sprintf(SN,"%c=",tab[MachineNum[tempMN*3+1] & 0xf]);
	strcat(sum,SN);
   }
   printf("\nSN:%s\n",sum);
   printf("-----------------------------------");
   getch();
}
2008-10-21 11:23
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
6
论坛能不能内加上代码高亮显示呢?
2008-10-21 11:42
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
厉害啊!

不知道如和下手,

该用注册表API,还是F12堆栈法,

就是没线索.
2008-10-26 19:15
0
游客
登录 | 注册 方可回帖
返回
//