首页
社区
课程
招聘
对一款简单的CRACKME的注册码追踪(献给新手)
发表于: 2011-5-9 14:28 11824

对一款简单的CRACKME的注册码追踪(献给新手)

2011-5-9 14:28
11824
首先,我要强调的是,这款CM分厂的简单,大概收录在以前的论坛精华里,所以也是别人早就破过的,不过这些都无所谓,这只不过是我的一次小小的练习而已,同时我也想给好多刚开始学习的人一点经验吧,让他们能进步的快一些,很简单,高手就不看了吧!言归正传,偶们开始吧!
    经PEID检查,无壳,故略过!直接OD载入!程序停在下面代码处:

00401000 >/$  6A 00         PUSH 0                                   ; /pModule = NULL
00401002  |.  E8 34010000   CALL <JMP.&KERNEL32.GetModuleHandleA>    ; \GetModuleHandleA
00401007  |.  A3 EC234000   MOV DWORD PTR DS:[4023EC],EAX
0040100C  |.  6A 00         PUSH 0                                   ; /lParam = NULL
0040100E  |.  68 29104000   PUSH CM.00401029                         ; |DlgProc = CM.00401029
00401013  |.  6A 00         PUSH 0                                   ; |hOwner = NULL
00401015  |.  6A 01         PUSH 1                                   ; |pTemplate = 1
00401017  |.  FF35 EC234000 PUSH DWORD PTR DS:[4023EC]               ; |hInst = NULL
0040101D  |.  E8 3D010000   CALL <JMP.&USER32.DialogBoxParamA>       ; \DialogBoxParamA
00401022  |.  6A 00         PUSH 0                                   ; /ExitCode = 0
00401024  \.  E8 1E010000   CALL <JMP.&KERNEL32.ExitProcess>         ; \ExitProcess
00401029  /.  C8 000000     ENTER 0,0
0040102D  |.  817D 0C 11010>CMP DWORD PTR SS:[EBP+C],111
00401034  |.  75 07         JNZ SHORT CM.0040103D
00401036  |.  E8 1B000000   CALL CM.00401056
0040103B  |.  EB 13         JMP SHORT CM.00401050
0040103D  |>  837D 0C 02    CMP DWORD PTR SS:[EBP+C],2
00401041  |.  75 07         JNZ SHORT CM.0040104A
00401043  |.  E8 E5000000   CALL CM.0040112D
00401048  |.  EB 06         JMP SHORT CM.00401050
0040104A  |>  33C0          XOR EAX,EAX
0040104C  |.  C9            LEAVE
0040104D  |.  C2 1000       RET 10
00401050  |>  33C0          XOR EAX,EAX
00401052  |.  C9            LEAVE
00401053  \.  C2 1000       RET 10

现在我们在地址栏 00401000 >/$  6A 00         PUSH 0                                   ; /pModule = NUL 处右键单击 查找-当前模块中的名称 ,这时候会弹出一个标题栏是‘名称位于CM’的对话框,我们单击选中  USER32.GetDlgItemTextA 这一行,然后按下回车,这是又弹出一个新的窗口,我们单击选中 CALL <JMP.&USER32.GetDlgItemTextA> 这一行,同样按下回车,这时我们回到OD的CPU窗口,会发现在反汇编窗口,程序已经停在调用GetDlgItemTextA函数的这个CALL处,这时候只需要,单击选中这一行,然后F2下断,之后F9运行,让程序跑起来,过一会在CM的注册码输入处随便输几个数字就行,一定要记住你输入的东西。输完后确定,程序已经被OD拦截了下来,现在为我们可以回到OD的反汇编窗口慢慢分析了,这时候我们发现OD的注释窗口有几个奇怪的字符串,先不管他,F8单步,走到哪一步停止呢,还记得你刚输入的字符串吧,走到注释窗口出现你输入的字符串后面就停下来。比如我输入的“kkkk',那么就应该在   004010ED  |.  68 24234000   PUSH CM.00402324                         ; /String2 = "kkkk"  这里停止,看到没有,后面的注释出现了我输入的字符串,在这里你就应该停下来了,然后看看寄存器窗口,第一行就有一个很长的奇怪的字符串,其实这个就是偶们要找的东西,记下它,试试,对吧,这就是本款CM的注册码,很简单的CM,明码的,只不过是分段显示,呵呵,单步走几下,等他同偶们输入的注册码比较之后,正确的注册码就会完整的显示出来了!很简单,希望对新手们有所帮助!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
沙发
论坛最需要这样的人了,把过程交待清楚,方便新人学习,佩服啊
2011-5-9 17:23
0
雪    币: 143
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
确实很适合新人~
2011-5-9 18:15
0
雪    币: 697
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
适合新人学习
2011-5-9 21:45
0
雪    币: 193
活跃值: (1225)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主的方法貌似很怪异。。。
2011-5-9 22:49
0
雪    币: 1596
活跃值: (30)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
6
这个方法直接呀,先猜想程序用什么API,用CTRL+N找到,直接断下试试,除了一些特别的API断不下,一般的都可以!
2011-5-10 20:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好贴!
顶下兄弟了!
2011-5-24 20:25
0
雪    币: 114
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
找字符串下断点我觉得最方便
找到0042F4D9处是“Congraz!”在它前面的一个CALL处下断点,即0042F4D0处
0042F4D0  |.  E8 2745FDFF   CALL Acid_bur.004039FC
然后F9运行,输入一个随便的序列号,点Check会断在那个CALL处,查看寄存器,就看到EAX放着你输入的序列号,EDX就放着正确的序列号“Hello Dude!”,那个CALL就进行比较,往前翻翻看看就知道Hello Dude就从哪冒出来的。

同样的方法,在0042FAFE处的CALL下断点,F9运行输入名字和序列号,前面有个CALL会将你的名字转换成四位数字ASCII码,然后前面加CW,后面加CRACKED,中间用杠连起来,就是正确的序列号了,比如输入cracktv后,序列号就是CW-8118-CRACKED。断下后会在寄存器那里看到你输入的序列号和组合好的序列号。
0042FAFE  |.  E8 F93EFDFF   CALL Acid_bur.004039FC


回复错了地方,应该是对这个帖子的回复http://bbs.pediy.com/showthread.php?t=133693
2011-5-31 11:50
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不用找直接看得出来,果然是新手用的
2011-6-2 11:16
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
L2C-57816784-ABEX

用楼主方法实现了!
2011-6-4 17:12
0
雪    币: 129
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
支持       ……
2011-6-6 11:28
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
ctrl+N  找到比较函数lstrcmpiA 回车 在Call处下断点 F9运行 直接出结果
2011-6-14 17:27
0
雪    币: 67
活跃值: (101)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
L2C-5781nkxc4562-ABEX
2011-6-15 00:50
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
错误字符出来之前,还明码显示注册码....

L2C-57816784-ABEX

004010FF     /74 16         je short CM.00401117                     ;  爆破这里,假码和真码相等就跳。我们改成JMP
2011-7-19 16:51
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
明码比较,在错误出来有显示,直接填进去就OK了
2011-8-11 23:53
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
16
支持,不像其他帖子一样XXX是做什么,而是写出反汇编代码运行过程,谢谢!
2011-8-12 09:55
0
雪    币: 200
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
适合新手。看了学习了~
2011-8-24 18:32
0
雪    币: 266
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
代码很简单的,很适合新手
Delphi 注册
var
  Buf,buf2:array[0..49] of Char;
  VolumeNameSize:DWORD;
  ret:BOOL;
  VolumeSerialNumbe,MaximumComponentLength,FileSystemFlags:DWORD;
  i,j:ShortInt;
begin
  FillChar(buf,SizeOf(Buf),#0);
  FillChar(buf2,SizeOf(Buf),#0);

  ret:=GetVolumeInformation(0,@buf,VolumeNameSize,@VolumeSerialNumbe,MaximumComponentLength,FileSystemFlags,0,0);
  if not ret then
  begin
    MessageBox(0,PAnsiChar('GetVolumeInformation Error'),PAnsiChar(IntToStr(GetLastError)),MB_ICONERROR);
    exit;
  end;
  StrCat(buf,PAnsiChar('4562-ABEX'));
  for j:=0 to 1 do
  begin
    for i:=0 to 3 do
    begin
      Inc(buf[i]);
    end;
  end;
  lstrcpy(buf2,PAnsiChar('L2C-5781'));
  StrCat(buf2,Buf);
  MessageBox(0,buf2,PAnsiChar('Sucess'),MB_OK);

end;
2011-8-25 00:13
0
游客
登录 | 注册 方可回帖
返回
//