飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3234|回复: 7

[小试锋芒申请加入]CrackMe V2.2 设计思路+源码 (九宫格)

[复制链接]
  • TA的每日心情
    慵懒
    2019-4-26 10:19
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    发表于 2009-12-30 10:54:47 | 显示全部楼层 |阅读模式
    CrackMe V2.2里面的算法模型采用的是九宫格的数学游戏,先简单介绍下九宫格的游戏吧,O(∩_∩)O~

    “九宫格”是我国书法史上临帖写仿的一种界格,又叫“九方格”,即在纸上画出若干大方框,再于每个方框内分出九个小方格,以便对照法帖范字的笔画部位进行练字。
    九宫格游戏对人们的思维锻炼有着极大的作用,从古时起人们便意识到九宫的教育意义。千百年来影响巨大,在文学、影视中都曾出现过。九宫格最早叫“洛书”,现在也叫“幻方” 。

    游戏规则:在3×3方格里,填入1至9九个数字,使每行、每列以及两个对角线上的三数之和都等于15。

    在《射雕英雄传》中黄蓉曾破解九宫格,口诀:戴九履一,右三左七,二四为肩,六八为足。
    还有口诀:“一居上行正中央,依次斜填切莫忘;上出框时向下放,右出框时向左放;排重便在下格填,右上排重一个样。” 这口诀不仅适用于九宫,也适用于推广的奇数九宫,如五五图、七七图等等。



    下面就是设计思路:
    1.先定义一个3*3的数组tb来设计出9个格子:
    1. var
    2.   UserName,RegCode:string;
    3.   i,j,reg:integer;
    4.   tb:array[1..9] of byte;
    复制代码
    2.将用户名和注册码进行简单的运算得出9个数字来,并将这9个数字填充到刚生成的9个格子中,也即数组中去。
    1. begin
    2.   if (length(edit1.Text)>0) and (length(edit2.Text)>=9) then
    3.   try
    4.     begin
    5.       UserName:=edit1.Text;
    6.       RegCode:=edit2.Text;
    7.       reg:=0;
    8.       //处理用户名使之长度>=9
    9.       while length(UserName)<9 do
    10.       begin
    11.         UserName:=UserName+'A';
    12.       end;

    13.       for i:=1 to 9 do
    14.       begin
    15.         tb[i]:=abs(ord(UserName[i])-ord(RegCode[i]));//填充9个格子
    16.         for j:=2 to i-1 do    //每填一个格子,就要把从第二个格子开始的数字和新填的数字进行比较,不能相同,相同就挂!
    17.         begin
    18.           if tb[j]=tb[i] then exit;
    19.         end;
    20.       end;
    复制代码
    3.填好数字以后,就是比较是否满足要求了,也即每一行,每一列和对角线的数据之和是否等于15,如果不等则失败,相等则成功。
    1. if tb[3]+tb[5]+tb[7]<>15 then reg:=reg+1;   //对角线/的数据之和必须=15
    2.       UserName:=chr(87);
    3.       for i:=1 to 3 do
    4.       begin
    5.         if tb[3*(i-1)+1]+tb[3*(i-1)+2]+tb[3*(i-1)+3]<>15 then reg:=reg+1;  //每一行的数据之和必须=15
    6.         if tb[i]+tb[i+3]+tb[i+6]<>15 then reg:=reg+1;    //每一列的数据之和必须=15
    7.       end;
    8.       UserName:=UserName+chr(105);
    9.       if tb[1]+tb[5]+tb[9]<>15 then reg:=reg+1;   //对角线\的数据之和必须=15
    10.       UserName:=UserName+chr(110)+chr(33);
    11.       i:=j div reg;             //利用除数为0来异常处理弹出成功注册框
    12.       RegCode:=inttostr(i*j*8);        //用来迷惑破解者的!
    13.   end;
    14.   except
    15.     begin
    16.       showmessage(UserName);
    17.     end;
    18.   end;
    复制代码

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2009-12-30 11:31:20 | 显示全部楼层
    哈哈~~ 九宫有误~~

    洛书九宫应该是(详见周易):

    戴九履一,左三右七,四二为肩,八六为足。

    4  9  2
    3  5  7
    8  1  6
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2009-12-30 11:31:51 | 显示全部楼层
    恭喜通过
    PYG19周年生日快乐!
  • TA的每日心情

    2017-6-17 16:59
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-12-30 12:56:47 | 显示全部楼层
    恭喜小试锋芒兄弟通过哈。。膜拜下。。。
    偶的差距实在是太远了
    PYG19周年生日快乐!
  • TA的每日心情

    2015-11-21 19:12
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-12-30 13:04:19 | 显示全部楼层
    牛人 膜拜
    我们这批 你第一个/:good
    PYG19周年生日快乐!
  • TA的每日心情

    2017-7-19 15:45
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-12-30 13:10:30 | 显示全部楼层
    恭喜恭喜/:09
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2009-12-30 13:49:29 | 显示全部楼层
    哈哈,恭喜兄弟了哈!/:09
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-1-2 14:53:26 | 显示全部楼层
    恭喜锋芒兄哈
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表