能力值:
( LV2,RANK:10 )
|
-
-
2 楼
试试能不能爆破,没办法··菜鸟
|
能力值:
( LV5,RANK:60 )
|
-
-
3 楼
对应的用户名的SN俺无法算出来....
贴个可用的用户名和SN
用户名:hflywolf
注册码:xenzoaru
发个注册机........
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
貌似算法很简单
用户名:wtybaj
注册码:cpyvub
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
用户名:scvyes
注册码:calnis
由注册码推用户名方便些!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
nop三个跳就能爆破了..菜鸟
求攻略
|
能力值:
( LV8,RANK:130 )
|
-
-
7 楼
name:wgtlfafq
sn:ccbszhxd
名字与注册码必须为字母,且个数相同,大小字没有关系
算法部分我来注释:
004016E0 XOR EDI, EDI ; EDI=0,CF=0 //自身xor运算结果为0,CF=0
004016E2 CDQ ; 将EAX中的最高位符号扩展到EDX中
004016E3 SUB EAX, EDX ; EAX=0x8 //EAX=0x8-0x0
004016E5 MOV EBP, EAX ; EBP=0x8
004016E7 SAR EBP, 1 ; EBP=0x4 //SAR EBP>>0x1 移出的数据进入标志位CF
004016E9 CMP EBP, EBX ; ZF=0 //EBP=0x4,EBX=0x0
004016EB JLE SHORT 0040173E ; 不跳 //ZF=0;当比较结果是小于或等于时,才跳
004016ED MOV CL, BYTE PTR SS:[ESP+EDI*2+11] ; CL=0x53 ('S') //SS段[12F553] (ASCII字符串:"SZHXD")
004016F1 MOV AL, BYTE PTR SS:[ESP+EDI*2+10] ; AL=0x43 ('C') //SS段[12F550] (ASCII字符串:"CCBSZHXD")
004016F5 SUB CL, 41 ; CL=0x2 //CL=0x43-0x41 //把ascii文本大写字母变成十进制数字,A=0
004016F8 SUB AL, 41 ; AL=0x2 //AL=0x43-0x41 //把ascii文本大写字母变成十进制数字,A=0
004016FA MOVSX ESI, CL ; ESI=0x2;ESI多于CL的高位由符号填充
004016FD MOVSX ECX, AL ; ECX=0x2;ECX多于AL的高位由符号填充
00401700 MOV EBX, 1A ; EBX=0x1A
00401705 LEA EDX, DWORD PTR DS:[ECX+ECX*8] ; EDX=0x12
00401708 LEA EAX, DWORD PTR DS:[EDX+ESI*2] ; EAX=0x16
0040170B CDQ ; 将EAX中的最高位符号扩展到EDX中
0040170C IDIV EBX ; EAX=0x0;EDX=0x16 //除法运算,商在EAX中,余数在EDX中
0040170E MOVSX EAX, BYTE PTR SS:[ESP+EDI*2+D8] ; EAX=0x57 ('W') //SS段[12F618] (ASCII字符串:"WGTLFAFQ")
00401716 SUB EAX, 41 ; EAX=0x16 //EAX=0x57-0x41 //把ascii文本大写字母变成十进制数字,A=0
00401719 CMP EDX, EAX ; ZF=1 //EDX=0x16,EAX=0x16
0040171B JNZ SHORT 0040174E ; 不跳 //ZF=1;当比较结果是不等于时,才跳
0040171D LEA EAX, DWORD PTR DS:[ESI+ESI*2] ; EAX=0x6
00401720 LEA ECX, DWORD PTR DS:[ECX+EAX*4] ; ECX=0x1A
00401723 ADD EAX, ECX ; EAX=0x20 //EAX=0x6+0x1A
00401725 MOV ECX, EBX ; ECX=0x1A
00401727 CDQ ; 将EAX中的最高位符号扩展到EDX中
00401728 IDIV ECX ; EAX=0x1;EDX=0x6 //除法运算,商在EAX中,余数在EDX中
0040172A MOVSX EAX, BYTE PTR SS:[ESP+EDI*2+D9] ; EAX=0x47 ('G') //SS段[12F619] (ASCII字符串:"GTLFAFQ")
00401732 SUB EAX, 41 ; EAX=0x6 //EAX=0x47-0x41 //把ascii文本大写字母变成十进制数字,A=0
00401735 CMP EDX, EAX ; ZF=1 //EDX=0x6,EAX=0x6
00401737 JNZ SHORT 0040174E ; 不跳 //ZF=1;当比较结果是不等于时,才跳
00401739 INC EDI ; EDI=(0x0)++
0040173A CMP EDI, EBP ; ZF=0 //EDI=0x1,EBP=0x4
0040173C JL SHORT 004016ED ; 跳到004016ED //ZF=0,SF!=OF
0040173E POP EDI
0040173F POP ESI
00401740 POP EBP
00401741 MOV EAX, 1
00401746 POP EBX
00401747 ADD ESP, 190
0040174D RETN
0040174E POP EDI
0040174F POP ESI
00401750 POP EBP
00401751 XOR EAX, EAX
00401753 POP EBX
00401754 ADD ESP, 190
0040175A RETN
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
新人悄悄地问下, 这种程序如何下段。。。
用 bp GetWindowTextA断下来的老是不对....
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
谁能给点入手的提示啊~ 谢谢了,不知道怎么拦截到啊....
555....
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
你试试GetDlgItemTextA
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
这些都试过了,断不下来的。 只是知道入口是402020
消息也试了下,也断不下来
|
能力值:
( LV12,RANK:210 )
|
-
-
14 楼
慢慢来,不要着急!
跟的方法有很多的!
比如截取相关的API,在比如找按钮的ID,进而在定位代码……
谁都是这样过来的!~~
再说了,我也是新手~所以我写的这个不难的~~~
加油,你会成功的!
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
记得你的CrackMe很牛噢。。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
GetDlgItemTextA断不下来的
楼主使用的是mfc里面的UpdateData(TRUE),直接把edit数据更新到关联的string对象,然后判断后,再UpdateData(FALSE)刷出来显示结果;还是断UpdateData吧
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
输入是合法字符后才能用GetDlgItemTextA 断到,否则只能断UpdateData,最起始的地方
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
收着 有时间看看
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
新手 现在断点都找不到,谁给个提示谢谢 事件和api的 GetDlgItemTextA,GetWindowTextA里面都找不到啊,我的必杀字符串搜索也不行.
|
能力值:
( LV12,RANK:210 )
|
-
-
20 楼
新手 现在断点都找不到,谁给个提示谢谢 事件和api的 GetDlgItemTextA,GetWindowTextA里面都找不到啊,我的必杀字符串搜索也不行. 我用的是MFC写的程序,不是用的WIN32API编程~~但是还是可以断到的!
至于字符串,我把它XOR操作了,如果你能看明白程序的话,可以再XOR回来,你的字符串搜索就有用了!
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
爆破会气坏破船大哥的
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
bp GetDlgItemTextA
|
能力值:
( LV12,RANK:271 )
|
-
-
23 楼
实质就是解方程
(9(x - 0x41)+ 2(y - 0x41)) % 26 = a - 0x41
((x - 0x41) + 15(y- 0x41)) % 26 = b - 0x41
用户名和key是两个字母为一组关联的。 其中a,b表示名字的第2n+1,2n +2个大写字母.
x,y为注册码的第2n+1,2n +2个大写字母.
所以要求用户名为偶数个字母。
下面是一个我写的注册码参考实现。
void foo1(char* name, char* key)//这里假定name, key都是可写的,且长度相等。
{
int len = ::strlen(name);
if(len % 2 == 1)
{
*(name + len - 1) = '\0';
}
::_strupr(name);
len /= 2;
for(int i = 0; i < len; i++)
{
int k1, k2, n1 = *(name + i* 2 ) - 0x41, n2 = *(name + i * 2 + 1) - 0x41;
for(char t1 = 0; t1 < 26; t1++)
for(char t2 = 0; t2 < 26; t2++)
{
if( ((9 * t1 + 2 * t2) % 26 == n1) && ((t1 + 15 * t2 ) % 26 == n2))
{
*(key + i* 2 ) = t1 + 0x41;
*(key + i* 2 +1) = t2 + 0x41;
goto find;
}
}
find:
;
}
}
至于断点,我开始也不知道下再那里。不过代码很小,所以我直接读了一遍,发现他是调用
00401670 |. E8 4F090000 call <jmp.&MFC42.#3098_CWnd::GetDlgItemTextA>
来获取数据的,然后尝试在这个函数上下断点,发现是可以断住的,以后再遇到VC6.0做的MFC程序就可以先试试这个函数。
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
谁帮我搞定这个,破解万分感谢.4
对高手来说.这个肯定是十分简单的.4
http://www.netcoole.com/download/delphi2cs.zip
|