• PC端google OTP验证码获取器


    感觉在安全的路上走远了qwq,把安全的东西用得不怎么安全了。

    import PySimpleGUI as sg
    import hmac
    import base64
    import struct
    import hashlib
    import time
    import sys
    import requests
    
    
    def get_hotp_token(secret, intervals_no):
        key = base64.b32decode(secret)
        msg = struct.pack(">Q", intervals_no)
        h = hmac.new(key, msg, hashlib.sha1).digest()
        o = h[len(h)-1] & 0x0f
        h = (struct.unpack(">I", h[o:o + 4])[0] & 0x7fffffff) % 1000000
        return h
    
    def get_totp_token(secret):
        intervals_no = int(time.time()) // 30
        totp_token = get_hotp_token(secret, intervals_no)
        return totp_token
    
    if __name__ == '__main__':
        
        Sec1 = 'xxx' #自己更换需要的key
        Sec2 = 'xxx'
        Sec3 = 'xxx'
        Sec1 = Sec1.replace(' ', '').upper()
        Sec2 = Sec2.replace(' ', '').upper()
        Sec3 = Sec3.replace(' ', '').upper()
        #if len(Sec1) % 8 != 0 and len(Sec2) % 8 != 0 and len(Sec3) % 8 != 0:
            #print('Illegal base32 data at input byte %d' % ((len(Sec)//8+1)*8))
            #exit(1)
            
        sg.SetOptions(text_justification='center')
        layout = [
             # key 值代表了是这个输入框输入的值,以字典的 键 值来表示,这个用于找到输入框并跟新它的值
            [sg.Text('xxxx', size=(15, 1)), sg.Input(key='HIDSCODE')],#自己设置显示
            [sg.Text('xxx4A', size=(15, 1)), sg.Input(key='HK4ACODE')],
            [sg.Text('xxx4A', size=(15, 1)), sg.Input(key='SS4ACODE')],
            [sg.Button('GET')]
        ]
    	# 创建窗口及设置标题
        window = sg.Window('简易谷歌验证码获取器', layout)
        # 循环按钮元素的值
        while True:
            event, values = window.read()
                #if read == True:
            if event == 'GET':
                validation_code1 = get_totp_token(Sec1)
                validation_code2 = get_totp_token(Sec2)
                validation_code3 = get_totp_token(Sec3)
                hidscode = '%06d  [!]%02d后秒过期' % (validation_code1, 30 - int(time.time()) % 30)
                baoleijicode = '%06d  [!]%02d后秒过期' % (validation_code2, 30 - int(time.time()) % 30)
                baoleijicode2 = '%06d  [!]%02d后秒过期' % (validation_code3, 30 - int(time.time()) % 30)
                new_hidscode = window['HIDSCODE'].update(hidscode)
                new_4acode = window['HK4ACODE'].update(baoleijicode)
                new_4acode2 = window['SS4ACODE'].update(baoleijicode2)
            if event in (None, 'Exit'):
                break
        # 显示窗口
        window.read()
    
        window.close()
    

      

  • 相关阅读:
    cad.net 仿lisp函数专篇
    操作篇 cad一个小技巧,通过块中块插入含有字段块,保证更新
    cad.net 外部参照功能和相对路径转换
    cad.net 动态块名 .IsDynamicBlock出错 eInvalidObjectId错误.
    cad.net 委托的学习
    cad.net 关于保存文件Database.SaveAs()出现"eFileAccessErr"错误的解决方法
    测试篇 c# winFrom Close报错 System.ObjectDisposedException:“无法访问已释放的对象。
    测试篇 c#枚举类型怎么用?
    cad.net 2008使用WPF(摘录山人)
    日志篇 随着win10更新...
  • 原文地址:https://www.cnblogs.com/2rsh0u/p/15698520.html
Copyright © 2020-2023  润新知