首页
社区
课程
招聘
549's first CrackMe[原创]
发表于: 2007-2-28 09:39 7573

549's first CrackMe[原创]

vxin 活跃值
10
2007-2-28 09:39
7573
无壳,无任何anti代码,点button即验证。
希望朋友们喜欢。

代549老大发的~~

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
只是提供一种思路,这个破解难度不大,把破解难度加100倍是很容易的事情。我相信增加100倍可以做到不可破解。不知朋友们以为如何。

如有错误之处,还望各位朋友不吝赐教。
2007-2-28 10:11
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
3
00479E50   55                     push    ebp
00479E51   8BEC                   mov     ebp, esp
00479E53   6A00                   push    $00
00479E55   53                     push    ebx
00479E56   8BD8                   mov     ebx, eax
00479E58   33C0                   xor     eax, eax
00479E5A   55                     push    ebp

* Possible String Reference to: 'éÑžøÿëð[Y]?
|
00479E5B   68A69E4700             push    $00479EA6

***** TRY
|
00479E60   64FF30                 push    dword ptr fs:[eax]
00479E63   648920                 mov     fs:[eax], esp
00479E66   8D55FC                 lea     edx, [ebp-$04]

* Reference to control Edit1 : N.A.
|
00479E69   8B83F4020000           mov     eax, [ebx+$02F4]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
00479E6F   E86CF3FBFF             call    004391E0
00479E74   8B45FC                 mov     eax, [ebp-$04]

|
00479E77   E8FCFBFFFF             call    00479A78
00479E7C   EB12                   jmp     00479E90
00479E7E   C3                     ret

00479E7F   47                     inc     edi
00479E80   00E8                   add     al, ch
00479E82   1E                     push    ds
00479E83   91                     xchg    eax, ecx
00479E84   FB                     sti
00479E85   FF33                   push    dword ptr [ebx]
00479E87   C9                     leave
00479E88   8BC8                   mov     ecx, eax
00479E8A   03C8                   add     ecx, eax
00479E8C   03CB                   add     ecx, ebx
00479E8E   03CA                   add     ecx, edx
00479E90   33C0                   xor     eax, eax
00479E92   5A                     pop     edx
00479E93   59                     pop     ecx
00479E94   59                     pop     ecx
00479E95   648910                 mov     fs:[eax], edx

****** FINALLY
|

* Possible String Reference to: '[Y]?
|
00479E98   68AD9E4700             push    $00479EAD
00479E9D   8D45FC                 lea     eax, [ebp-$04]

* Reference to: System.@LStrClr(void;void);
|
00479EA0   E8CBA4F8FF             call    00404370
00479EA5   C3                     ret


try  on 语句!
2007-2-28 10:49
0
雪    币: 220
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
00479e7c06A0068CC9E470068CC9E47006A00E8A174F8FF90
2007-2-28 11:02
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
yugung好厉害!
2007-2-28 11:12
0
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
6
2007-2-28 11:14
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
7
不知道你们在说什么!

支持详细破文,支持开源!
2007-2-28 11:24
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
8
bug巨多
至少是在我机器上(输入测试法)!
2007-2-28 11:29
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
代码来了

function PatchOneItem(PatchItem: String): Boolean;
var
  PatchAddress: Integer;
  PatchLength: DWord;
  PatchData: Pointer;
  PatchDataStr: String;
  i: Integer;
  PatchByte: Byte;
  PID, PHandle: THandle;
  WriteCount: DWord;
begin
  Result := False;
  if Length(PatchItem) < 11 then Exit;
  PatchAddress := StrToInt('0x' + LeftStr(PatchItem, 8));
  for i := 1 to Length(PatchItem) do begin
    if PatchItem[i] <> ' ' then
      PatchDataStr := PatchDataStr + PatchItem[i];
  end;
  PatchLength := (Length(PatchDataStr) - 9) div 2;
  GetMem(PatchData, PatchLength);
  try
    for i := 0 to PatchLength - 1 do begin
      PatchByte := StrToInt('0x'+PatchDataStr[10 + i * 2] + PatchDataStr[10 + i * 2 + 1]);
      Byte(Pointer(Integer(PatchData) + i)^) := PatchByte;
    end;
    GetWindowThreadProcessId(Application.Handle, PID);
    PHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
    WriteProcessMemory(PHandle, Pointer(PatchAddress), PatchData, PatchLength, WriteCount);
    CloseHandle(PHandle);
  finally
    FreeMem(PatchData, PatchLength);
  end;
  Result := PatchLength = WriteCount;
end;

Button1.Click
begin
  PatchOnItem(Edit1.Text);
  ShowMessage('恭喜');//把这个手动改一下,我只把mov改成jmp,结果导致了花指令效果,无心插柳:)
end;
//处理函数对补丁没有长度限制,因此你可以处理任意长度。
//如果把大量核心代码用这种方式处理,相信在没有已知的sn的情况下,是无法破解的,各位以为如何?
//既然已经被破了,现在给出官方sn:00479E7C,B8CC9E4700
//期待破文的出现, 并希望大家讨论一下这种方法能否达到实践上的不可破解

//这个函数来自我的blog,虽然已经很久没更新了,还是欢迎大家光临^O^
//http://borland.mblogger.cn/lw549/posts/31776.aspx
2007-2-28 11:59
0
雪    币: 220
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
原来官方sn是这副模样
2007-2-28 12:08
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
最初由 fonge 发布
bug巨多
至少是在我机器上(输入测试法)!

如果做一下内存检测,就没有bug了,那样的话,除了官方sn外没有别的sn可以通过
其实是我太懒惰了,罪过罪过
2007-2-28 12:17
0
雪    币: 372
活跃值: (31)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
12
对549只能膜拜~~
2007-2-28 12:27
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
13
完全看不懂,插不上话!
2007-2-28 12:49
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
14
最初由 fiveFN 发布
//如果把大量核心代码用这种方式处理,相信在没有已知的sn的情况下,是无法破解的,各位以为如何?
//既然已经被破了,现在给出官方sn:00479E7C,B8CC9E4700
//期待破文的出现, 并希望大家讨论一下这种方法能否达到实践上的不可破解

两点问题:
1――――――sn:00479e7c06A0068CC9E470068CC9E47006A00E8A174F8FF90
并不是你的官方SN!

2――――――引用一段牛人的回贴
引用第6楼zhangmin2007-02-03 00:20发表的:
很多年前考过高级程序员,去年花了三个月把国外一个磁盘还原驱动百分之百地逆向了,
大约一两万行汇编代码,不知是否有资格加入你们小组

对于这样的人以及他要加入的组织来说……
汗颜中……
2007-2-28 13:02
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
最初由 fonge 发布
两点问题:
1――――――sn:00479e7c06A0068CC9E470068CC9E47006A00E8A174F8FF90
并不是你的官方SN!


........


1.这里仅仅调用一个showmessage,因此破解的难度非常小。如果我把需要处理的地方扩大到1024byte。而且这1024byte是软件的核心算法的一部分,有几个人能破呢?这里只是说明一个思路,点到为止,呵呵。

2.我的exe中根本就没有他想得到的代码,逆向有什么用呢?

比如说我这个crackme,如果我不说破解成功后会怎样,还有可能破解吗?
2007-2-28 13:42
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
16

思路很了不起!
写死了
一路上都走成功才能走到成功的地方!
2007-2-28 14:29
0
雪    币: 226
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
在我看来没有破不了的东西,如果一个程序包含了所有的代码,而不是仅仅是个试用版,那么就一定有办法将其激活,本人比较懒,在破解的路上一向善于爆破(至今已爆软件N多,难度大的最多就是多暴几处而已),没有耐心去分析算法,毕竟是自己用的,而不是作出注册机打破软件作者的饭碗,毕竟大家都是搞技术的,都不容易.
2007-2-28 15:19
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
18
我支持你!~~~
2007-3-2 00:39
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
19
最初由 fiveFN 发布
1.这里仅仅调用一个showmessage,因此破解的难度非常小。如果我把需要处理的地方扩大到1024byte。而且这1024byte是软件的核心算法的一部分,有几个人能破呢?这里只是说明一个思路,点到为止,呵呵。

2.我的exe中根本就没有他想得到的代码,逆向有什么用呢?

比如说我这个crackme,如果我不说破解成功后会怎样,还有可能破解吗?


有创意
不过这种Key解码,有一个正版就能破解了
2007-3-3 11:17
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
20
最初由 海风月影 发布
有创意
不过这种Key解码,有一个正版就能破解了

既然老大都发话了,我也把我想说的话说出来!
function PatchOneItem(PatchItem: String): Boolean;

这个函数再强,也就是一个boolean!没有什么加密强度可言!

确实,加密方式很经典!学习中……
2007-3-3 12:55
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
最初由 海风月影 发布
有创意
不过这种Key解码,有一个正版就能破解了


同意你的观点,这的确是它的软肋,我目前还没有办法解决。
不知道你有何高见,还望指教。

to: fonge
关于强度问题,那个函数的返回值是用来判断是否patch成功的,不是用来判断patch内容是否正确的。就算你让它返回true或者跳过它都是没用的。
2007-3-5 09:18
0
雪    币: 156
活跃值: (394)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
22
期待详细的破文
的确很有创意,不过这种patch的方法作加密不太合适,有一个key就全搞定了
2007-3-5 16:23
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
23
总算看懂一丁点了,
2007-3-7 18:04
0
游客
登录 | 注册 方可回帖
返回
//