欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

关于如何使用信用卡磁条阅读器读取酒店钥匙卡数据的分析

来源:本站整理 作者:佚名 时间:2018-07-16 TAG: 我要投稿

从Saleae的Logic软件导出CSV格式
由于数据的波特率不是常量,因此编写Python代码很难。它取决于钥匙卡划过读头的速度。在编写代码时,我因为一些错误而走了弯路,但最终找到了一个有效的解决方案。
这是一个散点图,所显示的方波脉冲的持续时间并没有预期的两个值。相反,可以看到各种范围的值。它仍然可以从1(短脉冲,蓝色/紫色点)到0(长脉冲,绿点),见下图(上)。每个连续脉冲与最后一个脉冲的比率是从1到o的,见下图:

图表显示脉冲持续时间(delta)需要多少值,而不是预期的两个值
 
字节/字符
正如在phrack论文中提到的,信用卡使用2个轨道,其中一个字符由5位(4位+ 1个奇偶校验)组成,另一个字符由7位(6位+ 1个奇偶校验)组成。
我花了很多时间来编写信用卡解码器。部分原因是因为我需要确定我正确读取了1和o,另一部分原因是因为我认为我需要代码来查看酒店钥匙卡中是否使用了相同的字符类型。
对此进行编码的挑战之一是需要知道数据的开始位置和前导码何时结束。似乎“Sentinel ”命令可用于标记数据的开始/结束。这些是特殊字符(位模式),读者可以在条带的开头和结尾查找…然后它才会有意义。这就是阅读器只能用于信用卡的原因:固件正在寻找信用卡使用的标记。它无法解码酒店钥匙卡,因为数据的开始或结束位置并不明显或数据没有构成一个什么进程。此外,可能缺乏有效的纵向冗余校验(LRC)。
 
识别酒店钥匙卡磁条上的字符
我在酒店钥匙卡的磁条上运行了我的信用卡代码,看看是否有所有5位或所有7位的奇数奇偶校验。不幸的是,没有。这可能是廉价的磁条阅读器失败的另一个原因。
然后我对1和0进行了一些频率分析。由于很多5位和7位的值都有自己的特点,我在信用卡磁条上看到了它们各自对应的内容。7位磁条上有20个空格。因此,使用频率分析,我应该能够猜测到正在使用7位字符。
通过将一些酒店钥匙卡数据分成8位模式,我们注意到1和0的相同字符串发生的次数比预期的要多得多。所以我的猜测是,酒店钥匙卡使用了8位字符。
下面是我的Python脚本的一些输出样本:
l  原始位
l  字符串(带十六进制转储),如果使用5位、6位、7位或8位字符,则是正确的。虽然“正确性”取决于奇偶校验、位顺序以及位值映射到的字符集。这里有很多错误和改进的空间
l  检查字符内的奇数/偶数奇偶校验
l  寻找常见字符的频率分析,用于改变字符长度
[+] Parsing file export.csv
 [-] Flips in channel 0: 3
 [-] Flips in channel 1: 1652
 [-] Flips in channel 2: 3
[+] Analysing swipes
 [-] Channel 0:
 [-] Channel 1:
 [-] Swipe 0: 693 bits
 [-] Swipe 1: 701 bits
 [-] Channel 2:
[+] Creating Plots
 [-] creating plots with dimensions (1637, 1637), (1637, 1637)
 [-] saving plot to file: export.csv-plot-channel-1.png
----------------------- CHANNEL 1 SWIPE 0 -----------------------
[+] Length (bits) = 266 (%5 = 1, %6 = 2, %7 = 0, % 8= 2)
[+] Data: 10100110001001100010011000100110001001100010011000100110001001100010011000100110001001100101011011100110101001001101100110100110001001100111110110111100111101100010000000100110011001101100001010010101001001001110110100000111001101011101100001100101101000101010011001
[+] Strings:
 [-] 5 bit: 5398621626>36=1:6
 [-] length: 53
 [-] hex:
 35 33 39 38 36 32 31 3c 34 33 39 38 36 32 31 3c 5398621
 34 33 3a 3e 36 32 3c 33 35 33 39 3c 3b 3e 3c 3d 43:>62
 34 30 39 3c 36 31 35 35 34 39 3d 31 3e 36 3e 33 4096>3
 36 3d 31 3a 36 6=1:6
[-] 6 bit: E(1C&,9RD(1CFM92;+1S;G;"D,-**DMPLW8M4,
 [-] length: 38
 [-] hex:
 45 28 31 43 26 2c 39 52 44 28 31 43 46 4d 39 32 E(1C&,9RD(1CFM92
 3b 2b 31 53 3b 47 3b 22 44 2c 2d 2a 2a 44 4d 50 ;+1S;G;"D,-**DMP
 4c 57 38 4d 34 2c LW8M4,
[-] 7 bit: %..#...2$..#&-.....3.'..$....$-0,7.-.
 [-] length: 37
 [-] hex:
 25 08 11 23 06 0c 19 32 24 08 11 23 26 2d 19 12 %..#...2$..#&-..
 1b 0b 11 33 1b 27 1b 02 24 0c 0d 0a 0a 24 2d 30 ...3.'..$....$-0
 2c 37 18 2d 14 ,7.-.
[-] 8 bit: .&&&&&&&&&&V....&}.. &f..$..5.e..@
 [-] length: 34
 [-] hex:
 a6 26 26 26 26 26 26 26 26 26 26 56 e6 a4 d9 a6 .&&&&&&&&&&V....
 26 7d bc f6 20 26 66 c2 95 24 ed 07 35 d8 65 a2 &}.. &f..$..5.e.
 a6 40 .@
[+] Parity for 5 bit chars: odd: False, even: False)
[+] Parity for 6 bit chars: odd: False, even: False)
[+] Parity for 7 bit chars: odd: False, even: False)
[+] Parity for 8 bit chars: odd: False, even: False)
[+] Frequency analysis for potential char lengths:
 [-] 5 bits:
 10011: 5
 11000: 4
 01100: 4
 00110: 4
 00100: 4
 [-] 6 bits:
 100110: 5
 100010: 5
 011000: 5
 011001: 4
 001001: 4
 [-] 7 bits:
 1000100: 3
 0010011: 3
 1101100: 2
 1100010: 2
 1011010: 2
 [-] 8 bits:
 00100110: 12
 10100110: 3
...snip...
上面的数据来自于实际的酒店钥匙卡(尽管酒店后来改用了RFID锁)。
我还开始研究XORing、旋转字符(rot13格式)、位序和偏移的整个位流(以防止我在把字符组合放到错误的位置)。不过,到目前为止这些都还没有成功。
这就是我所得到的。如果我能解码钥匙上的任何数据,我一定会再次发布。我希望能看到我的房间号和结账日期。但同样,一个不以明文形式出现的加密字符串也不会让我惊讶——这是我在某些卡片上所看到过的。
 
结论
以廉价和耗时的方式来做事也可以很有趣——这也是练习编写代码、了解matplotlib以及逻辑分析仪的好机会。
 

上一页  [1] [2] 

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载