本文声明
此文仅用于技术科普,教育与研究用途,请勿用于商业甚至非法用途,否则一切后果自负。若用户利用此文章而受到惩处,本人及本平台对其行为概不负责,亦不承担任何连带责任。相关阅读
前言
社区里面有热心网友分享了相关内容,但写的并不是特别完整,这篇文章,就是在这上面的基础上刑上加刑!实战分享
身份证号是的编排是有一定规律可循的。除了最后1位是校验位外,其余各位与出生地、出生日期、性别、出生编号息息相关,因此即使是经脱敏处理的身份证号,仍能通过程序分析的方式过滤出可能的身份证序列组合。 具体参考 那么,我们是不是可以写一个支持对身份证后4、6位及身份证内生日的爆破的脱敏身份证恢复工具呢? 以下脚本根据GitHub项目中的脚本修改:sfzBruter.py
原版(仅供参考,实战中不用):#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2021-05-08
# @Author : aplyc1a
# @FileName: info-sfz.py
import time
def brute_8(s):
sfz=[]
birthh=[]
for i in range(int(time.mktime(time.strptime(s[6:10]+'0101','%Y%m%d'))),int(time.mktime(time.strptime(s[6:10]+'1231','%Y%m%d')))+1,3600*24):
brute_4(s.replace('****',time.strftime('%Y%m%d',time.localtime(i))[4:],1))
def brute_6(s):
sfz=[]
birthh=[]
for i in range(int(time.mktime(time.strptime(s[6:10]+'0101','%Y%m%d'))),int(time.mktime(time.strptime(s[6:10]+'1231','%Y%m%d')))+1,3600*24):
if s[10:12] == time.strftime('%Y%m%d',time.localtime(i))[4:6]:
brute_4(s.replace('**',time.strftime('%Y%m%d',time.localtime(i))[6:8],1))
def brute_4(s):
for i in num:
sfz=s.replace('***',i,1)
summ=0
for j in range(len(weight)):
summ+=weight[j]*int(sfz[j])
check=summ%11
a=sfz.replace('*',checker[check],-1)
print(a)
def brute_m4(s):
birthh=[]
for i in range(int(time.mktime(time.strptime(s[6:10]+'0101','%Y%m%d'))),int(time.mktime(time.strptime(s[6:10]+'1231','%Y%m%d')))+1,3600*24):
sfz=s.replace('****',time.strftime('%Y%m%d',time.localtime(i))[4:])
summ=0
for i in range(len(weight)):
summ+=weight[i]*int(sfz[i])
check=summ%11
if checker[check]==sfz[-1]:
print(sfz)
if __name__=='__main__':
s="5132211949****5126"
weight=[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
checker=['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
num=[str(i).zfill(3) for i in range(1,1000)]
#s="51322119491001****"
if s.index('*')==14:
brute_4(s)
#s="513221194910******"
if s.index('*')==12:
brute_6(s)
if s.index('*')==10:
#s="5132211949********"
if s.count('*')==8:
brute_8(s)
#s="5132211949****5126"
if s.count('*')==4:
brute_m4(s)
修改版:
以下需要自行修改:
第五十行是枚举区号开始的第一个区号
第五十一行是枚举区号结束最后一个区号+1
第五十二行是你所知的生日加顺序码和校验码,最多支持八位未知
然后开始爆破,比如你所知一个人的生日是1982年6月26日,区号是430424(这里是方便枚举,身份证是网上泄露的)
所以五十、五十一、五十二行修改后:
a_1 = 430424 #区号开始
a_2 = 430425 #区号结束+1
s="19820626****" #举例:身份证号缺后四位
开始爆破吧!

最后的提醒
不过,这种接口也很容易被小人利用了!本篇文章仅作为技术科普,重点讲述技术原理。 希望大家以钻研技术为目的,接口也请合理使用,建议不要输入自己的(任何网站都有日志,你的输入都可能被记录) 同时,我们也希望大家不打扰、不侵犯他人隐私,借本篇文章,我们在发现这样的情况时,也希望大家保护好自己的隐私!© 版权声明
THE END
- 最新
- 最热
只看作者