name 的个人资料日志列表 工具 帮助

OICQ:2188669
没有可用类别。
2006/11/1

关于C-Free V3.5.2注册码

RE OS以后,今天又掏出C-Free V3.5.2,安装完毕,依照老方法,打开注册机,填入机器号,生成机器码……

居然不行!!!
去了C-Free论坛,发现C-Free V3.5.2是依据C盘编码来进行分配机器码的。也就是说,重新安装操作系统后,C盘的编码会改变,原来的注册码也就不行了。但是注册机为什么也不行了?

管不了那么多了,拿出ASPack 2.12脱壳。用ASPackDie反编译……


具体分析结果如下:

第一次循环:机器码异或0x90909090的结果除以前面求得的压栈的余数,然后这个过程的余数写入内存保留,商作为下一次循环的变量继续循环。第二次循环:将第一次循环中写入内存的值逆序读取出来,同0xA比较,小于就直接加上0x30,作为注册码的第i个字符写入内存;大于等于则加上61,再加0xF6,取低字节作为注册码的第i个字符写入内存。用户名没有参与计算。也不知道我说明白了没有,语言能力下降得厉害!还是看程序来得直接,C源码的注册机:

 

#include "stdafx.h"
#include "stdlib.h"
#include "stdio.h"


int main(int argc, char* argv[])
{
  char chKey[128] = {0};
  unsigned int unXORCode, unRemainder, unQuotient, unTmp, unMachineCode;
  printf("Please Key in the Machine Code:\n");
  scanf("%d", &unMachineCode);

  unXORCode   = unMachineCode ^ 0x90909090;
  unRemainder = unXORCode % 0x25;
  unQuotient  = unXORCode;
  if (unRemainder < 0x11)
  {
    unRemainder += 0x11;
  }

  int i;
  i = 0;
  while (unQuotient != 0)
  {
    unTmp    = unQuotient % unRemainder;
    unQuotient /= unRemainder;
    if (unTmp >= 0xa)
    {
      unTmp = unTmp + 0x61 + 0xf6;
      unTmp &= 0x0ff;
      chKey[i] = unTmp;
    }
    else
    {
      chKey[i] = unTmp + 0x30;
    }
    i++;
  }
  printf("Key is: \n");
  while (i >= 0)
  {
    printf("%c", chKey[i]);
    i--;
  }
  printf("\n");

  return 0;
}

执行后,输入机器码,便可以得到注册码。
到此结束。

关于编译器与优先级

很长时间被C中,递增,递减折磨.

例:

  求一个表达式的值:      
      main()  
          {  
              int   a = 4;  
              a   =   (++a)   +   (++a)   +   (++a)   
              printf("%d",a);  
          }  

 

使用Free c/c++编译得21,使用vc得12.
百思不得其解!

今天无意中提到这个问题,panda_lin一语点醒梦中人.

"这个东西和编译器相关的。既然你算出了21,那我就给你个合理解释。首先,编译器认为++的优先级高,算了3遍,a的值变为7,然后就是做加法了,编译器就认为是x   +   x   +   x,结果就是21了!  
  在vc下面结果是12,因为+的优先级高!"

经典,并且合理.

哈希表概论

mIRC的哈希表
 
mIRC竟然可以使用哈希表!我是半年前在一个国外IRC网站上瞎逛时意外得知的,至于是从哪个版本开始支持的,我也懒得从versions.txt里查了(虽然这份几十页的资料我早已打印出来放在身边),总之我当时是为之震憾的,因为,我的Palbot必须重新写过了!

我记得有个叫GrimZ的人在他的教程文章中写道:菜鸟用变量,一般人用INI文件,高手用哈希表.这样说或许有些偏颇,但的确有道理!

我在Palbot 0.9X版中大量使用了类似于 "set %color_ [ $+ [ %window ] ] 黑色" 的形式的变量设置以使得bot能在不同的窗口使用不同的色彩风格,这种使用中括号构建数据库的技术在国内已经算是少见的"杰作"了,在GrimZ的眼里却成了"菜鸟"...虽然很闷,但仔细想来其实道理很简单,使用变量的话且不说速度较慢,数据的管理和统计也相当困难,大量使用还容易在编程时发错误,看来这种菜鸟技术还是少用为好.
使用INI文件时情况就要好得多,前面提到的变量数组完全可以用以下的INI文件替代:

[color]
#bot=黑色
#china=红色
Lodd=蓝色
turbo=紫色

往这个INI文件中写入这些数据用这些命令:
/writeini XXX.ini color #bot 黑色
/writeini XXX.ini color #bot 黑色
/writeini XXX.ini color #china 红色
/writeini XXX.ini color Lodd 蓝色
/writeini XXX.ini color turbo 紫色
读取则用$readini(XXX.ini, color, %window)来实现,大家再熟悉不过了吧?

显然,使用了INI文件看起来直观得多,管理也容易些,并使我们告别了菜鸟!大家不用担心读写INI文件会影响bot的速度,因为我们的Windows会协调文件的读写,感觉上速度和对内存变量的读写完全一样.
INI很成熟(从早年的Windows 3.1中就能见到),使用也很方便,但哈希表这东西却在很多场合渐渐地取代了它的位置.同样,刚才的INI文件可以用以下几句命令放入哈希表:

/hmake color 20 ;新建一个哈希表
/hadd color #bot 黑色
/hadd color #china 红色
/hadd color Lodd 蓝色
/hadd color turbo 紫色
读取数据则用$hget(color, %window)来实现.

大家有没有感觉到,哈希表和INI的用起来是如此的类似!请注意,它们的类似仅仅是"用起来"!其实它们的结构是完全不同的,当然我们并不用关心他们到底具体不同在哪里,会用就行,不是吗?

 

哈希表的优势和简单原理

哈希表的优势到底在哪里呢?最明显的优势,一个字:快!在数据量较大时哈希表的读写速度比INI要快数十倍以上.为什么会这样呢?问题在于它们储存的方式:INI里的数据是顺序保存的,如果你在一个INI段内保存了1000条记录,那么每次读取时都要从第一条开始查找,直到找到为止.而哈希表就不一样了,同样是1000条记录,可以被分成20堆,每堆50条记录左右,这样查找数据时,只要到指定的一堆中查找50记录就可以了,速度就快了20倍.

再举个直观点的例子,如果我们手中有一份1000人的名单,如果要在其中找到"张三"的话,就得从头一个一个找下去,这就是INI的查找方式,而如果把这1000人按姓氏被分成了几十份小名单,姓张的在一份名单上,姓李的在另一张,这样的话找"张三"只要在"张氏"这份小名单上找就行了,显然这样的话或许只要查几十人就可以找到了,是不是要快得多?这就是哈希表的原理!
那对于实际的数据,我们到底按什么分类?分几类?
哈希表的分类原则是随便什么方法都可以!比如你可以把数据的第一个字节的值作为分类原则,也可以是最后一个字节,总之,只要你能分出类就可以了.当然我们完全不必关心mIRC的哈希表是怎么分类的.至于要分几类,这个很重要/make命令最后一个参数就是分的类数.一般来说这个值越大,速度就越快(mIRC help中原话),而我个人的原则是:分类数略大于记录数的平方根.

除了快,哈希表还有如下优势:

1.哈希表没有INI文件的64K大小限制
2.mIRC的哈希表中可以存放控制符(Ctrl-K之类),INI不可以
3.哈希表中的数据如果不保存的话随着mIRC的关闭而消失,保存临时数据很方便


哈希表的操作

大家可详见mIRC help,常用的有:
hmake:新建一个哈希表
hadd:往哈希表中添加成员
hdel:从哈希表中删除成员
hfree:删除哈希表
$hget:读取成员的值
$hfind和$hmatch:在哈希表中搜索数据
显然哈希表比INI要强大得多哦!
虽然哈希表不可能替代INI,但很多场合用哈希表比INI要合适得多.

变脸

 

前几天在一个网友的博客里看到这张图片,甚觉奇妙,转贴于此。第一眼看去,左边人满脸怒容,右边人面无表情。但是隔开一个距离,试着退后三四步,也许更远一点,你再看?……是的,你没看错…她们翻脸了。哈,有意思么?

 

解读这两张图片,有很多种方式。科学的,八卦的,引申的,联想的,技术的,无厘头的,附会的,抑或见仁见智的。有人会想到对事物的观察角度,有人会想到风云变幻的人际关系,有人会想到莫测吊诡的事实真相。总之,“此中有真义,欲辩已忘言”。

 

而今晚,我想起的,是历史的翻脸。例子太多,不胜枚举,呼之欲出的就有好几个……

 

比如,有一个女人,在男性至上的古老宫廷里,用铁腕手段上演了长达几十年颠龙倒凤的女权主义戏码。她在某宫殿所围的汉白玉石栏的所有栏板上,都用浮雕技法刻成“龙追凤”的图案;76根望柱的柱头全部雕刻着皇室独一无二的“一凤压两龙”的造型,其张扬的性别寓意不言而喻。然而一生阴盛阳衰地控制着皇族命脉的她在临终时,躺在病榻上留给这个王朝的最后一句话是:“以后勿使妇人干政,此与本朝家法有违,须严加限制。”,这个女人是慈禧。

 

比如,有一个男人,他在1907年的天津进行了中国历史上的第一次政治选举,他对西方民主政治推崇备至,他派了专人到日本学习选举办法,回来担任宣传员,给各城市乡村讲解选举的好处。他创办《法政官话报》,用媒体的力量进行民主政治科普,他甚至动用强制命令和发放奖金相结合的方式,动员了八千七百五十三人参加了投票,选出三十名绅士组成天津地方议会。但这个人后来因为开历史倒车,称帝而留下千古骂名。这个人名叫袁世凯。大家都说他玩弄民主假象,很少有人愿意相信,他的帝号“洪宪”的原意是“宏扬宪政”。

 

再比如,还有一个男人,1989年当上台湾立委,作为在野党的一分子,他痛恨国民党的腐败,锐意揭弊,在媒体和深喉的支持下反对贪渎,这个勇敢的立委曾经在竞选台北市长的政见会上说,为了打倒贪污和特权,他可以冒生命危险。他的反腐决心和清廉名声使得美国《新闻周刊》在19937月把他评选为风云人物。他也连续五年被台湾民众评选为立委问政表现第一。这个人的名字如今依然与弊案紧密相连,只是变换了角色,他的名字叫陈水扁。

 

最后比如,还有一本书,书中收录了上世纪40年代在重庆出版的《新华日报》和在延安出版的《解放日报》上的一些社论和评论,还有毛泽东、周恩来等中央领导人的一些重要谈话。这些社论和谈话会令今天所有的进步青年都拍案认同,深以为然。但是这样一本貌似极其“根红苗正”的好书却二话不说地被禁了。这本书的名字叫做——《历史的先声》。

 

等等等等……。我很愿意懂得科学道理的朋友能从视觉成像的角度告诉我,形成这种奇异“变脸图”的技术含量有多高,但是,又有谁能告诉我,读懂历史和历史人物翻脸之技巧与过程并不再为之叹息愕异的技术含量要多高?