无壳本地验证求助
用x64dbg 搜索不到字符串
https://wwi.lanzouj.com/iVDEo1gcy2hi
没想到啊,一份付出2份回报{:5_116:} 附上查毒https://www.virscan.org/report/cc1f1977c16439351fe1e03d630f991d6fcaaa6eeb119d0ad6c8605b55b93acf 用x64dbg调试 这是Python打包的软件 源码加密了 python 打包的程序,我尝试解包没办法太菜了,包太大 放不上来 不懂在调试器中如何定位关键位置,有大哥解决了的话 踢我一脚# 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() 不懂如何在调试器中定位代码,有大哥踢我一脚 小弟学习学习
页:
[1]