这个工具的目的是在不传播那些用户数据的前提下,给大家提供一个查询自己是否中招的工具。这个工具不需要联网,不需要安装,直接查询本地的12306.hashs这个MD5摘要数据,由于您输入的身份证号信息只与本地的12306.hashs文件中的指纹数据进行对比,而12306.hashs没有任何个人敏感信息,所以您可以放心使用它。至于为什么什么身份证号,一个很重要的原因是使用身份证号实际程序不会得到任何敏感数据,您也不用我收集你的身份证号(说实在的,有那精力,我还不如用身份证号生成工具生成呢),您也不用担心您的身份证号会被我传到某个不知名的地方。
全部源码:
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,System.Generics.Collections,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,qrbtree;
type
TForm1 = class(TForm)
btnQuery: TButton;
Label1: TLabel;
Label3: TLabel;
edtId: TEdit;
lblResult: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnQueryClick(Sender: TObject);
private
{ Private declarations }
FList:TStringList;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses qstring, qdigest;
{$R *.dfm}
const
MD5_Append:QStringW='';//这个用于MD5混淆的值不公开
procedure TForm1.btnQueryClick(Sender: TObject);
var
AHash: TQMD5Digest;
AIndex:Integer;
begin
AHash:=MD5Hash(Trim(edtId.Text)+MD5_Append);
if FList.Find(DigestToString(AHash),AIndex) then
begin
lblResult.Font.Color:=clRed;
lblResult.Caption:='很不幸,您被命中了,请及时更换您的12306相关信息。';
end
else
begin
lblResult.Font.Color:=clGreen;
lblResult.Caption:='不用太担心,至少这批被泄露的数据中没有您。';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
p,pl:PQCharW;
S,L,AName,AId:QStringW;
AHash: TQMD5Digest;
AStream:TMemoryStream;
C:Integer;
ABuilder:TQStringCatHelperW;
begin
S:=LoadTextW('c:\temp\12306.txt');
p:=PQCharW(S);
ABuilder:=TQStringCatHelperW.Create;
while p^ <> #0 do
begin
L := DecodeLineW(p);
pl := PQCharW(L);
C := 0;
while pl^ <> #0 do
begin
if StartWithW(pl, '----', False) then
begin
Inc(pl, 4);
if C = 1 then
begin
AName := DecodeTokenW(pl, '-', #0, True);
SkipCharW(pl, '-');
AId := DecodeTokenW(pl, '-', #0, True);
Break;
end;
Inc(C);
end
else
Inc(pl);
end;
AHash := MD5Hash(AId + MD5_Append);
ABuilder.Cat(DigestToString(AHash)).Cat(SLineBreak);
end;
SaveTextW(ExtractFilePath(Application.ExeName) + '12306.hashs',
ABuilder.Value);
FreeObject(ABuilder);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
AFileName: QStringW;
begin
FList:=TStringList.Create;
AFileName:=ExtractFilePath(Application.ExeName)+'12306.hashs';
if FileExists(AFileName) then
begin
FList.LoadFromFile(AFileName);
FList.Sort;
end
else
begin
Application.MessageBox('12306.hashs文件不存在,无法查询。','错误',MB_OK or MB_ICONSTOP);
Exit;
end;
end;
【下载链接】
【病毒扫描结果】
【附】
本次数据泄露可能的源头的简单分析:
首先,个人觉得12306官方服务器泄露的可能性很小。大概理由如下:
(1)、数据库密码存明文的可能性很小。如果在中国几次大的拖库事件发生后,12306仍然用明文存贮用户的密码,那12306就纯属死都不知道自己怎么死的。它的程序设计师可以去吃屎去了。个人认为12306官网的声明是关于这一点应该可信的。
(2)、泄露的数据量太小。目前泄露出来的版本是13万多条数据,传言有18G和22G的版本,但截止目前为止,笔者没有见到任何来源显示这两个版本的数据是存在的。如果所谓的18G和22G不存在,那么13万条记录就不可能是从12306官网泄露出去的。
那么,排除12306官方服务器泄露的可能,那么数据的来源是那里?
(1)、第三方抢票软件的可能性
这个可能性是存在的,尤其是使用服务器刷票的几家厂商嫌疑最大。另外就是提供客户端刷票工具的可能性也有,通过一定的技术分析,这方面可以进行检查,如果客户端刷票时只将用户名和密码保存在本机,那么就不会有问题,如果传到了作者自己的邮箱等地方,那就有可能了。那么,这种工具的可能性有多大呢?看下载量和泄露的数据量来说,不可能下载量太小的软件,那么调查的目标应该是比较明确的。但这个可能性笔者认为有,由于笔者不掌握这些软件的下载量,所以不好说有多大。
(2)、通过已知泄露的数据进行撞库
通过利用过去其它网站泄露的账号密码数据,挨个测试撞库这种可能性也是存在的。而且撞库的成功率也是相当高的,但经历了历次事件而还不改密码的朋友,相信比例不会太大,但在由于基数大,成功个13万条记录确实是有可能的,甚至可能会更多一点。但相信通过这次事件后,绝大部分人会更改密码,估计那所谓的18G/22G版本我们可能永远也得不到。

