首页
社区
课程
招聘
[推荐]我的处女crackme 有兴趣的可以来试试看
发表于: 2009-7-23 22:16 6726

[推荐]我的处女crackme 有兴趣的可以来试试看

2009-7-23 22:16
6726

RT 随手写了个crackme 觉得比起破解,写crackme更有意思。。。
下面的部分,老鸟可以无视。。仅供菜鸟和比我更菜的菜鸟使用。。。
本crackme无壳无防止反汇编代码,但是爆破的筒子们注意了 如果仅仅是显示good是不够滴
除了显示good之外还发生了什么事情之后 说明破解成功。。。

原码和注册机过两天会跟上的(一上来就发出来就没意思了。。),如果没人感兴趣,那就把这贴沉了吧 当我没发过。。。

下面是crackme 祝菜鸟们和比我更菜的小鸟们破的愉快


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (26)
雪    币: 184
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
function Gen(const user: string): string;
var
  xsum: Integer;
  i: Integer;
  x, y: Integer;
  a, b, c: Integer;
begin
  if Length(user) < 3 then
  begin
    Result := '用户名长度必须大于3';
    Exit;
  end;

  if Length(user) > 10 then
  begin
    Result := '用户名长度不能大于10';
    Exit;
  end;

  xsum := 0;
  for i := 1 to Length(user) do
  begin
    xsum := xsum + Ord(user[i]);
  end;
  xsum := $40C9 - xsum;
  Randomize;
  repeat
    a := 32 + Random(94);
    b := 32 + Random(94);
    c := 32 + Random(94);
    for x := 32 to 126 do
    begin
      y := xsum - a - b - c - x * (Ord(user[3]) + 1) - x * (Ord(user[2]) + 1);
      if y mod (Ord(user[1]) + 1) = 0 then
      begin
        y := y div (Ord(user[1]) + 1);
        if (y >= 32) and (y <= 126) then
          Break;
      end;
    end;
  until
    x < 127;
  Result := Chr(x) + Chr(x) + Chr(y) + Chr(a) + Chr(b) + Chr(c);
end;


给3组注册码
pathletboy
%%@xmU

pathletboy
((;(Wk

pathletboy
''=I7_
2009-7-23 23:46
0
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
怎么才能升级呀!
2009-7-24 05:00
0
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
貌似用户名2个字符或1个字符密码随意
密码5个及以下用户名随意   都会显示good
2009-7-24 15:45
0
雪    币: 68
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
额 这是最后一次改的时候的小bug 但是不影响破解 真正注册成功后 应当自动打开看雪主页 最后那个用来混淆视听的good忘了设visible=false了 在用户名小于3个和密码小于6个时会出现提示 忘了说了。。。 2楼是正解。。
2009-7-24 18:08
0
雪    币: 68
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
请问能告诉我是用什么软件怎么破解的吗 不胜感激
2009-7-24 22:31
0
雪    币: 184
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
OD+慢慢分析
2009-7-25 12:33
0
雪    币: 20
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
算法分析:我也分析下,练练手,好久没有学习了。
1。bp rtcMidCharVar

2。假设注册名:12345,注册码987654321

3。一直观察内存[EBP-28]的内容,因为在后面的分析中发现要用到它。

   第一个循环将注册名的ASCII码累加->X
   第二个循环将注册码的ASCII码累加->Y
   Z=X+Y;
   [EBP-28]=X+Y,按我输入的注册名和注册码得到2DC

4。到这里时,只用到注册名和注册码的前3位进行运算。
    注册名的第2位ASCII码*注册码的第2位ASCII码,->A
    注册名的第1位ASCII码*注册码的第3位ASCII码,->B
    注册名的第3位ASCII码*注册码的第1位ASCII码, ->C
    A+B+C+Z=40C9就注册成功!       
如下:

00405B95  mov     eax, dword ptr [ebp-34]    ;  "987654321"假注册码
00405B98  mov     ecx, dword ptr [ebp-64]    ;  "12345"           假注册名
00405B9B  mov     dx, word ptr [eax+2]       ;  "8"
00405B9F  mov     di, word ptr [eax+4]       ;  "7"
00405BA3  imul    dx, word ptr [ecx+2]       ;  ASCII码相乘,"8"*"2",即38H*32H=AF0
00405BA8  jo      00405EF5
00405BAE  imul    di, word ptr [ecx]         ;  "1"*"7",即31H*37H=A87H
00405BB2  jo      00405EF5
00405BB8  movsx   edi, di
00405BBB  add     edi, dword ptr [ebp-28]    ;  A87+2DC=D63H
00405BBE  mov     cx, word ptr [ecx+4]
00405BC2  movsx   edx, dx
00405BC5  jo      00405EF5
00405BCB  add     edx, edi                   ;  AF0H+D63H=1853H
00405BCD  jo      00405EF5
00405BD3  imul    cx, word ptr [eax]         ;  "3"*"9",即31H*39H=B5BH
00405BD7  jo      00405EF5
00405BDD  movsx   eax, cx
00405BE0  add     edx, eax                   ;  B58H+1853H=23AEH
00405BE2  jo      00405EF5
00405BE8  mov     eax, edx
00405BEA  test    eax, eax
00405BEC  mov     dword ptr [ebp-28], eax
00405BEF  je      00405D1B
00405BF5  mov     ecx, dword ptr [esi]
00405BF7  cmp     eax, 40C9                  ;  eax=23AE,关键比较:EAX要等于40C9就OK
00405BFC  push    esi
00405BFD  jnz     short 00405C7A             ;  不转走就成功!

5。注册机
分析方程组{x1+x2+...=X;  y1+y2+....=Y; x1*y3+x2*y2+x3*y1+X+Y=40C9}
注册名:111注册码:llldd&
注册名:111注册码:iiiddddddX
打开看雪主页

注册机有多种写法,其中之一:固定注册码前3位y1y2y3的值,如都是111,222,mmm......
运行通过,正常.
#include "stdio.h"
#include "conio.h"
#include<string.h>

main()
{   char a[10];
     int x=0,y=0,z=0;     /*y用于确定注册码的前3位固定值*/
     long key=16585 ;     /*最终值等于0x40C9就注册成功*/
     int i;
     int maxcode=127;
     int mincode=33;    /*小于33或大于126就无法显示注册码的ASCII值*/
     int remainder;
     int last,count;       /*记录剩余注册码的个数及最后一位注册码*/
     char regcode[10];
     printf("enter name\n");
     scanf("%s",&a);
     for(i=0;i<strlen(a);i++)  /*注册名的ASCII码累加*/
         x=x+a[i];
     printf(" %x \n",x);

try:if(mincode==maxcode)
         goto quit;
     for(i=0,y=0,z=0;i<3;i++)   /*注册码的ASCII码累加。确定注册码的前3位,同一个值*/
         y=y+mincode;
     for(i=0;i<3;i++)  /*在这个循环中,注册名、码只用了前3位*/
         z=z+a[i]*mincode;
     remainder=key-x-y-z;
     printf(" %x ",remainder);
     if(remainder/3<mincode||remainder/6>=maxcode)  /*小于33或大于126就无法显示ASCII值*/
     {  printf(" error  %c ",y/3);
         mincode++;/*尝试下一个ASCII码*/
         goto try;
     }

quit:
       printf(" \nfinal:(%c) %x = %d ",mincode,remainder,remainder);  /*分配剩余注册 码,除开前3位后的ASCII码值*/
     /*有多种处理方法,现举例子,用100取余*/
      last=remainder%100 ;/*最后一个注册码值。100是字符d的ASCII码*/
      count=remainder/100;   /*中间注册码的个数*/
      printf("\n (%c) %d %c \n",mincode,count,last);
      regcode[0]=mincode;regcode[1]=mincode;regcode[2]=mincode;

      for(i=3;i<count+3;i++)
          regcode[i]=100;
      regcode[i]=last;   regcode[i+1]='\0';
      printf("\nThe code is %s",®code);
      getch();
}

作者:看雪论坛.thatsme.
2009-7-26 15:37
0
雪    币: 20
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
试一下邀请码.xiexie moonife
2009-7-27 13:01
0
雪    币: 164
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习拉
2009-7-27 15:40
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
来学习 下  看看 你们高手写的 答案
2009-7-27 15:46
0
雪    币: 89
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
爆破也是可以的。
00405BE8    8BC2            MOV EAX,EDX
00405BEA    85C0            TEST EAX,EAX
00405BEC    8945 D8         MOV DWORD PTR SS:[EBP-28],EAX
00405BEF    0F84 26010000   JE 工程1.00405D1B
00405BF5    8B0E            MOV ECX,DWORD PTR DS:[ESI]
00405BF7    3D C9400000     CMP EAX,40C9
00405BFC    56              PUSH ESI
00405BFD    75 7B           JNZ SHORT 工程1.00405C7A
00405BFF    FF91 14030000   CALL DWORD PTR DS:[ECX+314]
00405C05    8D55 80         LEA EDX,DWORD PTR SS:[EBP-80]
00405C08    50              PUSH EAX
00405C09    52              PUSH EDX
00405C0A    FFD3            CALL EBX

走到00405BFD    75 7B           JNZ SHORT 工程1.00405C7A
这个JNZ就可以感觉出来不正常了。因为他是一个稍微大点的跳转。
把关键的“来看看”跳过去了。。- -·无意中查到这个字符串。也可以说这个方法是取巧+运气吧。
把00405BFD    75 7B           JNZ SHORT 工程1.00405C7A
这个跳NOP掉就可以了
用户名3位以上,密码6位以上```
2009-7-28 14:53
0
雪    币: 224
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
都是高手。。。。
2009-8-10 16:32
0
雪    币: 186
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
下不了,你往这里发什么,气人。
2009-8-10 20:50
0
雪    币: 133
活跃值: (113)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
15
被顶起来了,看了一下,要记住,thatsme就是hearmecryle哈.
管水.
2009-8-10 21:04
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xks
16
学习一下... ...
2009-8-10 22:08
0
雪    币: 40
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
这个很适合新手,我要好好学习,再来回帖
2009-8-11 10:40
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我是比你更菜的菜鸟!努力中。。。。。
2009-8-11 11:16
0
雪    币: 98
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
下不了,你往这里发什么,气人。  ??

能下载啊
2009-8-15 15:59
0
雪    币: 64
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
呵呵 学习一下 新手报到
2009-8-16 15:25
0
雪    币: 1099
活跃值: (100)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
感觉有深度,看来要继续学习!
2009-8-16 16:56
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
难啊,看不懂,望高手赐教呢
2009-8-17 01:36
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
12楼兄弟的方法简单啊,我已试了,成功暴破
2009-8-17 13:43
0
雪    币: 63
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
打开exe后,胡乱输了个,发现显示good,为什么?
2009-8-17 23:54
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
路过,踩一下。
2010-2-28 09:40
0
游客
登录 | 注册 方可回帖
返回
//