首页
社区
课程
招聘
[原创]一简单crackme的简单分析
发表于: 2006-8-6 14:01 7893

[原创]一简单crackme的简单分析

2006-8-6 14:01
7893

在一个论坛上看到的,闲来无事就顺手玩了玩。

跟踪知注册码需为8位,紧接着到关键部分:

00445112   > \BA 16FD2D01   mov   edx, 12DFD16
00445117   . 8BC6       mov   eax, esi
00445119   . 85C0       test   eax, eax
0044511B   . 7E 1B       jle   short 00445138
0044511D   . BE 01000000   mov   esi, 1
00445122   > 8B4D FC     mov   ecx, [ebp-4]
00445125   . 8A4C31 FF   mov   cl, [ecx+esi-1]     //取用户名的一位
00445129   . 80F1 CA     xor   cl, 0CA             //与0ca异或
0044512C   . 81E1 FF000000 and   ecx, 0FF       //ecx前三位情零
00445132   . 03D1       add   edx, ecx         //累加
00445134   . 46         inc   esi
00445135   . 48         dec   eax
00445136   .^ 75 EA       jnz   short 00445122
00445138   > 81F2 26117919 xor   edx, 19840808   //累加结果与19840808异或
0044513E   . 3B55 F4     cmp   edx, [ebp-C]   //与注册码比较

算法总结:去用户名每位与0ca疑惑后与12df016累加,结果与19840808异或.

注册机源码:
#include "stdio.h"
#include "math.h"
#include "conio.h"

void main()
{
  char na[80];
  int na_len;
  int i=0;
  signed char di;
  unsigned long cs1=0x12DFD16;
  unsigned long cs2=0x19840808;
  unsigned long cs3=0x0CA ;
  char cs4=11;

  
  printf("please input your name:");
  gets(na);
  na_len=strlen(na);
  

  for(i=0;i<na_len;i++)
  {
    na=na^cs3;
    cs1+=na&0x0ff;
  }

  cs2=cs1^cs2;
  printf("\nYour serial is %lx",cs2);
  printf("\n\n\nMade By eLance");
  getch();
}


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (10)
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
2
最初由 elance 发布
在一个论坛上看到的,闲来无事就顺手玩了玩。

跟踪知注册码需为8位,紧接着到关键部分:

00445112 > \BA 16FD2D01 mov edx, 12DFD16
........


呵呵,学习

注册机如果用VB编写,可能会更简洁!

一点小见解,我不懂C

2006-8-6 16:41
0
雪    币: 716
活跃值: (162)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
3
最初由 冷血书生 发布
呵呵,学习

注册机如果用VB编写,可能会更简洁!

一点小见解,我不懂C
........


回家了懒得装VB,硬盘里里有个WIN-TC,将就用了。
呵呵
2006-8-6 17:46
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
请问大哥,怎样才能找到关键点啊,断点无从下手啊
2010-5-18 20:26
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
首先用插件 超级字符串 得到如图所示位置:
00444F60  /.  55            PUSH EBP
00444F61  |.  8BEC          MOV EBP,ESP
00444F63  |.  6A 00         PUSH 0
00444F65  |.  33C0          XOR EAX,EAX
00444F67  |.  55            PUSH EBP
00444F68  |.  68 EA4F4400   PUSH cm.00444FEA
00444F6D  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
00444F70  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
00444F73  |.  803D 49784400>CMP BYTE PTR DS:[447849],0
00444F7A  |.  74 13         JE SHORT cm.00444F8F
00444F7C  |.  A1 906C4400   MOV EAX,DWORD PTR DS:[446C90]
00444F81  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
00444F83  |.  BA FC4F4400   MOV EDX,cm.00444FFC                      ;  正确
00444F88  |.  E8 07D0FFFF   CALL cm.00441F94
00444F8D  |.  EB 11         JMP SHORT cm.00444FA0
00444F8F  |>  A1 906C4400   MOV EAX,DWORD PTR DS:[446C90]
00444F94  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
00444F96  |.  BA 0C504400   MOV EDX,cm.0044500C                      ;  错误
00444F9B  |.  E8 F4CFFFFF   CALL cm.00441F94
00444FA0  |>  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
00444FA3  |.  A1 906C4400   MOV EAX,DWORD PTR DS:[446C90]
00444FA8  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
00444FAA  |.  E8 9DCFFFFF   CALL cm.00441F4C
00444FAF  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00444FB2  |.  BA 0C504400   MOV EDX,cm.0044500C                      ;  错误
00444FB7  |.  E8 B4ECFBFF   CALL cm.00403C70
00444FBC  |.  75 0C         JNZ SHORT cm.00444FCA
00444FBE  |.  B8 1C504400   MOV EAX,cm.0044501C                      ;  再来
00444FC3  |.  E8 88FBFFFF   CALL cm.00444B50
00444FC8  |.  EB 0A         JMP SHORT cm.00444FD4
00444FCA  |>  B8 2C504400   MOV EAX,cm.0044502C                      ;  谢谢
00444FCF  |.  E8 7CFBFFFF   CALL cm.00444B50
00444FD4  |>  33C0          XOR EAX,EAX
00444FD6  |.  5A            POP EDX
00444FD7  |.  59            POP ECX
00444FD8  |.  59            POP ECX
00444FD9  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
00444FDC  |.  68 F14F4400   PUSH cm.00444FF1
00444FE1  |>  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
00444FE4  |.  E8 F7E8FBFF   CALL cm.004038E0
00444FE9  \.  C3            RETN

知道00444F7A为关键跳转:
向上看知道内存00447849为关键地址决定对错。
然后对00447849设置内存断点 重新调试
断在此处:
004450A2   .  C605 49784400 00     MOV BYTE PTR DS:[447849],0
004450A9   .  83FE 04              CMP ESI,4                                ;  用户名大于4位
004450AC   .  0F8E A3000000        JLE cm.00445155
004450B2   .  83FF 08              CMP EDI,8                                ;  密码为8位
004450B5   .  0F85 9A000000        JNZ cm.00445155
004450BB   .  33C0                 XOR EAX,EAX
004450BD   .  55                   PUSH EBP

通过分析得知ESI为用户名个数,EDI为密码个数
说明用户名必须大于4为 密码必须为8位 否则。。。。
然后往下看 经过这里:
00445135   .  48                   DEC EAX
00445136   .^ 75 EA                JNZ SHORT cm.00445122
00445138   >  81F2 08088419        XOR EDX,19840808
0044513E   .  3B55 F4              CMP EDX,DWORD PTR SS:[EBP-C]
00445141   .  74 09                JE SHORT cm.0044514C
00445143   .  C605 49784400 00     MOV BYTE PTR DS:[447849],0
0044514A   .  EB 10                JMP SHORT cm.0044515C
0044514C   >  C605 49784400 01     MOV BYTE PTR DS:[447849],1
00445153   .  EB 07                JMP SHORT cm.0044515C
00445155   >  C605 49784400 00     MOV BYTE PTR DS:[447849],0
0044515C   >  8B83 D8020000        MOV EAX,DWORD PTR DS:[EBX+2D8]
00445162   .  8A15 48784400        MOV DL,BYTE PTR DS:[447848]
00445168   .  8B08                 MOV ECX,DWORD PTR DS:[EAX]
0044516A   .  FF51 5C              CALL DWORD PTR DS:[ECX+5C]

注意看0044514C这里终于修改了00447849的内容:到这里表示成功了。。。。
所以这个比较为关键0044513E   .  3B55 F4              CMP EDX,DWORD PTR SS:[EBP-C]
其实走到这里就出现明码了。。。    算法就不说了  已经分析得很明白了。
2010-5-22 01:12
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
其实作者做的有些巧妙,并不是点击注册键后才进行的运算,点击注册只是显示结果而已。
  真正的运算是在你挨个输入密码的时候。。。。前面7次会失败
    到第8次的时候才会进行运算。。。
  我也是新手,不知道说得对不对
2010-5-22 01:18
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
多谢,这超级字符串果然超级。。。。
2010-5-22 09:29
0
雪    币: 13
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
顶了..多出一些这基础教程多好啊..我也看得懂了..哈..谢谢楼主~~
2010-5-28 18:09
0
雪    币: 6270
活跃值: (3335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好像这个Crackme下不了了
2010-6-2 08:03
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
給出一組正確密碼.....

用戶名 = jimmy

密碼 = 18AA0852

學習了 !!!!
2010-6-4 11:15
0
雪    币: 256
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
如果没有超级字符串的插件的话 下什么断点可以下到呢 谢谢
2010-6-4 20:25
0
游客
登录 | 注册 方可回帖
返回
//