y03831 发表于 2023-11-30 01:37

无壳本地验证求助


用x64dbg 搜索不到字符串

https://wwi.lanzouj.com/iVDEo1gcy2hi



Kissnero 发表于 2023-11-30 01:37

没想到啊,一份付出2份回报{:5_116:}

y03831 发表于 2023-11-30 01:39

附上查毒https://www.virscan.org/report/cc1f1977c16439351fe1e03d630f991d6fcaaa6eeb119d0ad6c8605b55b93acf

三斤回锅肉 发表于 2023-11-30 17:13

用x64dbg调试

Rooking 发表于 2023-12-1 00:25

这是Python打包的软件 源码加密了

一身白 发表于 2023-12-7 16:28

python 打包的程序,我尝试解包没办法太菜了,包太大 放不上来

一身白 发表于 2023-12-7 21:27

不懂在调试器中如何定位关键位置,有大哥解决了的话 踢我一脚# decompyle3 version 3.9.0
# Python bytecode=1 version base 3.8.0 (3413)
# Decompiled from: Python 3.8.2 (tags/v3.8.2:7b3ab59, Feb 25 2020, 23:03:10)
# Embedded file name: js自动化测试代码混淆.py
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import selenium.webdriver.support as EC
import time, os, shutil, pyperclip
from tkinter import *
import tkinter.ttk as ttk
from tkinter import messagebox
from tkinter.scrolledtext import ScrolledText
from tkinter import filedialog, dialog
import _thread, webbrowser, datetime, win32api, base64, hashlib
from Crypto.Cipher import AES
import win32gui, win32con

def catch_info(OO0OO0O00OOOOOO00):
    OOOO0O0OO0000OO0O = []
    for O00OO0000OO00000O in range(OO0OO0O00OOOOOO00.nrows):
      O0O00O0OO0O0O00OO = {}
      OO000O0OO00OOOO0O = OO0OO0O00OOOOOO00.row_values(O00OO0000OO00000O)
      for OO00000O00OO00000 in range(OO0OO0O00OOOOOO00.ncols):
            if type(OO000O0OO00OOOO0O) == float:
                print('数据转换')
                O0O00O0OO0O0O00OO = str(int(OO000O0OO00OOOO0O))
            else:
                O0O00O0OO0O0O00OO = OO000O0OO00OOOO0O
            OOOO0O0OO0000OO0O.append(O0O00O0OO0O0O00OO)
      else:
            return OOOO0O0OO0000OO0O


def wait_obj(OO0O00OO000O00OOO, OOO000000OO0OO0O0, OOO00OOOO00O00OO0, wait_time=5, frequent_time=0.5):
    OOOOO0O0O00O00OO0 = WebDriverWait(OO0O00OO000O00OOO, wait_time, frequent_time).until(EC.presence_of_element_located((OOO000000OO0OO0O0, OOO00OOOO00O00OO0)))
    return OOOOO0O0O00O00OO0


def top_window():
    O00O00OOOOOOO0O0O = ''
    while True:
      while O00O00OOOOOOO0O0O == '':
            OOO00O000O0OOOO0O = {}

            def O000000OO0OO000O0(OOO0O0O0OOOOOOO00, OOOO0OOOOOOOO000O):
                if win32gui.IsWindow(OOO0O0O0OOOOOOO00):
                  if win32gui.IsWindowEnabled(OOO0O0O0OOOOOOO00):
                        if win32gui.IsWindowVisible(OOO0O0O0OOOOOOO00):
                            OOO00O000O0OOOO0O.update({OOO0O0O0OOOOOOO00: win32gui.GetWindowText(OOO0O0O0OOOOOOO00)})

            win32gui.EnumWindows(O000000OO0OO000O0, 0)
            OOO0O0OO00O0O0OO0 = ''
            for O00000OO000OO00OO, OO000O0OOO0O0O00O in OOO00O000O0OOOO0O.items():
                if OO000O0OOO0O0O00O:
                  if 'Javascript自动化测试工具' in OO000O0OOO0O0O00O:
                        OOO0O0OO00O0O0OO0 = OO000O0OOO0O0O00O
                        O00O00OOOOOOO0O0O = OO000O0OOO0O0O00O

    O0O0OO00O00OO0O00 = win32gui.FindWindow(None, OOO0O0OO00O0O0OO0)
    win32gui.ShowWindow(O0O0OO00O00OO0O00, win32con.SW_SHOWNORMAL)
    win32gui.SetWindowPos(O0O0OO00O00OO0O00, win32con.HWND_TOPMOST, 1, 738, 562, 339, win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE | win32con.SWP_NOOWNERZORDER | win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE)


def stop_listing_msg():
    global kkk
    kkk = 'e'
    fresh_btn.configure(state=NORMAL)
    driver.refresh()


def run_browser():
    global driver
    global run_num
    global sound_lock
    start_btn.configure(text='启动浏览器(启动中....)', fg='DarkGreen')
    try:
      driver.quit()
    except Exception as O0000O00OOO0OO00O:
      try:
            print(O0000O00OOO0OO00O)
      finally:
            O0000O00OOO0OO00O = None
            del O0000O00OOO0OO00O

    else:
      O00O0O0O0O000O0O0 = os.path.join(os.getcwd(), '谷歌浏览器缓存')
      OO00O0O0OOO000000 = os.path.join(os.getcwd(), 'edge浏览器缓存')
      O0OOOO000OOOO0OO0 = os.path.join(os.getcwd(), '火狐浏览器缓存')
      OOOO0O00OOOO0O000 = entry_url.get()
      if OOOO0O00OOOO0O000 == '':
            OOOO0O00OOOO0O000 = 'about:blank'
      OOO0OOOOO000O0OOO = str(browser_set.get())
    try:
      if run_num == 0:
            print(OOO0OOOOO000O0OOO)
            if '谷歌' in OOO0OOOOO000O0OOO:
                run_num += 1
                O0O000O0OOO0OO0OO = os.getcwd()
                OOOOOOOOO00OO0O00 = os.path.join(O0O000O0OOO0OO0OO, 'Drivers', '.wdm', 'drivers', 'chromedriver', 'win32')
                OOO00O0OO0OO00O00 = os.listdir(OOOOOOOOO00OO0O00)
                OOOOO00OOO0O00000 = os.path.join(OOOOOOOOO00OO0O00, OOO00O0OO0OO00O00, 'chromedriver.exe')
                print(OOOOO00OOO0O00000)
                OOO0000O00O000O00 = Service(OOOOO00OOO0O00000)
                OOO0OOO0OO0OOO0OO = webdriver.ChromeOptions()
                if sound_lock == 0:
                  OOO0OOO0OO0OOO0OO.add_argument('--mute-audio')
                OOO0OOO0OO0OOO0OO.add_argument('--disable-blink-features=AutomationControlled')
                os.makedirs(O00O0O0O0O000O0O0, exist_ok=True)
                OOO0OOO0OO0OOO0OO.add_argument('--user-data-dir=' + O00O0O0O0O000O0O0)
                OOO0OOO0OO0OOO0OO.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
                driver = webdriver.Chrome(service=OOO0000O00O000O00, options=OOO0OOO0OO0OOO0OO)
            else:
                if '微软' in OOO0OOOOO000O0OOO:
                  run_num += 1
                  O0O000O0OOO0OO0OO = os.getcwd()
                  OOOOOOOOO00OO0O00 = os.path.join(O0O000O0OOO0OO0OO, 'Drivers', '.wdm', 'drivers', 'edgedriver', 'win64')
                  OOO00O0OO0OO00O00 = os.listdir(OOOOOOOOO00OO0O00)
                  OOOOO00OOO0O00000 = os.path.join(OOOOOOOOO00OO0O00, OOO00O0OO0OO00O00, 'msedgedriver.exe')
                  print(OOOOO00OOO0O00000)
                  OOO0000O00O000O00 = Service(OOOOO00OOO0O00000)
                  OOO0OOO0OO0OOO0OO = webdriver.EdgeOptions()
                  OOO0OOO0OO0OOO0OO.use_chromium = True
                  if sound_lock == 0:
                        OOO0OOO0OO0OOO0OO.add_argument('--mute-audio')
                  OOO0OOO0OO0OOO0OO.add_argument('--disable-blink-features=AutomationControlled')
                  os.makedirs(OO00O0O0OOO000000, exist_ok=True)
                  OOO0OOO0OO0OOO0OO.add_argument('user-data-dir=' + OO00O0O0OOO000000)
                  OOO0OOO0OO0OOO0OO.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
                  driver = webdriver.Edge(service=OOO0000O00O000O00, options=OOO0OOO0OO0OOO0OO)
                else:
                  if '火狐' in OOO0OOOOO000O0OOO:
                        run_num += 1
                        if not os.path.exists(O0OOOO000OOOO0OO0):
                            try:
                              os.makedirs(O0OOOO000OOOO0OO0)
                              print(f"文件夹 '{O0OOOO000OOOO0OO0}' 已成功创建。")
                            except OSError as O0000O00OOO0OO00O:
                              try:
                                    print(f"创建文件夹 '{O0OOOO000OOOO0OO0}' 失败:{O0000O00OOO0OO00O}")
                              finally:
                                    O0000O00OOO0OO00O = None
                                    del O0000O00OOO0OO00O

                        else:
                            print(f"文件夹 '{O0OOOO000OOOO0OO0}' 已存在。")
                        O0O000O0OOO0OO0OO = os.getcwd()
                        OOOOOOOOO00OO0O00 = os.path.join(O0O000O0OOO0OO0OO, 'Drivers', '.wdm', 'drivers', 'geckodriver', 'win64')
                        OOO00O0OO0OO00O00 = os.listdir(OOOOOOOOO00OO0O00)
                        OOOOO00OOO0O00000 = os.path.join(OOOOOOOOO00OO0O00, OOO00O0OO0OO00O00, 'geckodriver.exe')
                        print(OOOOO00OOO0O00000)
                        OOO0000O00O000O00 = Service(OOOOO00OOO0O00000)
                        OOO0OOO0OO0OOO0OO = webdriver.FirefoxOptions()
                        if sound_lock == 0:
                            OOO0OOO0OO0OOO0OO.add_argument('--mute-audio')
                        OOO0OOO0OO0OOO0OO.add_argument('--profile')
                        OOO0OOO0OO0OOO0OO.add_argument(O0OOOO000OOOO0OO0)
                        OOO0OOO0OO0OOO0OO.add_argument('--disable-automation')
                        OOO0OOO0OO0OOO0OO.add_argument('--disable-logging')
                        driver = webdriver.Firefox(service=OOO0000O00O000O00, options=OOO0OOO0OO0OOO0OO)
            driver.set_page_load_timeout(60)
            driver.get(OOOO0O00OOOO0O000)
            print('网页打开成功')
            start_btn.configure(text='启动浏览器', fg='black')
    except Exception as O0000O00OOO0OO00O:
      try:
            print(O0000O00OOO0OO00O)
            with open('errLog.txt', 'w', encoding='utf-8') as O0OO00OO0O00O0O0O:
                O0OO00OO0O00O0O0O.write(str(O0000O00OOO0OO00O))
            if 'invalid argument' in str(O0000O00OOO0OO00O):
                messagebox.showwarning('网址错误', '请检查网址是否有误,列如:遗漏http://或者https://等情况')
                start_btn.configure(text='启动浏览器', fg='black')
            else:
                if 'failed to start' in str(O0000O00OOO0OO00O):
                  messagebox.showwarning('启动错误', '请先关闭已打开的浏览器后再重试')
                  start_btn.configure(text='启动浏览器', fg='black')
                else:
                  update_driver_btn.configure(state=NORMAL, text='———>>更新驱动<<———', fg='green', bg='gold', font=('微软雅黑',
                                                                                                                  11))
                  messagebox.showwarning('驱动不匹配', '驱动需要更新!请【更新驱动】')
                  start_btn.configure(text='启动浏览器', fg='black')
      finally:
            O0000O00OOO0OO00O = None
            del O0000O00OOO0OO00O


def origin_decrypt--- This code section failed: ---

L. 158         0LOAD_STR               '6$etwbg$6*f'
                2STORE_FAST               'O0O0000OO0OO00OO0'

L. 159         4SETUP_FINALLY      96'to 96'

L. 160         6LOAD_FAST                'O0O0000OO0OO00OO0'
                8STORE_FAST               'OOOOOOO00OO0OO0OO'

L. 161      10LOAD_FAST                'O0O000OOO00O00OO0'
               12STORE_FAST               'O0O0000O000OO0O00'

L. 162      14LOAD_GLOBAL            AES
               16LOAD_METHOD            new
               18LOAD_GLOBAL            add_to_16
               20LOAD_FAST                'OOOOOOO00OO0OO0OO'
               22CALL_FUNCTION_1       1''
               24LOAD_GLOBAL            AES
               26LOAD_ATTR                MODE_ECB
               28CALL_METHOD_2         2''
               30STORE_FAST               'OOO000O0OOO000OOO'

L. 163      32LOAD_GLOBAL            base64
               34LOAD_METHOD            decode=1bytes
               36LOAD_FAST                'O0O0000O000OO0O00'
               38LOAD_ATTR                encode
               40LOAD_STR               'utf-8'
               42LOAD_CONST               ('encoding',)
               44CALL_FUNCTION_KW_1   1'1 total positional and keyword args'
               46CALL_METHOD_1         1''
               48STORE_FAST               'O0OOOO0OOOOOO000O'

L. 164      50LOAD_GLOBAL            str
               52LOAD_FAST                'OOO000O0OOO000OOO'
               54LOAD_METHOD            decrypt
               56LOAD_FAST                'O0OOOO0OOOOOO000O'
               58CALL_METHOD_1         1''
               60LOAD_STR               'utf-8'
               62LOAD_CONST               ('encoding',)
               64CALL_FUNCTION_KW_2   2'2 total positional and keyword args'
               66STORE_FAST               'OO0OO00OO00O00OO0'

L. 165      68LOAD_GLOBAL            base64
               70LOAD_METHOD            b64decode=1
               72LOAD_FAST                'OO0OO00OO00O00OO0'
               74LOAD_METHOD            encode
               76LOAD_STR               'utf-8'
               78CALL_METHOD_1         1''
               80CALL_METHOD_1         1''
               82LOAD_METHOD            decode=1
               84LOAD_STR               'utf-8'
               86CALL_METHOD_1         1''
               88STORE_FAST               'OO0OO00OO00O00OO0'

L. 166      90LOAD_FAST                'OO0OO00OO00O00OO0'
               92POP_BLOCK      
               94RETURN_VALUE   
             96_0COME_FROM_FINALLY   4'4'

L. 167      96DUP_TOP         
               98LOAD_GLOBAL            Exception
            100COMPARE_OP               exception-match
            102POP_JUMP_IF_FALSE   142'to 142'
            104POP_TOP         
            106STORE_FAST               'O0000O000OO0OOO0O'
            108POP_TOP         
            110SETUP_FINALLY       130'to 130'

L. 168       112LOAD_GLOBAL            print
            114LOAD_FAST                'O0000O000OO0OOO0O'
            116CALL_FUNCTION_1       1''
            118POP_TOP         

L. 169       120POP_BLOCK      
            122POP_EXCEPT      
            124CALL_FINALLY      130'to 130'
            126LOAD_STR               'err'
            128RETURN_VALUE   
            130_0COME_FROM         124'124'
            130_1COME_FROM_FINALLY   110'110'
            130LOAD_CONST               None
            132STORE_FAST               'O0000O000OO0OOO0O'
            134DELETE_FAST            'O0000O000OO0OOO0O'
            136END_FINALLY      
            138POP_EXCEPT      
            140JUMP_FORWARD      144'to 144'
            142_0COME_FROM         102'102'
            142END_FINALLY      
            144_0COME_FROM         140'140'

Parse error at or near `POP_EXCEPT' instruction at offset 122


def start_js--- This code section failed: ---

L. 184         0LOAD_GLOBAL            textPad
                2LOAD_METHOD            get
                4LOAD_STR               '1.0'
                6LOAD_STR               'end-1c'
                8CALL_METHOD_2         2''
               10STORE_FAST               'O0OOOOOOOOOOO000O'

L. 185      12LOAD_FAST                'O0OOOOOOOOOOO000O'
               14LOAD_STR               ''
               16COMPARE_OP               !=
            18_20POP_JUMP_IF_FALSE   438'to 438'

L. 186      22LOAD_STR               '|*-*||*-*||*-*||*-*||*-*||*-*||*-*|'
               24STORE_FAST               'O00O00OOO0OOOO0O0'
             26_0COME_FROM         124'124'
             26_1COME_FROM            98'98'
             26_2COME_FROM            52'52'

L. 188      26LOAD_GLOBAL            origin_decrypt
               28LOAD_FAST                'O0OOOOOOOOOOO000O'
               30CALL_FUNCTION_1       1''
               32STORE_FAST               'OO0000OO0OO000OOO'

L. 189      34LOAD_FAST                'OO0000OO0OO000OOO'
               36LOAD_STR               ''
               38COMPARE_OP               ==
               40POP_JUMP_IF_TRUE    126'to 126'
               42LOAD_FAST                'OO0000OO0OO000OOO'
               44LOAD_STR               'err'
               46COMPARE_OP               ==
               48POP_JUMP_IF_FALSE    54'to 54'

L. 190      50JUMP_FORWARD      126'to 126'
               52JUMP_LOOP            26'to 26'
             54_0COME_FROM            48'48'

L. 192      54LOAD_FAST                'OO0000OO0OO000OOO'
               56LOAD_METHOD            split
               58LOAD_STR               '\n'
               60CALL_METHOD_1         1''
               62STORE_FAST               'O000OO0OOO00OOOOO'

L. 193      64LOAD_STR               '$s加密状态'
               66LOAD_FAST                'O000OO0OOO00OOOOO'
               68LOAD_CONST               -1
               70BINARY_SUBSCR   
               72COMPARE_OP               in
               74POP_JUMP_IF_FALSE   100'to 100'

L. 194      76LOAD_FAST                'O000OO0OOO00OOOOO'
               78LOAD_METHOD            pop
               80CALL_METHOD_0         0''
               82STORE_FAST               'O00O00OOO0OOOO0O0'

L. 195      84LOAD_STR               '\n'
               86LOAD_METHOD            join
               88LOAD_FAST                'O000OO0OOO00OOOOO'
               90CALL_METHOD_1         1''
               92STORE_FAST               'O0O0O000O0OOOO000'

L. 196      94LOAD_FAST                'O0O0O000O0OOOO000'
               96STORE_FAST               'O0OOOOOOOOOOO000O'
               98JUMP_LOOP            26'to 26'
            100_0COME_FROM            74'74'

L. 198       100LOAD_FAST                'O000OO0OOO00OOOOO'
            102LOAD_METHOD            pop
            104CALL_METHOD_0         0''
            106STORE_FAST               'O00O00OOO0OOOO0O0'

L. 199       108LOAD_STR               '\n'
            110LOAD_METHOD            join
            112LOAD_FAST                'O000OO0OOO00OOOOO'
            114CALL_METHOD_1         1''
            116STORE_FAST               'O0O0O000O0OOOO000'

L. 200       118LOAD_FAST                'O0O0O000O0OOOO000'
            120STORE_FAST               'O0OOOOOOOOOOO000O'

L. 201       122JUMP_FORWARD      126'to 126'
            124JUMP_LOOP            26'to 26'
            126_0COME_FROM         122'122'
            126_1COME_FROM            50'50'
            126_2COME_FROM            40'40'

L. 202       126LOAD_GLOBAL            print
            128LOAD_FAST                'O00O00OOO0OOOO0O0'
            130CALL_FUNCTION_1       1''
            132POP_TOP         

L. 203       134LOAD_FAST                'O00O00OOO0OOOO0O0'
            136LOAD_METHOD            split
            138LOAD_STR               '|*-*|'
            140CALL_METHOD_1         1''
            142STORE_FAST               'O0O00OO00OO00O0OO'

L. 204       144LOAD_GLOBAL            print
            146LOAD_FAST                'O0O00OO00OO00O0OO'
            148CALL_FUNCTION_1       1''
            150POP_TOP         

L. 205       152LOAD_STR               'yes'
            154STORE_FAST               'O0O0OO0O0OOOO0O00'

L. 206       156LOAD_FAST                'O0O00OO00OO00O0OO'
            158LOAD_CONST               2
            160BINARY_SUBSCR   
            162LOAD_STR               ''
            164COMPARE_OP               !=
            166POP_JUMP_IF_FALSE   210'to 210'

L. 207       168LOAD_FAST                'O0O00OO00OO00O0OO'
            170LOAD_CONST               2
            172BINARY_SUBSCR   
            174LOAD_GLOBAL            str
            176LOAD_GLOBAL            win32api
            178LOAD_METHOD            GetVolumeInformation
            180LOAD_STR               'C:\\'
            182CALL_METHOD_1         1''
            184LOAD_CONST               1
            186BINARY_SUBSCR   
            188CALL_FUNCTION_1       1''
            190COMPARE_OP               !=
            192POP_JUMP_IF_FALSE   210'to 210'

L. 208       194LOAD_STR               'no'
            196STORE_FAST               'O0O0OO0O0OOOO0O00'

L. 209       198LOAD_GLOBAL            messagebox
            200LOAD_METHOD            showwarning
            202LOAD_STR               '错误提醒'
            204LOAD_STR               '本机特征码与代码指定特征码不匹配,无法执行'
            206CALL_METHOD_2         2''
            208POP_TOP         
            210_0COME_FROM         192'192'
            210_1COME_FROM         166'166'

L. 210       210LOAD_FAST                'O0O00OO00OO00O0OO'
            212LOAD_CONST               4
            214BINARY_SUBSCR   
            216LOAD_STR               ''
            218COMPARE_OP               !=
          220_222POP_JUMP_IF_FALSE   296'to 296'

L. 211       224LOAD_GLOBAL            get_web_now_time
            226CALL_FUNCTION_0       0''
            228STORE_FAST               'OO0O000OO0OO0OO00'

L. 212       230LOAD_GLOBAL            webtime
            232LOAD_GLOBAL            int
            234LOAD_FAST                'O0O00OO00OO00O0OO'
            236LOAD_CONST               4
            238BINARY_SUBSCR   
            240CALL_FUNCTION_1       1''
            242BINARY_SUBTRACT
            244LOAD_CONST               0
            246COMPARE_OP               >
          248_250POP_JUMP_IF_FALSE   270'to 270'

L. 213       252LOAD_GLOBAL            messagebox
            254LOAD_METHOD            showwarning
            256LOAD_STR               '过期提示'
            258LOAD_STR               '代码已过期,无法执行'
            260CALL_METHOD_2         2''
            262POP_TOP         

L. 214       264LOAD_STR               'no'
            266STORE_FAST               'O0O0OO0O0OOOO0O00'
            268JUMP_FORWARD      296'to 296'
            270_0COME_FROM         248'248'

L. 215       270LOAD_GLOBAL            webtime
            272LOAD_CONST               -1
            274COMPARE_OP               ==
          276_278POP_JUMP_IF_FALSE   296'to 296'

L. 216       280LOAD_GLOBAL            messagebox
            282LOAD_METHOD            showwarning
            284LOAD_STR               '网络未连接'
            286LOAD_STR               '请连接网络后重试'
            288CALL_METHOD_2         2''
            290POP_TOP         

L. 217       292LOAD_STR               'no'
            294STORE_FAST               'O0O0OO0O0OOOO0O00'
            296_0COME_FROM         276'276'
            296_1COME_FROM         268'268'
            296_2COME_FROM         220'220'

L. 218       296LOAD_FAST                'O0O0OO0O0OOOO0O00'
            298LOAD_STR               'yes'
            300COMPARE_OP               ==
          302_304POP_JUMP_IF_FALSE   462'to 462'

L. 219       306LOAD_GLOBAL            print
            308LOAD_STR               '执行代码'
            310CALL_FUNCTION_1       1''
            312POP_TOP         

L. 220       314SETUP_FINALLY       330'to 330'

L. 221       316LOAD_GLOBAL            driver
            318LOAD_METHOD            execute_script
            320LOAD_FAST                'O0OOOOOOOOOOO000O'
            322CALL_METHOD_1         1''
            324POP_TOP         
            326POP_BLOCK      
            328JUMP_FORWARD      436'to 436'
            330_0COME_FROM_FINALLY   314'314'

L. 222       330DUP_TOP         
            332LOAD_GLOBAL            Exception
            334COMPARE_OP               exception-match
          336_338POP_JUMP_IF_FALSE   434'to 434'
            340POP_TOP         
            342STORE_FAST               'O0O00O00OOOOOOOOO'
            344POP_TOP         
            346SETUP_FINALLY       422'to 422'

L. 223       348LOAD_GLOBAL            str
            350LOAD_FAST                'O0O00O00OOOOOOOOO'
            352CALL_FUNCTION_1       1''
            354STORE_FAST               'OOO0OOO0O0OOOO00O'

L. 224       356LOAD_STR               "name 'driver' is not defined"
            358LOAD_FAST                'OOO0OOO0O0OOOO00O'
            360COMPARE_OP               not-in
          362_364POP_JUMP_IF_FALSE   394'to 394'

L. 225       366LOAD_GLOBAL            pyperclip
            368LOAD_METHOD            copy
            370LOAD_FAST                'OOO0OOO0O0OOOO00O'
            372CALL_METHOD_1         1''
            374POP_TOP         

L. 226       376LOAD_GLOBAL            messagebox
            378LOAD_METHOD            showwarning
            380LOAD_STR               'DEBUG报错信息(代码运行出错辣o(╥﹏╥)o)'
            382LOAD_STR               '报错信息已复制到剪切板\n'
            384LOAD_FAST                'OOO0OOO0O0OOOO00O'
            386BINARY_ADD      
            388CALL_METHOD_2         2''
            390POP_TOP         
            392JUMP_FORWARD      418'to 418'
            394_0COME_FROM         362'362'

L. 228       394LOAD_GLOBAL            fresh_btn
            396LOAD_ATTR                configure
            398LOAD_GLOBAL            NORMAL
            400LOAD_CONST               ('state',)
            402CALL_FUNCTION_KW_1   1'1 total positional and keyword args'
            404POP_TOP         

L. 229       406LOAD_GLOBAL            messagebox
            408LOAD_METHOD            showwarning
            410LOAD_STR               '错误提示'
            412LOAD_STR               '亲,请先启动浏览器,再执行代码'
            414CALL_METHOD_2         2''
            416POP_TOP         
            418_0COME_FROM         392'392'
            418POP_BLOCK      
            420BEGIN_FINALLY   
            422_0COME_FROM_FINALLY   346'346'
            422LOAD_CONST               None
            424STORE_FAST               'O0O00O00OOOOOOOOO'
            426DELETE_FAST            'O0O00O00OOOOOOOOO'
            428END_FINALLY      
            430POP_EXCEPT      
            432JUMP_FORWARD      436'to 436'
            434_0COME_FROM         336'336'
            434END_FINALLY      
            436_0COME_FROM         432'432'
            436_1COME_FROM         328'328'
            436JUMP_FORWARD      462'to 462'
            438_0COME_FROM            18'18'

L. 231       438LOAD_GLOBAL            fresh_btn
            440LOAD_ATTR                configure
            442LOAD_GLOBAL            NORMAL
            444LOAD_CONST               ('state',)
            446CALL_FUNCTION_KW_1   1'1 total positional and keyword args'
            448POP_TOP         

L. 232       450LOAD_GLOBAL            messagebox
            452LOAD_METHOD            showwarning
            454LOAD_STR               '错误提示'
            456LOAD_STR               '亲,请先编写 或 导入 代码'
            458CALL_METHOD_2         2''
            460POP_TOP         
            462_0COME_FROM         436'436'
            462_1COME_FROM         302'302'

Parse error at or near `LOAD_GLOBAL' instruction at offset 126


try:
    _thread.start_new_thread(top_window, ())
    print('\n创建转换进程...')
except:
    print('erro')
else:

    def load_sysSet():
      if os.path.exists('sysSet.ini') == False:
            with open('sysSet.ini', 'w', encoding='utf-8') as O0OOOO0O00O0OO0O0:
                O0OOOO0O00O0OO0O0.write('')
            O0OOO00O0O00O00O0 = []
      else:
            with open('sysSet.ini', 'r', encoding='utf-8') as O0OOOO0O00O0OO0O0:
                O0OOO00O0O00O00O0 = O0OOOO0O00O0OO0O0.read().splitlines()
      return O0OOO00O0O00O00O0


    sysSet = load_sysSet()
    if sysSet != []:
      try:
            urlSet = sysSet
      except Exception:
            urlSet = ''

      try:
            browserSet = sysSet
      except Exception:
            browserSet = '浏览器引擎:微软Edge浏览器'

    else:
      urlSet = ''
      browserSet = '浏览器引擎:微软Edge浏览器'

    def save_set():
      O000O0O0O0O0OOO00 = str(entry_url.get())
      O0O0O0OOOO00OOOO0 = str(browser_set.get())
      OOO000OOO00O00O00 = str(O000O0O0O0O0OOO00) + '\n' + str(O0O0O0OOOO00OOOO0)
      with open('sysSet.ini', 'w', encoding='utf-8') as O000OO000O0000OO0:
            O000OO000O0000OO0.write(OOO000OOO00O00O00)
      print('saved')


    run_num = 0
    run_listen_num = 0
    win = Tk()
    win.resizable(0, 0)
    win.title('Javascript自动化测试工具')
    win.configure(bg='white')
    cwd = os.getcwd()
    icon_path = os.path.join(cwd, 'icon', 'a', 'porcupine.ico')
    win.iconbitmap(icon_path)

    def run_login():
      global run_num
      save_set()
      run_num = 0
      if run_num == 0:
            _thread.start_new_thread(run_browser, ())
      else:
            messagebox.showwarning('提示', '网页只能打开1次,请重启软件后再点击')


    def run_listen():
      global run_listen_num
      save_set()
      if run_listen_num == 0:
            fresh_btn.configure(state=DISABLED)
            _thread.start_new_thread(start_js, ())


    def fresh_list():
      _thread.start_new_thread(got_group_list, ())


    edit_lock = 0

    def switch_edit():
      global edit_lock
      global info_lock
      save_set()
      if edit_lock == 0:
            edit_lock = 1
            e_frame.pack(side='left', fill='x', pady=3, padx=1)
            edit_script.unbind('<Leave>')
      else:
            edit_lock = 0
            e_frame.pack_forget()
            edit_script.bind('<Leave>', lambda O00OO00OOOOOOO0O0: edit_script.configure(bg=btn_bg, fg='black')
)
            info_lock = 0
            code_info_frame.pack_forget()
            code_info_btn.configure(bg='white')


    main_width = 30
    edit_width = 50
    font_set = ('微软雅黑', 11)
    btn_bg = 'white'
    main_frame = Frame(win, width=main_width, bg='white')
    main_frame.pack(side='left', fill='x', pady=3, padx=1)

    def show_content(O0O000O0OOO000O0O):
      entry_url.config(show='')


    def hide_content(O000OOO0000000OO0):
      entry_url.config(show='-')


    url_frame = LabelFrame(main_frame, text='网址设置', width=400, bg='white')
    url_frame.pack(side='top', fill='x', pady=3, padx=1)
    entry_url = Entry(url_frame, width=main_width, show='-')
    entry_url.insert(0, urlSet)
    entry_url.pack(side='top', fill='x', pady=3, padx=1)
    entry_url.bind('<Button-1>', show_content)
    entry_url.bind('<FocusOut>', hide_content)
    start_btn = Button(main_frame, text='启动浏览器', relief='groove', width=main_width, command=run_login, bg=btn_bg, font=font_set)
    start_btn.pack(side='top', fill='x', pady=3, padx=1)

    def get_info--- This code section failed: ---

L. 331         0LOAD_FAST                'O0O0000OO0O0OO0O0'
                2STORE_FAST               'OOO000OO0O000O0OO'
            4_0COME_FROM         110'110'
            4_1COME_FROM            84'84'
            4_2COME_FROM            30'30'

L. 333         4LOAD_GLOBAL            origin_decrypt
                6LOAD_FAST                'OOO000OO0O000O0OO'
                8CALL_FUNCTION_1       1''
               10STORE_FAST               'O0O0O00OO000O0O00'

L. 334      12LOAD_FAST                'O0O0O00OO000O0O00'
               14LOAD_STR               ''
               16COMPARE_OP               ==
               18POP_JUMP_IF_TRUE    112'to 112'
               20LOAD_FAST                'O0O0O00OO000O0O00'
               22LOAD_STR               'err'
               24COMPARE_OP               ==
               26POP_JUMP_IF_FALSE    32'to 32'

L. 335      28JUMP_FORWARD      112'to 112'
               30JUMP_LOOP             4'to 4'
             32_0COME_FROM            26'26'

L. 337      32LOAD_FAST                'O0O0O00OO000O0O00'
               34LOAD_METHOD            split
               36LOAD_STR               '\n'
               38CALL_METHOD_1         1''
               40STORE_FAST               'O0OOOOOO0O00O0O00'

L. 338      42LOAD_GLOBAL            print
               44LOAD_FAST                'O0OOOOOO0O00O0O00'
               46CALL_FUNCTION_1       1''
               48POP_TOP         

L. 339      50LOAD_STR               '$s加密状态'
               52LOAD_FAST                'O0OOOOOO0O00O0O00'
               54LOAD_CONST               -1
               56BINARY_SUBSCR   
               58COMPARE_OP               in
               60POP_JUMP_IF_FALSE    86'to 86'

L. 340      62LOAD_FAST                'O0OOOOOO0O00O0O00'
               64LOAD_METHOD            pop
               66CALL_METHOD_0         0''
               68STORE_FAST               'OO0O0OOOOO00O0O0O'

L. 341      70LOAD_STR               '\n'
               72LOAD_METHOD            join
               74LOAD_FAST                'O0OOOOOO0O00O0O00'
               76CALL_METHOD_1         1''
               78STORE_FAST               'O000OO0O0000OO000'

L. 342      80LOAD_FAST                'O000OO0O0000OO000'
               82STORE_FAST               'OOO000OO0O000O0OO'
               84JUMP_LOOP             4'to 4'
             86_0COME_FROM            60'60'

L. 344      86LOAD_FAST                'O0OOOOOO0O00O0O00'
               88LOAD_METHOD            pop
               90CALL_METHOD_0         0''
               92STORE_FAST               'OO0O0OOOOO00O0O0O'

L. 345      94LOAD_STR               '\n'
               96LOAD_METHOD            join
               98LOAD_FAST                'O0OOOOOO0O00O0O00'
            100CALL_METHOD_1         1''
            102STORE_FAST               'O000OO0O0000OO000'

L. 346       104LOAD_FAST                'O000OO0O0000OO000'
            106STORE_FAST               'OOO000OO0O000O0OO'

L. 347       108JUMP_FORWARD      112'to 112'
            110JUMP_LOOP             4'to 4'
            112_0COME_FROM         108'108'
            112_1COME_FROM            28'28'
            112_2COME_FROM            18'18'

L. 348       112LOAD_GLOBAL            print
            114LOAD_FAST                'OO0O0OOOOO00O0O0O'
            116CALL_FUNCTION_1       1''
            118POP_TOP         

L. 349       120LOAD_FAST                'OO0O0OOOOO00O0O0O'
            122LOAD_METHOD            split
            124LOAD_STR               '|*-*|'
            126CALL_METHOD_1         1''
            128STORE_FAST               'O0O0OOOOO0OOOO0OO'

L. 350       130LOAD_FAST                'O0O0OOOOO0OOOO0OO'
            132RETURN_VALUE   
               -1RETURN_LAST      

Parse error at or near `JUMP_FORWARD' instruction at offset 108


    def load_code():
      global edit_lock
      try:
            O0O0O000OOOOOO00O = os.getcwd()
            OOO0O0000OOOO0OO0 = os.path.join(O0O0O000OOOOOO00O, '代码仓库')
            OO0OOOO00000000OO = filedialog.askopenfilename(initialdir=OOO0O0000OOOO0OO0, filetypes=[('JSC', '.jsc')])
            with open(OO0OOOO00000000OO, 'r', encoding='utf-8') as O0OO0O0O0O00OOO0O:
                O00OOO0O0000OOOO0 = O0OO0O0O0O00OOO0O.read()
            textPad.delete('1.0', END)
            textPad.insert('1.0', O00OOO0O0000OOOO0)
            O00O0O000O0O0OOO0 = get_info(O00OOO0O0000OOOO0)
            print(O00O0O000O0O0OOO0)
            entry_expire.delete(0, END)
            entry_expire.insert(0, O00O0O000O0O0OOO0)
            entry_author.delete(0, END)
            entry_author.insert(0, O00O0O000O0O0OOO0)
            entry_contact.delete(0, END)
            entry_contact.insert(0, O00O0O000O0O0OOO0)
            describe_Pad.delete('1.0', END)
            describe_Pad.insert('1.0', O00O0O000O0O0OOO0.replace('[回车]', '\n'))
            if edit_lock == 0:
                edit_lock = 1
                e_frame.pack(side='left', fill='x', pady=3, padx=1)
                edit_script.configure(bg='skyblue', fg='white')
                edit_script.unbind('<Leave>')
      except Exception as O0OO0O0O0O0000O00:
            try:
                print(O0OO0O0O0O0000O00)
            finally:
                O0OO0O0O0O0000O00 = None
                del O0OO0O0O0O0000O00


    load_script = Button(main_frame, text='导入代码', relief='groove', width=main_width, bg=btn_bg, font=font_set, command=load_code)
    load_script.pack(side='top', fill='x', pady=3, padx=1)
    edit_script = Button(main_frame, text='编辑代码', relief='groove', width=main_width, command=switch_edit, bg=btn_bg, font=font_set)
    edit_script.pack(side='top', fill='x', pady=3, padx=1)
    fresh_btn = Button(main_frame, text='执行代码', relief='groove', width=main_width, command=run_listen, bg=btn_bg, font=font_set)
    fresh_btn.pack(side='top', fill='x', pady=3, padx=1)
    fresh_btn2 = Button(main_frame, text='停止执行', relief='groove', width=main_width, command=stop_listing_msg, bg=btn_bg, font=font_set)
    fresh_btn2.pack(side='top', fill='x', pady=3, padx=1)

    def switch_to_next_window():
      O000OOOOOOO0O0O0O = driver.window_handles
      if len(O000OOOOOOO0O0O0O) > 1:
            fresh_btn.configure(state=NORMAL)
            OOO0OO0OO0000000O = driver.current_window_handle
            O0OO00O0O00O00OO0 = O000OOOOOOO0O0O0O.index(OOO0OO0OO0000000O)
            O00000O0000OO00OO = (O0OO00O0O00O00OO0 + 1) % len(O000OOOOOOO0O0O0O)
            OOOOOOO00O000OOO0 = O000OOOOOOO0O0O0O
            driver.switch_to.window(OOOOOOO00O000OOO0)
            driver.execute_script("alert('主程序已切换到当前浏览器窗口标签,您执行的代码将在此标签下运行');")


    sound_lock = 0

    def sound_switch():
      global sound_lock
      if sound_lock == 0:
            sound_lock = 1
            sound_btn.configure(text='关闭声音')
      else:
            sound_lock = 1
            sound_btn.configure(text='开启声音')


    sound_btn = Button(main_frame, text='打开声音', relief='groove', width=main_width, command=sound_switch, bg=btn_bg, font=font_set)
    sound_btn.pack(side='top', fill='x', pady=3, padx=1)

    def switch_to_next_window_thread():
      _thread.start_new_thread(switch_to_next_window, ())


    switch_btn = Button(main_frame, text='切换浏览器标签页', relief='groove', width=main_width, command=switch_to_next_window_thread, bg=btn_bg, font=font_set)
    switch_btn.pack(side='top', fill='x', pady=3, padx=1)
    switch_btn.bind('<Enter>', lambda O00O0OO0O000OO0OO: switch_btn.configure(bg='lightsteelblue', fg='white')
)
    switch_btn.bind('<Leave>', lambda O0OO0000OOOOO0OOO: switch_btn.configure(bg=btn_bg, fg='black')
)

    def update_driver_thread():
      _thread.start_new_thread(update_driver, ())


    def show_c_num_id():
      OOO00OOO0OO00OOO0 = str(win32api.GetVolumeInformation('C:\\'))
      pyperclip.copy(OOO00OOO0OO00OOO0)
      messagebox.showwarning('机器特征码', '您的机器特征码为:' + OOO00OOO0OO00OOO0 + '\n已复制到剪切板')


    show_c_num = Button(main_frame, text='机器特征码复制', relief='groove', width=main_width, command=show_c_num_id, bg=btn_bg, font=font_set)
    show_c_num.pack(side='top', fill='x', pady=3, padx=1)
    start_btn.bind('<Enter>', lambda OOOO000OO000OO000: start_btn.configure(bg='red', fg='white')
)
    start_btn.bind('<Leave>', lambda O0OO000OOO00OO0O0: start_btn.configure(bg=btn_bg, fg='black')
)
    load_script.bind('<Enter>', lambda O0O0O0O0OO0000OO0: load_script.configure(bg='coral', fg='white')
)
    load_script.bind('<Leave>', lambda OOO0O000OO0OO00O0: load_script.configure(bg=btn_bg, fg='black')
)
    edit_script.bind('<Enter>', lambda O0000OOO0O0000O0O: edit_script.configure(bg='skyblue', fg='white')
)
    edit_script.bind('<Leave>', lambda O0OOO0O000OO0O0O0: edit_script.configure(bg=btn_bg, fg='black')
)
    fresh_btn.bind('<Enter>', lambda O00O0O0O0OO0O0OOO: fresh_btn.configure(bg='mediumseagreen', fg='white')
)
    fresh_btn.bind('<Leave>', lambda OO0OOOO0O00O0O00O: fresh_btn.configure(bg=btn_bg, fg='black')
)
    fresh_btn2.bind('<Enter>', lambda O000O0O0O0OOOOO0O: fresh_btn2.configure(bg='pink', fg='white')
)
    fresh_btn2.bind('<Leave>', lambda OO0O000O0OOO0OO00: fresh_btn2.configure(bg=btn_bg, fg='black')
)
    show_c_num.bind('<Enter>', lambda OOO0O0O0OOO0O0000: show_c_num.configure(bg='mediumaquamarine', fg='white')
)
    show_c_num.bind('<Leave>', lambda O0O000OOO00O00O00: show_c_num.configure(bg=btn_bg, fg='black')
)
    sound_btn.bind('<Enter>', lambda OOOO0OOO0O000OOO0: sound_btn.configure(bg='orchid', fg='white')
)
    sound_btn.bind('<Leave>', lambda OO00OOOOOOO000OOO: sound_btn.configure(bg=btn_bg, fg='black')
)
    e_frame = Frame(win, width=edit_width, bg='white')
    e_frame.pack(side='left', fill='both', expand='yes', pady=3, padx=1, anchor='nw')
    e_frame.pack_forget()
    edit_frame = LabelFrame(e_frame, text='JavaScript代码编辑区', width=edit_width, bg='white')
    edit_frame.pack(side='top', fill='both', expand='yes', pady=3, padx=1, anchor='nw')
    textPad = ScrolledText(edit_frame, width=edit_width, height=20, bg='white', fg='black', font=('黑体',
                                                                                                14))
    textPad.pack(side='top', fill='both', expand='yes', pady=3, padx=1, anchor=N)

    def save_code():
      OO00OOO000000OOOO = textPad.get('1.0', END)
      if OO00OOO000000OOOO != '':
            OOOO0OO0O00O0O0O0 = os.getcwd()
            OO00OO0O000O0OOO0 = os.path.join(OOOO0OO0O00O0O0O0, '代码仓库')
            OOOO00O000000OO0O = filedialog.asksaveasfilename(initialdir=OO00OO0O000O0OOO0, filetypes=[('JSC', '.jsc')])
            if '.jsc' not in OOOO00O000000OO0O:
                OOOO00O000000OO0O += '.jsc'
            with open(OOOO00O000000OO0O, 'w', encoding='utf-8') as O00OO00OO0O0OO0OO:
                O00OO00OO0O0OO0OO.write(OO00OOO000000OOOO)


    def decrypt_oralce():
      O0O0000OO0O0O0O0O = '6$etwbg$6*f'
      O00O000O00OOO0OO0 = str(entry_jm.get())
      OOO00O0O0OO0O000O = len(O00O000O00OOO0OO0)
      if OOO00O0O0OO0O000O == 0:
            print('不用解密')
      else:
            pass
      try:
            O000OOOOO00O0O0OO = O0O0000OO0O0O0O0O
            O0OO0OOOOO00O0OO0 = textPad.get('1.0', END)
            O0O0OO000000OO00O = AES.new(add_to_16(O000OOOOO00O0O0OO), AES.MODE_ECB)
            O00OOO0O0OO0O0O00 = base64.decode=1bytes(O0OO0OOOOO00O0OO0.encode(encoding='utf-8'))
            O00O0OOO000OO0O00 = str((O0O0OO000000OO00O.decrypt(O00OOO0O0OO0O0O00)), encoding='utf-8')
            O00O0OOO000OO0O00 = base64.b64decode=1(O00O0OOO000OO0O00.encode('utf-8')).decode=1('utf-8')
            O0OOO0O0O00OOO00O = O00O0OOO000OO0O00.split('\n')
            if O00O000O00OOO0OO0 in O0OOO0O0O00OOO00O[-1]:
                O0OOO0O0O00OOO00O.pop()
                O0OOO0O0O00OOO00O.pop()
                O0OOOOO0000OOOOOO = '\n'.join(O0OOO0O0O00OOO00O)
                textPad.delete('1.0', END)
                textPad.insert('1.0', O0OOOOO0000OOOOOO)
                messagebox.showwarning('解密成功', '成功!若为多重加密,可继续解密')
            else:
                messagebox.showwarning('解密失败', '您输入的秘钥错误')
      except Exception:
            messagebox.showwarning('解密失败', '您输入的秘钥错误')


    def add_to_16(OO0O0OOOOO0OOOO0O):
      while True:
            if len(OO0O0OOOOO0OOOO0O) % 16 != 0:
                OO0O0OOOOO0OOOO0O += '\x00'

      return str.encode(OO0O0OOOOO0OOOO0O)


    def encrypt_oracle():
      try:
            O0000OO000OO00O0O = str(win32api.GetVolumeInformation('C:\\'))
            OOO00O0O00O00O0OO = str(entry_tz.get())
            OO00O00O000O0OOO0 = str(entry_expire.get())
            if OO00O00O000O0OOO0 != '':
                OOO000O0O00000000 = OO00O00O000O0OOO0 + ' 23:59:59'
                O00O00OOOO0OO00O0 = time.strptime(OOO000O0O00000000, '%Y-%m-%d %H:%M:%S')
                O0O0OO00OO0O0O00O = str(int(time.mktime(O00O00OOOO0OO00O0)))
            else:
                O0O0OO00OO0O0O00O = ''
            OO0O0O0000OO0O000 = '6$etwbg$6*f'
            O0OOO0O00O00OO00O = str(entry_jm.get())
            O000O000OOO0O0000 = len(O0OOO0O00O00OO00O)
            OOO00OOOOO0OOO00O = str(entry_author.get())
            O0OOOO000OOO0O000 = str(entry_contact.get())
            O00O00OOOO0000OOO = str(describe_Pad.get('1.0', END)).replace('\n', '[回车]')
            if O000O000OOO0O0000 == 0:
                print('不用加密')
            else:
                O0000O0O0000OO0O0 = OO0O0O0000OO0O000
                OO00OOO0O0000OO0O = textPad.get('1.0', END) + '\n' + '$s加密状态|*-*|' + O0OOO0O00O00OO00O + '|*-*|' + OOO00O0O00O00O0OO + '|*-*|' + OO00O00O000O0OOO0 + '|*-*|' + O0O0OO00OO0O0O00O + '|*-*|' + OOO00OOOOO0OOO00O + '|*-*|' + O0OOOO000OOO0O000 + '|*-*|' + O00O00OOOO0000OOO + '|*-*|' + O0000OO000OO00O0O
                OO00O0000O0O0OO00 = base64.b64encode(OO00OOO0O0000OO0O.encode('utf-8')).decode=1('ascii')
                OO0O000O000000000 = AES.new(add_to_16(O0000O0O0000OO0O0), AES.MODE_ECB)
                OOOOO00O000OOOOOO = OO0O000O000000000.encrypt(add_to_16(OO00O0000O0O0OO00))
                O00O0000OO000OO0O = str((base64.encodebytes(OOOOO00O000OOOOOO)), encoding='utf-8')
                textPad.delete('1.0', END)
                textPad.insert('1.0', O00O0000OO000OO0O)
      except Exception:
            messagebox.showwarning('到期时间格式错误', '格式错误!\n时间格式示列:2023-05-01\n同时请核对该月是否有31号')


    def clear_text():
      textPad.delete('1.0', END)
      entry_jm.delete('0', END)
      entry_tz.delete('0', END)
      entry_expire.delete('0', END)
      entry_author.delete('0', END)
      entry_contact.delete('0', END)
      describe_Pad.delete('1.0', END)


    jm_frame = Frame(e_frame, bg='white', width=15)
    jm_frame.pack(side='top', pady=3, padx=1, ipadx=1, anchor='nw')
    jm_label = Label(jm_frame, text='加密/解密-秘钥:', bg='white', relief=GROOVE)
    jm_label.pack(side='left', pady=3, padx=1)
    entry_jm = Entry(jm_frame, width=15, show='*', relief=GROOVE, bg='white')
    entry_jm.pack(side='left', pady=3, padx=1)
    tz_label = Label(jm_frame, text='绑定机器特征码:', bg='white', relief=GROOVE)
    tz_label.pack(side='left', pady=3, padx=1)
    entry_tz = Entry(jm_frame, width=15, relief=GROOVE, bg='white')
    entry_tz.pack(side='left', pady=3, padx=1)
    expire_label = Label(jm_frame, text='代码过期时间:', bg='white', relief=GROOVE)
    expire_label.pack(side='left', pady=3, padx=1)
    entry_expire = Entry(jm_frame, width=15, relief=GROOVE, bg='white')
    entry_expire.pack(side='left', pady=3, padx=1)
    jm_btn_frame = Frame(e_frame, bg='white', width=15)
    jm_btn_frame.pack(side='top', pady=3, padx=1, ipadx=1, anchor='nw')

    def show_help():
      messagebox.showwarning('使用说明', '①秘钥:用于加密和解密源代码,若不填则不能加密\n②绑定机器特征码:可不填,填写后则只有指定特征码的计算机能够运行代码\n③代码过期时间:可不填,填写后则代码只能在设定日期前使用,时间格式示列:2023-05-20\n④要进行代码加密则秘钥为必填项,否则填写的特征码和过期时间均无效\n⑤解密代码只需要填写秘钥即可,无需填写特征码和过期时间')


    help_btn = Button(jm_btn_frame, text='使用说明', relief='groove', width=10, bg='aliceblue', command=show_help)
    help_btn.pack(side='left', pady=3, padx=15)
    e_jm_btn = Button(jm_btn_frame, text='加密', relief='groove', width=10, bg='white', command=encrypt_oracle)
    e_jm_btn.pack(side='left', pady=3, padx=15)
    e_unjm_btn = Button(jm_btn_frame, text='解密', relief='groove', width=10, bg='white', command=decrypt_oralce)
    e_unjm_btn.pack(side='left', pady=3, padx=15)
    e_clear_btn = Button(jm_btn_frame, text='清空', relief='groove', width=10, bg='white', command=clear_text)
    e_clear_btn.pack(side='left', pady=3, padx=15)
    e_save_btn = Button(jm_btn_frame, text='保存', relief='groove', width=10, bg='white', command=save_code)
    e_save_btn.pack(side='left', pady=3, padx=15)
    info_lock = 0

    def info_show():
      global info_lock
      if info_lock == 0:
            info_lock = 1
            code_info_frame.pack(side='left', fill='both', expand='yes', pady=3, padx=1, anchor='nw')
            code_info_btn.configure(bg='royalblue')
      else:
            info_lock = 0
            code_info_frame.pack_forget()
            code_info_btn.configure(bg='white')


    code_info_frame = Frame(win, width=edit_width, bg='white')
    code_info_frame.pack(side='left', fill='both', expand='yes', pady=3, padx=1, anchor='nw')
    code_info_frame.pack_forget()
    code_info_btn = Button(jm_btn_frame, text='代码信息', relief='groove', width=10, bg='white', command=info_show)
    code_info_btn.pack(side='left', pady=3, padx=15)
    info_label = Label(code_info_frame, text='以下信息将在点击代码【加密】按钮时写入代码中', bg='white')
    info_label.pack(side='top', pady=3, padx=15)
    div_label = Label(code_info_frame, text='', bg='white')
    div_label.pack(side='top', pady=7, padx=15)
    author_label = Label(code_info_frame, text='作者:', bg='white', anchor='w')
    author_label.pack(side='top', pady=3, padx=15, anchor='w')
    entry_author = Entry(code_info_frame, text='', bg='white')
    entry_author.pack(side='top', pady=3, padx=15)
    contact_label = Label(code_info_frame, text='联系方式:', bg='white', anchor='w')
    contact_label.pack(side='top', pady=3, padx=15, anchor='w')
    entry_contact = Entry(code_info_frame, text='', bg='white')
    entry_contact.pack(side='top', pady=3, padx=15)
    describe_label = Label(code_info_frame, text='代码运行说明:', bg='white', anchor='w')
    describe_label.pack(side='top', pady=3, padx=15, anchor='w')
    describe_Pad = ScrolledText(code_info_frame, width=5, height=5, bg='white', fg='black')
    describe_Pad.pack(side='top', fill='both', expand='yes', pady=3, padx=1, anchor=N)

    def update_driver():
      save_set()

      def OOOO0OO0O0OO0OOO0():
            OOOOO0O00O000OOOO = os.getcwd()
            OOOOO0O0O00OO00O0 = os.path.join(OOOOO0O00O000OOOO, '更新驱动.exe')
            os.system(OOOOO0O0O00OO00O0)

      _thread.start_new_thread(OOOO0OO0O0OO0OOO0, ())


    update_driver_btn = Button(main_frame, text='更新驱动', relief='groove', width=main_width, command=update_driver_thread, bg=btn_bg, font=font_set)
    update_driver_btn.pack(side='top', fill='x', pady=3, padx=1)
    browser_name = StringVar()
    browser_set = ('浏览器引擎:微软Edge浏览器', '浏览器引擎:谷歌Chrome浏览器', '浏览器引擎:火狐fox浏览器')
    browser_set = ttk.Combobox(main_frame, textvariable=browser_name, values=browser_set, justify='center', font=font_set)
    browser_set.set(browserSet)
    browser_set.pack(side='top', fill='x', pady=3, padx=1)

    def open_url(O00OO000000OO0000):
      OOOO000O0OOO000OO = str(browser_set.get())
      if '谷歌' in OOOO000O0OOO000OO:
            webbrowser.open('http://npm.taobao.org/mirrors/chromedriver/', new=0)
      else:
            if '微软' in OOOO000O0OOO000OO:
                webbrowser.open(':https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/', new=0)
            else:
                if '火狐' in OOOO000O0OOO000OO:
                  webbrowser.open('https://github.com/mozilla/geckodriver/releases', new=0)


    link = Label(main_frame, text='Webdriver Download Manually', font=('Arial', 10))
    link.pack(side='top', fill='x', padx=1)
    link.bind('<Button-1>', open_url)

    def get_web_now_time--- This code section failed: ---

L. 648         0LOAD_CONST               0
                2LOAD_CONST               None
                4IMPORT_NAME            arrow
                6STORE_FAST               'ar'

L. 649         8LOAD_CONST               0
               10LOAD_CONST               None
               12IMPORT_NAME            requests
               14STORE_FAST               'req'

L. 650      16SETUP_FINALLY       126'to 126'

L. 651      18LOAD_FAST                'req'
               20LOAD_METHOD            get
               22LOAD_STR               'https://www.baidu.com/'
               24CALL_METHOD_1         1''
               26LOAD_ATTR                headers
               28LOAD_STR               'Date'
               30BINARY_SUBSCR   
               32STORE_FAST               'O00O0OOO00OO0O000'

L. 652      34LOAD_FAST                'ar'
               36LOAD_METHOD            get
               38LOAD_FAST                'O00O0OOO00OO0O000'
               40LOAD_CONST               4
               42LOAD_CONST               -4
               44BUILD_SLICE_2         2
               46BINARY_SUBSCR   
               48LOAD_STR               'DD MMM YYYY HH:mm:ss'
               50CALL_METHOD_2         2''
               52LOAD_FAST                'ar'
               54LOAD_METHOD            now
               56CALL_METHOD_0         0''
               58LOAD_METHOD            floor
               60LOAD_STR               'second'
               62CALL_METHOD_1         1''
               64BINARY_SUBTRACT
               66STORE_FAST               'O0OOOO0O000OO0O00'

L. 653      68LOAD_FAST                'ar'
               70LOAD_METHOD            now
               72CALL_METHOD_0         0''
               74LOAD_FAST                'O0OOOO0O000OO0O00'
               76BINARY_ADD      
               78LOAD_METHOD            format
               80LOAD_FAST                'time_format'
               82CALL_METHOD_1         1''
               84STORE_FAST               'O00O00OOOOO00O0OO'

L. 654      86LOAD_GLOBAL            time
               88LOAD_METHOD            strptime
               90LOAD_FAST                'O00O00OOOOO00O0OO'
               92LOAD_CONST               None
               94LOAD_CONST               -4
               96BUILD_SLICE_2         2
               98BINARY_SUBSCR   
            100LOAD_STR               '%Y-%m-%d %H:%M:%S'
            102CALL_METHOD_2         2''
            104STORE_FAST               'O00OO0O0O00000O00'

L. 655       106LOAD_GLOBAL            int
            108LOAD_GLOBAL            time
            110LOAD_METHOD            mktime
            112LOAD_FAST                'O00OO0O0O00000O00'
            114CALL_METHOD_1         1''
            116CALL_FUNCTION_1       1''
            118STORE_FAST               'O0OOOO0O0OO00000O'

L. 656       120LOAD_FAST                'O0OOOO0O0OO00000O'
            122POP_BLOCK      
            124RETURN_VALUE   
            126_0COME_FROM_FINALLY    16'16'

L. 657       126DUP_TOP         
            128LOAD_GLOBAL            BaseException
            130COMPARE_OP               exception-match
            132POP_JUMP_IF_FALSE   178'to 178'
            134POP_TOP         
            136STORE_FAST               'OO000OO0O000OO0O0'
            138POP_TOP         
            140SETUP_FINALLY       166'to 166'

L. 658       142LOAD_GLOBAL            print
            144LOAD_STR               '获取网络时间出错,出错原因:{}'
            146LOAD_METHOD            format
            148LOAD_FAST                'OO000OO0O000OO0O0'
            150CALL_METHOD_1         1''
            152CALL_FUNCTION_1       1''
            154POP_TOP         

L. 659       156POP_BLOCK      
            158POP_EXCEPT      
            160CALL_FINALLY      166'to 166'
            162LOAD_CONST               -1
            164RETURN_VALUE   
            166_0COME_FROM         160'160'
            166_1COME_FROM_FINALLY   140'140'
            166LOAD_CONST               None
            168STORE_FAST               'OO000OO0O000OO0O0'
            170DELETE_FAST            'OO000OO0O000OO0O0'
            172END_FINALLY      
            174POP_EXCEPT      
            176JUMP_FORWARD      180'to 180'
            178_0COME_FROM         132'132'
            178END_FINALLY      
            180_0COME_FROM         176'176'

Parse error at or near `POP_EXCEPT' instruction at offset 158


    webtime = get_web_now_time()

    def Secret(O00OO000000OO00OO):
      OOOOOO0O00OOOO0OO = O00OO000000OO00OO
      OOO0OO0000O0OOO00 = win32api.GetVolumeInformation('C:\\')
      OOO00OOO000O00OO0 = (str(OOO0OO0000O0OOO00) + OOOOOO0O00OOOO0OO + 'javascriptYES').encode('utf-8')
      OO0O00O000OOOOOO0 = base64.b64encode(OOO00OOO000O00OO0)
      OO0000OOO00OO00O0 = hashlib.md5()
      OO0000OOO00OO00O0.update(OO0O00O000OOOOOO0)
      O00O0000OOO0O0O0O = OO0000OOO00OO00O0.hexdigest()
      O00O0000OOO0O0O0O = O00O0000OOO0O0O0O[:8]
      O00OO0000O0000O00 = O00O0000OOO0O0O0O + O00OO000000OO00OO
      return O00OO0000O0000O00


    def save_secret(O0000OO00000OOOO0):
      with open('cock.egg', 'w') as OO0000O0OO0OOO0O0:
            OO0000O0OO0OOO0O0.write(O0000OO00000OOOO0)


    def load_secret():
      with open('cock.egg', 'r') as OO0OOO0OO0O0O0O00:
            OO0O000000000000O = OO0OOO0OO0O0O0O00.read()
      return OO0O000000000000O


    def active_machine():
      O00O0OO0OOO0O0OOO = secret_entry3.get()
      OO0OOOO0000O00OOO = Secret(O00O0OO0OOO0O0OOO)
      if O00O0OO0OOO0O0OOO == OO0OOOO0000O00OOO:
            if webtime - int(O00O0OO0OOO0O0OOO) > 0:
                messagebox.showwarning('过期提示', '激活码已过期,请使用正确的激活码')
            else:
                if webtime == -1:
                  messagebox.showwarning('网络未连接', '请连接网络后重试')
                else:
                  OOOOOO0O0O00O0OOO = time.localtime(int(O00O0OO0OOO0O0OOO))
                  O0000O0O0O0OO0OO0 = time.strftime('%Y年%m月%d日', OOOOOO0O0O00O0OOO)
                  lable_expire.configure(text=(O0000O0O0O0OO0OO0 + '过期'), bg='hotpink')
                  save_secret(O00O0OO0OOO0O0OOO)
                  start_btn.config(state=NORMAL)
                  load_script.configure(state=NORMAL)
                  edit_script.configure(state=NORMAL)
                  fresh_btn.configure(state=NORMAL)
                  fresh_btn2.configure(state=NORMAL)
                  switch_btn.configure(state=NORMAL)
                  lable_expire.configure(fg='white')
                  label_7.pack_forget()
                  secret_entry3.pack_forget()
                  activeBtn.pack_forget()
                  show_c_num.configure(bg='white', fg='black')
                  messagebox.showinfo('激活成功', '软件已激活,可正常使用O(∩_∩)O')
      else:
            messagebox.showwarning('激活码错误', '输入正确的激活码')


    def check_expire():
      while True:
            time.sleep(3600)
            O000OOOOOOOO0O000 = get_web_now_time()
            if os.path.exists('cock.egg') == False:
                save_secret('000000000000000000')
                O00O00OO00OO00O00 = '000000000000000000'
                O0O00O00O0O0OO000 = Secret('0000000000')
            else:
                O00O00OO00OO00O00 = load_secret()
                O0O00O00O0O0OO000 = Secret(O00O00OO00OO00O00)
                while O00O00OO00OO00O00 != O0O00O00O0O0OO000 or O000OOOOOOOO0O000 - int(O00O00OO00OO00O00) > 0 or O000OOOOOOOO0O000 == -1:
                  stop_listing_msg()
                  fresh_btn.configure(state=DISABLED)
                  fresh_btn2.configure(state=DISABLED)
                  start_btn.config(state=DISABLED)
                  switch_btn.configure(state=DISABLED)
                  messagebox.showwarning('过期提示', '激活码已过期,请重新启动软件注册')

                print('自检完成,未过期')


    if os.path.exists('cock.egg') == False:
      save_secret('000000000000000000')
      local_secret = '000000000000000000'
      secret = Secret('0000000000')
    else:
      local_secret = load_secret()
      secret = Secret(local_secret)
    lable_expire = Label(main_frame, text='', anchor='center', relief='groove', width=main_width, fg='white')
    lable_expire.pack(side='top', fill='x', pady=3, padx=1)
    if local_secret != secret or webtime - int(local_secret) > 0 or webtime == -1:
      lable_expire.configure(text='软件未激活', bg='white', fg='black')
      show_c_num.configure(bg='mediumaquamarine', fg='white')
      start_btn.config(state=DISABLED)
      load_script.configure(state=DISABLED)
      edit_script.configure(state=DISABLED)
      fresh_btn.configure(state=DISABLED)
      fresh_btn2.configure(state=DISABLED)
      switch_btn.configure(state=DISABLED)
      label_7 = Label(main_frame, text='输入激活码:', anchor='w', relief='groove', width=main_width)
      label_7.pack(side='top', fill='x', pady=3, padx=1)
      secret_entry3 = Entry(main_frame, width=main_width, bg='GhostWhite')
      secret_entry3.insert(0, '')
      secret_entry3.pack(side='top', fill='x', pady=3, padx=1)
      activeBtn = Button(main_frame, text='激   活', relief='groove', width=main_width, height=1, command=active_machine, bg='hotpink', fg='white')
      activeBtn.pack(side='top', fill='x', pady=3, padx=1)
      if time.time() - int(local_secret) > 0:
            messagebox.showwarning('过期提示', '激活码已过期,请重新注册')
    else:
      time_local = time.localtime(int(local_secret))
      dt = time.strftime('%Y年%m月%d日', time_local)
      lable_expire.configure(text=(dt + '过期'), bg='hotpink')
      _thread.start_new_thread(check_expire, ())

    def agree_it():
      agree_frame.pack_forget()
      main_frame.pack(side='left', fill='x', pady=3, padx=1)


    def disagree_it():
      win.destroy()


    agree_frame = Frame(win, width=main_width, bg='white')
    agree_frame.pack(side='left', fill='x', pady=3, padx=1, anchor='center')
    agreePad = ScrolledText(agree_frame, width=edit_width, height=18, bg='white', fg='black', font=('黑体',
                                                                                                    16))
    agreePad.pack(side='top', fill='both', expand='yes', pady=3, padx=1, anchor=N)
    font1 = ('黑体', 16)
    font2 = ('黑体', 14)
    font3 = ('黑体', 12)
    agreePad.insert(END, '                     使用协议\n\n    欢迎使用本工具,请您务必仔细阅读本协议,以便更好地使用本工具。\n\n一、服务说明\n\n    1.本工具是一款可在本地计算机调用浏览器执行用户编写的JavaScript代码的工具,为用户提供代码编辑器,点击“执行”按钮即可运行代码。\n\n    2.用户必须自行承担使用本工具的一切后果。\n\n    3.用户自行编写或执行的JavaScript代码不得涉及违法活动,否则一切后果由用户自行承担。\n\n二、使用规则\n\n    1.用户在使用本工具时应遵守国家法律法规、政策规定及其他相关规定。\n\n    2.用户不得利用本工具从事任何违反国家法律法规、政策规定及其他相关规定的活动。\n\n    3.用户自行编写或执行的JS代码不得涉及违法活动,否则一切后果由用户自行承担。\n\n三、免责声明\n\n    1.本工具不对用户自行编写的JS代码的正确性、合法性、安全性进行保证,如因用户自行编写的JS代码引起的任何问题均由用户自行承担。\n\n    2.用户因使用本工具而导致的任何直接或间接损失,本工具概不负责,亦不承担任何法律责任。\n\n    3.本工具不对用户因使用本工具未能达到预期效果或遭受任何非正常因素引起的损失承担任何责任。\n\n四、知识产权声明\n\n    用户不得对本工具的任何资源、信息和材料进行修改、重制、复制、抄袭、传播、出售等。\n\n五、其他条款\n\n    1.本协议未涉及的问题和争议,应参照中华人民共和国国家法律法规等规定予以处理。\n\n    2.本工具保留协议修订的权利,如果本协议有任何更改,我们将在后续版本更新中公布,一经公布即具有法律约束力,请您经常更新软件获得最新协议。\n\n    3.本协议一经点击下方确定按钮,则视为用户已经完全了解并接受了本协议的各项条款,并同意遵守相关规定。\n\n    4.本协议的解释权归本工具所有。如用户对本协议有任何疑问或建议,请联系本工具客服。\n\n', font1)
    agreePad.configure(state=DISABLED)
    choose_frame = Frame(agree_frame, width=main_width, bg='white')
    choose_frame.pack(side='top', fill='x', pady=3, padx=1, anchor='center')
    agree_btn = Button(choose_frame, text='同意', relief='groove', bg=btn_bg, font=font_set, state=DISABLED, command=agree_it)
    agree_btn.pack(side='left', fill='x', pady=3, padx=155, anchor='center')
    disagree_btn = Button(choose_frame, text='不同意', relief='groove', bg=btn_bg, font=font_set, state=DISABLED, command=disagree_it)
    disagree_btn.pack(side='left', fill='x', pady=3, padx=1, anchor='center')
    main_frame.pack_forget()

    def wait_five():
      agree_btn.configure(text='同意(5)')
      time.sleep(1)
      agree_btn.configure(text='同意(4)')
      time.sleep(1)
      agree_btn.configure(text='同意(3)')
      time.sleep(1)
      agree_btn.configure(text='同意(2)')
      time.sleep(1)
      agree_btn.configure(text='同意(1)')
      time.sleep(1)
      agree_btn.configure(text='同   意', state=NORMAL)
      disagree_btn.configure(state=NORMAL)


    _thread.start_new_thread(wait_five, ())
    win.mainloop()

一身白 发表于 2023-12-7 21:29

不懂如何在调试器中定位代码,有大哥踢我一脚 小弟学习学习
页: [1]
查看完整版本: 无壳本地验证求助