首页
社区
课程
招聘
[原创]公务员之路5.1题库再次解密!
发表于: 2006-6-5 14:48 3784

[原创]公务员之路5.1题库再次解密!

2006-6-5 14:48
3784
上篇地址:
http://bbs.pediy.com/showthread.php?s=&threadid=26729

上次跟出算法后。老兄又说,这套算法只能解出没注册的题库。哦,真的是这样吗?

让我们看看。
在数据库里有一个字段REG,G代表未注册的题目。
ANDG代表注册后的题目。

解密CALL中也没发现注册后转用其它算法,
那唯一的解释就是:
两种题目的密钥是不同的。
在上篇中

0557634  /$  55            PUSH EBP
  00557635  |.  8BEC          MOV EBP,ESP
  00557637  |.  6A 00         PUSH 0
  00557639  |.  53            PUSH EBX
  0055763A  |.  56            PUSH ESI
  0055763B  |.  57            PUSH EDI
  0055763C  |.  8BF1          MOV ESI,ECX***ECX中就是密钥
未注册的密钥是$3039
那注册的是多少呢.

破解找注册码?为了题库这也太麻烦了吧.
反正这个密钥也只有一个word长.来个穷举吧.

word最长也只有FFFF,也就是十进制的65535
OK.写个程序,一个for循环.结果保存在文本文件里.
65535行,一个一个找是不行的,是要头昏的.
公务员考试考点什么呢,无非是马列.
关键字:马克斯....未找到.
       列宁...未找到.
       社会.....OK,找到.密钥出来了,$4F93

总结一下.
现在的计算机就是快,穷举也只用了2分多钟.
未注册,也就是数据库里REG字段是G的密钥是$3039
注册后,也就是数据库里REG字段是ANDG的密钥是$4F93.
解密函数改一下,优化是没什么时间了.

function TForm1.decrypt(key:word;str: string): string;
var
  i: integer;
  j, tt, tt2: word;
  tmp: string;
  tmpword: array of word;

begin
  tt2 := key; //$3039 or $4F93
  setlength(tmpword, length(str) div 2);
  for i := 0 to length(tmpword) - 1 do
  begin
    tmpword[i] := strtoint('$' + str[i * 2 + 1] + str[i * 2 + 2]);
  end;
  for i := 0 to length(tmpword) - 1 do
  begin
    tt := tt2;
    tt := tt shr 8;
    j := tmpword[i] xor tt;
    if j > 0 then
    begin
      tmp := tmp + char(j);
      tt := tt2 + tmpword[i];
      j := tt * $0B;
      j := j + $0C;
      tt2 := j;
    end
    else
    begin
      j := tmpword[i];
      tmp := tmp+char(j);
      j := tt2 * $0B;
      j := j + $0C;
      tt2 := j;
    end;

  end;

  result := tmp;
end;

这下,老兄满意了吧.

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
满意了,呵呵
2006-6-5 15:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不错,解决办法还是满有创意,直接穷举破掉了,晕,再次谢谢大哥,小弟感激万分,继续学习..

^_^
2006-6-5 23:00
0
游客
登录 | 注册 方可回帖
返回
//