这个工具的目的是在不传播那些用户数据的前提下,给大家提供一个查询自己是否中招的工具。这个工具不需要联网,不需要安装,直接查询本地的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版本我们可能永远也得不到。