能力值:
( LV6,RANK:90 )
2 楼
超级字符串查找
0048C82C |. 6A 40 push 40
0048C82E |. B9 ACC84800 mov ecx, 0048C8AC ; 恭喜你
0048C833 |. BA B4C84800 mov edx, 0048C8B4 ; 注册成功!请联系我!qq:609841314
0048C838 |. A1 D0EB4800 mov eax, [48EBD0]
0048C83D |. 8B00 mov eax, [eax]
往上面看
0048C748 |. 8B45 FC mov eax, [ebp-4]
0048C74B |. E8 CC79F7FF call 0040411C ; 注册名
0048C750 |. 83F8 10 cmp eax, 10 ; 注册名不能超过16位,否则退出
0048C753 |. 0F8F EB000000 jg 0048C844
0048C759 |. 8B45 F8 mov eax, [ebp-8]
0048C75C |. E8 BB79F7FF call 0040411C ; 注册码
0048C761 |. 83F8 11 cmp eax, 11 ; 注册码长度不能少于16位
0048C764 0F8C DA000000 jl 0048C844 ; 爆破点,修改为jmp到成功点
测试
用户名:xiaohui_82
注册码:852741
上传的附件:
能力值:
( LV12,RANK:530 )
3 楼
//不是把。。。
//刚才仔细看了看,写了一个版本的注册机,能算出注册码,但是不是很满意,有点投机呵呵
//大家将就看看,希望对你们的分析有帮助
#include <stdio.h>
#include <string.h>
#define MAX_LEN_OF_STRING 50
int main()
{
const int MIN_LEN_OF_NAME=10;
const int MAX_LEN_OF_NAME=24;
char name[MAX_LEN_OF_STRING]="";
char sn[MAX_LEN_OF_STRING]="";
char magicString[]="i am Bin Laden";
int lenOfName,
lenOfMagicString,
lastCharIndex,
lenOfSerial;
int i,j;
//录入用户名,确保符合长度
do{
printf("Plz input your name:");
scanf("%s", name);
lenOfName = strlen(name);
if(lenOfName < MIN_LEN_OF_NAME)
printf("Name should be at least %d characters!\r\n", MIN_LEN_OF_NAME);
else if(lenOfName > MAX_LEN_OF_NAME)
printf("Name should no more than %d characters!\r\n", MAX_LEN_OF_NAME);
else
goto goodway;
}while(1);
goodway:
strcat(name,magicString);
//下面的计算保证10位的用户名对应17位的序列号
lenOfMagicString = strlen(magicString);
lastCharIndex = lenOfName+lenOfMagicString-3;
for(i=0; i<26; i++)
{//穷举得到序列号第一位
if(((name[lastCharIndex]*(i+0x41)-i)%26)==0)
{
sn[0]=0x41+i;
break;
}
}
//每一位的计算都用到了第一位,然后用倒叙存储
for(i=1,j=lastCharIndex-1;
j>=5;
i++,j--)
sn[i]=((name[j]*sn[0])%26) + 0x41;
lenOfSerial = lastCharIndex - 5 + 1;
sn[lenOfSerial]='\0';
printf("The serial number is %s .\r\n", sn);
getch();
return 0;
}
能力值:
( LV9,RANK:290 )
4 楼
呵呵!谢谢兄弟们支持!
我本人不是很支持爆破,
因为本程序没有使用任何的防暴技术!
4nil分析的不错!
佩服!!!!
有时间我再写一个!呵呵!
能力值:
( LV9,RANK:290 )
5 楼
procedure TForm1.Button1Click(Sender: TObject);
var
name,code,laden,tiger,str:string;
i,j:integer;
part:array[1..100]of char;
begin
name:=edit1.Text;
code:=edit2.Text;
laden:='i am Bin Laden';
tiger:='i am yi zhi lao hu';
if (length(name)<10) or (length(name)>16) then
exit;
if (length(code)<17) or (length(code)>22) then
exit;
name:=name+laden;
for i:=1 to 100 do
part[i]:='.';
for i:=1 to length(name) do
for j:=1 to length(tiger) do
part[i+j]:=chr(((ord(name[i])*ord(code[j]))mod 26)+65);
str:='';
for i:=1 to length(code) do
str:=part[i+6]+str;
if str=code then
Application.MessageBox('注册成功!请联系我!QQ:609841314','恭喜你',MB_ICONINFORMATION+MB_OK);
end; 这是原代码!呵呵!!写的不好!
能力值:
( LV2,RANK:10 )
6 楼
我可以爆破啦,算法有点头痛啊
能力值:
( LV2,RANK:10 )
7 楼
下来分析分析算法。。。
能力值:
( LV13,RANK:760 )
8 楼
这样的如果也爆破的话,真的就什么也学不到了……
能力值:
( LV2,RANK:10 )
9 楼
2006年的帖子 被你拉回到现在
能力值:
( LV6,RANK:80 )
10 楼
多年前的帖子还是能学习的。。。。
能力值:
( LV2,RANK:10 )
11 楼
刚刚接触汇编,正在学习中啊。。。。
能力值:
( LV2,RANK:10 )
12 楼
不知道为什么会被杀软报毒?。。NOD32 ESS
能力值:
( LV2,RANK:10 )
13 楼
看看··············