能力值:
( LV5,RANK:60 )
|
-
-
26 楼
findlakes
BFC186709E2D7DC9
|
能力值:
( LV15,RANK:2473 )
|
-
-
27 楼
还是直接diy个成品代码吧,大家可以专心搞算法了:
00402720 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8]
00402724 8D42 08 LEA EAX,DWORD PTR DS:[EDX+8]
00402727 50 PUSH EAX
00402728 52 PUSH EDX
00402729 E8 823A0000 CALL 004061B0
0040272E 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8]
00402732 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C]
00402736 8B02 MOV EAX,DWORD PTR DS:[EDX]
00402738 8901 MOV DWORD PTR DS:[ECX],EAX
0040273A 8B42 04 MOV EAX,DWORD PTR DS:[EDX+4]
0040273D 8941 04 MOV DWORD PTR DS:[ECX+4],EAX
00402740 B8 01000000 MOV EAX,1
00402745 C2 1000 RETN 10
|
能力值:
( LV9,RANK:230 )
|
-
-
28 楼
中午休息时,跟了半小时,没发现你的问题。
考虑到我的OD没用反调试插件(做CRACK ME的习惯),调试选项里异常都没选。
推测是你的反调试没到位。
一次调试,如注册失败,必须将CRACK ME 完全退出,重新打开,重新调试。推测
内存中有一个变量控制,结果是50时,进行假注册码处理;为-1时,就会发生你说的
情况。
这个CRACK ME 的重点应该是反调试,而不是算法,这是
我中午跟的体会。我偷懒设个内存断点,就当机了。由于我是纯手工反调试的,所以
又重启了几回,不想跟了。在我的机器上,对假注册码的处理结果存入12F848,后赋值
到12F808,最后赋值给ESI,与EDI的值比邻而居。
|
能力值:
(RANK:500 )
|
-
-
29 楼
奇怪 , 我没有加没有任何反调试啊。纯算法
|
能力值:
(RANK:410 )
|
-
-
30 楼
多谢几位热心指点。晚上有时间的话去跟一下。
|
能力值:
( LV9,RANK:230 )
|
-
-
31 楼
使用反调试插件时,正常运行。但那个变量为-1,不是50。
去除反调试插件,手工绕过几处,为50,就会跟进入MSCRT的领空。特别是刚载入时,
OD自动退出。
|
能力值:
( LV15,RANK:2473 )
|
-
-
32 楼
没有任何anti,原版od不用任何插件可以正常调试
|
能力值:
( LV9,RANK:230 )
|
-
-
33 楼
是吗?我晚上回去查查我的电脑。会不会是驱动的缘故?真奇怪了。
咨询了一位朋友,他认为是驱动的原因。他那两台运行正常,一台有类似反调试的现象。
我这在WIN2000下的机器根本进不了处理假码的地方,一台WIN XP不正常。似乎需要一定的运行环境。
和朋友讨论了一会,应该是驱动的原因。
因为类似反调试的情况发生在两个地方:一个是CRACK ME刚运行时,一个是跟进驱动领空时。刚才在同事电脑上测试了一下,这种现象很明显。直接附加,没有类似反调试的现象。估计驱动的载入及运行需要一定的条件。
|
能力值:
( LV9,RANK:230 )
|
-
-
34 楼
昨夜研究了一下我机子遇到的问题,证实是驱动的原因。
理由:
1.运行CRACE ME,出现驱动安装失败。这时,就会出现我遇到的问题。
询问朋友,他感觉是有这个印象。
没有出现驱动安装失败的提示的机子,没有问题。
2.查看我的破解记录,ESI的值记录都是零。也就是说,没有经过驱动的处理。
3.用你的方法,一切正常。但关机后重新开机,问题又会出现。
感谢各位大侠的帮助,以后好好研究驱动的问题。
|
能力值:
(RANK:410 )
|
-
-
35 楼
是什么算法?搞不懂。
f5改了改,是这样的吗?
int __stdcall sub_402E00(int *RegcodeHex, int *Para)
{
unsigned int rcint[0]; // [sp+24h] [bp-8h]@1
unsigned int rcint[1]; // [sp+14h] [bp-18h]@1
unsigned int keyconst; // [sp+8h] [bp-24h]@1
unsigned int key1; // [sp+18h] [bp-14h]@1
int para[0]; // [sp+28h] [bp-4h]@1
int para[1]; // [sp+1Ch] [bp-10h]@1
int para[2]; // [sp+Ch] [bp-20h]@1
int para[3]; // [sp+10h] [bp-1Ch]@1
unsigned int tmpi; // [sp+20h] [bp-Ch]@1
int keyB1; // [sp+4h] [bp-28h]@3
int keyB2; // [sp+0h] [bp-2Ch]@10
rcint[0] = *RegcodeHex;
rcint[1] = *(RegcodeHex + 1);
keyconst = 0x6D3579A9;
key1 = 0;
para[0] = *Para;
para[1] = *(Para + 1);
para[2] = *(Para + 2);
para[3] = *(Para + 3);
tmpi = 0;
for(tmpi=0;tmpi<32;tmpi++)
{
keyB1 = key1 & 0x00000011;
switch (keyB1)
{
case 0:
rcint[0] += para[0] + ((rcint[1] >> 5) ^ (rcint[1]<<4)) + (rcint[1] ^ key1);
break;
case 1:
rcint[0] += para[1] + ((rcint[1] >> 5) ^ (rcint[1]<<4)) + (rcint[1] ^ key1);
break;
case 2:
rcint[0] += para[2] + ((rcint[1] >> 5) ^ (rcint[1]<<4)) + (rcint[1] ^ key1);
break;
case 3:
rcint[0] += para[3] + ((rcint[1] >> 5) ^ (rcint[1]<<4)) + (rcint[1] ^ key1);
break;
}
key1 += keyconst;
keyB2 = (key1 >> 11) & 0x00000011;
switch (keyB2)
{
case 0:
rcint[1] += para[0] + ((rcint[0] >> 5) ^ (rcint[0]<<4)) + (rcint[0] ^ key1);
break;
case 1:
rcint[1] += para[1] + ((rcint[0] >> 5) ^ (rcint[0]<<4)) + (rcint[0] ^ key1);
break;
case 2:
rcint[1] += para[2] + ((rcint[0] >> 5) ^ (rcint[0]<<4))+ (rcint[0] ^ key1);
break;
case 3:
rcint[1] += para[3] + ((rcint[0] >> 5) ^ (rcint[0]<<4))+ (rcint[0] ^ key1);
break;
}
}
*RegcodeHex = rcint[0];
*(RegcodeHex + 1) = rcint[1];
return RegcodeHex;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
36 楼
以前xikug有一篇windbg双机调试的驱动的程序
不知道单机如何动态调试??
|
能力值:
( LV4,RANK:50 )
|
-
-
37 楼
不知道是什么东东..
|
能力值:
( LV9,RANK:140 )
|
-
-
38 楼
|
能力值:
( LV9,RANK:420 )
|
-
-
39 楼
继续关注
|
能力值:
(RANK:500 )
|
-
-
40 楼
26 楼已经给出一组正确的注册码了
|
能力值:
(RANK:410 )
|
-
-
41 楼
26只给出了注册码。
看不懂算法。。。。
|
能力值:
( LV9,RANK:420 )
|
-
-
42 楼
同意楼上意见~ 挺喜欢humourkyo写的CM的,虽然我不会玩
|
|
|