身份证爆破
此文章仅供用于学习研究,严禁用于非法用途,否则后果自负。
身份证结构
位数 | 12 | 34 | 56 | 7-14 | 15、16 | 17 | 18 |
---|---|---|---|---|---|---|---|
代表 | 省份 | 城市 | 区县 | 年月日 | 所在地的派出所代码 | 奇数男偶数女 | 随机出现的校验码 |
1-6:地址码,常住户口所在地的行政区划代码
7-14:出生年月日
15-17:顺序码,且第17为由性别决定,男性为奇数,女性为偶数
18:校验码,将前面17位代入公式计算,结果为0-10,若为10则用x代表
举例:440106 19990101 0010
-
44
广东省,01
广州市,06
天河区 -
19990101
,出生年月日 -
001
,第17
位为1
即男性 -
0
,最后一位为校验码
注意:由于历史原因可能有些被撤销的行政区划代码,可登陆https://xingzhengquhua.bmcx.com/ 开通vip进行查询。例如:你查询的目标出生日期在90年,则可使用91年前被撤销的行政区划代码进行尝试。如果目标因为某种原因导致的更改过身份证,则可使用近年的行政区划代码进行尝试。
因该网站查询历史行政区划代码需要付费,所以帮各位整理了一份历史行政区划代码资料。
行政区划代码大全下载链接见文章底部
社工构造身份证
对目标进行信息收集,根据收集的信息进行整理,
假设收集到的信息如下:
姓名:xxx
性别:女
生日:19900909
地址:浙江省湖州市德清县
1、查询历史行政区代码
https://xingzhengquhua.bmcx.com/ 在此处搜索德清县
可以看出来只有两个行政区代码,该目标的出生年份为1990,则使用最新的行政区代码330521,如果遇到目标为1982年之前出生的则使用1982年之前的行政区代码。
2、简单构造
33052119900909
到目前为止15、16、17、18不知道。
17位为女,则可能是0/2/4/6/8
18位为随机的校验码,则可能为0/1/2/3/4/5/6/7/8/9/x,共11中结果
15/16位可能是0-9,共10中结果
10*10*5*11共计5500 种结果
python脚本
生成后4位
import itertools
if __name__ == '__main__':
sex = '02468' if int(input("性别(男1女2): ")) % 2 == 0 else '13579' # 性别位
check = '0123456789X' # 校验位
other = '0123456789' # 其它位
nums = itertools.product(other, other, sex, check)
cards = []
for num in nums:
card = "".join(num)
cards.append(card)
print(len(cards))
print(cards)
生成完整的18位
import itertools
if __name__ == '__main__':
date = input("身份证前14位: ")
sex = '02468' if int(input("性别(男1女2): ")) % 2 == 0 else '13579' # 性别位
check = '0123456789X' # 校验位
other = '0123456789' # 其它位
nums = itertools.product(other, other, sex, check)
cards = []
for num in nums:
card = date + "".join(num)
cards.append(card)
print(len(cards))
print(cards)
3、身份验证
在获取到5500个身份证号码后,可使用相关的身份验证进行验证,其中正确的概率为1/5500。
好了点到为止,具体自行研究。再次提醒该文章仅供技术参考,严禁违法违规,否则后果自负。
后六位爆破
如果需要爆破后6位,即身份证的第13~18
位,那么就有10*10*10*10*10*11
(最后一位有0~X
共11位)种可能
-
后6位中的第1位,即出生日期的十位,只能为
0~3
,即4*10*10*10*10*11
-
而如果是针对某人而写的字典,知道目标的性别,那么第
5
位就可以减掉一半。男性为1/3/5/7/9
,女性为0/2/4/6/8
,即4*10*10*10*5*11
-
同时,如果知道目标的出生日期(学校发的很多信息表中都会包含出生年月日等信息),即第
1~2
位也可以确定了。那么需要爆破的只有15~18
位,即10*10*5*11=5500
,这个数量级已经对于电脑来说很轻松就可以完成。
import itertools
if __name__ == '__main__':
date = input("出生日期: ")
date=date[6:8:1]
sex = '02468' if int(input("性别(男1女2): ")) % 2 == 0 else '13579' # 性别位
check = '0123456789X' # 校验位
other = '0123456789' # 其它位
nums = itertools.product(other, other, sex, check)
cards = []
for num in nums:
card = date + "".join(num)
cards.append(card)
print(len(cards))
print(cards)
行政区划代码大全下载
关注公众号漏洞挖掘之路
回复"*行政区划代码*"获取下载连接
原文始发于微信公众号(漏洞挖掘之路):身份证爆破
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论