能力值:
( LV2,RANK:10 )
|
-
-
2 楼
只是提供一种思路,这个破解难度不大,把破解难度加100倍是很容易的事情。我相信增加100倍可以做到不可破解。不知朋友们以为如何。
如有错误之处,还望各位朋友不吝赐教。
|
能力值:
( 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 语句!
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
00479e7c06A0068CC9E470068CC9E47006A00E8A174F8FF90
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
yugung好厉害!
|
能力值:
( LV12,RANK:410 )
|
-
-
6 楼
强
|
能力值:
( LV9,RANK:210 )
|
-
-
7 楼
不知道你们在说什么!
支持详细破文,支持开源!
|
能力值:
( LV9,RANK:210 )
|
-
-
8 楼
bug巨多
至少是在我机器上(输入测试法)!
|
能力值:
( 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
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
原来官方sn是这副模样
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
最初由 fonge 发布 bug巨多 至少是在我机器上(输入测试法)!
如果做一下内存检测,就没有bug了,那样的话,除了官方sn外没有别的sn可以通过
其实是我太懒惰了,罪过罪过
|
能力值:
( LV12,RANK:410 )
|
-
-
12 楼
对549只能膜拜~~
|
能力值:
( LV9,RANK:210 )
|
-
-
13 楼
完全看不懂,插不上话!
|
能力值:
( LV9,RANK:210 )
|
-
-
14 楼
最初由 fiveFN 发布 //如果把大量核心代码用这种方式处理,相信在没有已知的sn的情况下,是无法破解的,各位以为如何? //既然已经被破了,现在给出官方sn:00479E7C,B8CC9E4700 //期待破文的出现, 并希望大家讨论一下这种方法能否达到实践上的不可破解
两点问题:
1――――――sn:00479e7c06A0068CC9E470068CC9E47006A00E8A174F8FF90
并不是你的官方SN! 2――――――引用一段牛人的回贴
引用第6楼zhangmin于2007-02-03 00:20发表的: 很多年前考过高级程序员,去年花了三个月把国外一个磁盘还原驱动百分之百地逆向了, 大约一两万行汇编代码,不知是否有资格加入你们小组
对于这样的人以及他要加入的组织来说……
汗颜中……
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
最初由 fonge 发布 两点问题: 1――――――sn:00479e7c06A0068CC9E470068CC9E47006A00E8A174F8FF90 并不是你的官方SN!
........
1.这里仅仅调用一个showmessage,因此破解的难度非常小。如果我把需要处理的地方扩大到1024byte。而且这1024byte是软件的核心算法的一部分,有几个人能破呢?这里只是说明一个思路,点到为止,呵呵。
2.我的exe中根本就没有他想得到的代码,逆向有什么用呢?
比如说我这个crackme,如果我不说破解成功后会怎样,还有可能破解吗?
|
能力值:
( LV9,RANK:210 )
|
-
-
16 楼
嗯
思路很了不起!
写死了
一路上都走成功才能走到成功的地方!
|
能力值:
( LV3,RANK:20 )
|
-
-
17 楼
|
能力值:
( LV9,RANK:290 )
|
-
-
18 楼
我支持你!~~~
|
能力值:
(RANK:1130 )
|
-
-
19 楼
最初由 fiveFN 发布 1.这里仅仅调用一个showmessage,因此破解的难度非常小。如果我把需要处理的地方扩大到1024byte。而且这1024byte是软件的核心算法的一部分,有几个人能破呢?这里只是说明一个思路,点到为止,呵呵。
2.我的exe中根本就没有他想得到的代码,逆向有什么用呢?
比如说我这个crackme,如果我不说破解成功后会怎样,还有可能破解吗?
有创意
不过这种Key解码,有一个正版就能破解了
|
能力值:
( LV9,RANK:210 )
|
-
-
20 楼
最初由 海风月影 发布 有创意 不过这种Key解码,有一个正版就能破解了
既然老大都发话了,我也把我想说的话说出来!
function PatchOneItem(PatchItem: String): Boolean;
这个函数再强,也就是一个boolean!没有什么加密强度可言!
确实,加密方式很经典!学习中……
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
最初由 海风月影 发布 有创意 不过这种Key解码,有一个正版就能破解了
同意你的观点,这的确是它的软肋,我目前还没有办法解决。
不知道你有何高见,还望指教。
to: fonge
关于强度问题,那个函数的返回值是用来判断是否patch成功的,不是用来判断patch内容是否正确的。就算你让它返回true或者跳过它都是没用的。
|
能力值:
( LV2,RANK:15 )
|
-
-
22 楼
期待详细的破文
的确很有创意,不过这种patch的方法作加密不太合适,有一个key就全搞定了
|
能力值:
( LV9,RANK:210 )
|
-
-
23 楼
总算看懂一丁点了,
|
|
|