12306 大规模数据泄露事件中招查询工具-附源码

这个工具的目的是在不传播那些用户数据的前提下,给大家提供一个查询自己是否中招的工具。这个工具不需要联网,不需要安装,直接查询本地的12306.hashs这个MD5摘要数据,由于您输入的身份证号信息只与本地的12306.hashs文件中的指纹数据进行对比,而12306.hashs没有任何个人敏感信息,所以您可以放心使用它。至于为什么什么身份证号,一个很重要的原因是使用身份证号实际程序不会得到任何敏感数据,您也不用我收集你的身份证号(说实在的,有那精力,我还不如用身份证号生成工具生成呢),您也不用担心您的身份证号会被我传到某个不知名的地方。

QQ截图20141225173810

全部源码:

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;

 

【下载链接】

百度网盘

【病毒扫描结果】

VirScan病毒扫描报告

【附】

本次数据泄露可能的源头的简单分析:

首先,个人觉得12306官方服务器泄露的可能性很小。大概理由如下:
(1)、数据库密码存明文的可能性很小。如果在中国几次大的拖库事件发生后,12306仍然用明文存贮用户的密码,那12306就纯属死都不知道自己怎么死的。它的程序设计师可以去吃屎去了。个人认为12306官网的声明是关于这一点应该可信的。
(2)、泄露的数据量太小。目前泄露出来的版本是13万多条数据,传言有18G和22G的版本,但截止目前为止,笔者没有见到任何来源显示这两个版本的数据是存在的。如果所谓的18G和22G不存在,那么13万条记录就不可能是从12306官网泄露出去的。
那么,排除12306官方服务器泄露的可能,那么数据的来源是那里?
(1)、第三方抢票软件的可能性
这个可能性是存在的,尤其是使用服务器刷票的几家厂商嫌疑最大。另外就是提供客户端刷票工具的可能性也有,通过一定的技术分析,这方面可以进行检查,如果客户端刷票时只将用户名和密码保存在本机,那么就不会有问题,如果传到了作者自己的邮箱等地方,那就有可能了。那么,这种工具的可能性有多大呢?看下载量和泄露的数据量来说,不可能下载量太小的软件,那么调查的目标应该是比较明确的。但这个可能性笔者认为有,由于笔者不掌握这些软件的下载量,所以不好说有多大。
(2)、通过已知泄露的数据进行撞库
通过利用过去其它网站泄露的账号密码数据,挨个测试撞库这种可能性也是存在的。而且撞库的成功率也是相当高的,但经历了历次事件而还不改密码的朋友,相信比例不会太大,但在由于基数大,成功个13万条记录确实是有可能的,甚至可能会更多一点。但相信通过这次事件后,绝大部分人会更改密码,估计那所谓的18G/22G版本我们可能永远也得不到。
分享到: