增加实时数据库解密方法
This commit is contained in:
parent
f2e5c0f928
commit
bbc51a78df
@ -6,7 +6,7 @@
|
||||
# Date: 2023/10/14
|
||||
# -------------------------------------------------------------------------------
|
||||
from .wx_info import BiasAddr, read_info, get_wechat_db, encrypt, batch_decrypt, decrypt, get_core_db
|
||||
from .wx_info import merge_copy_db, merge_msg_db, merge_media_msg_db, merge_db, decrypt_merge
|
||||
from .wx_info import merge_copy_db, merge_msg_db, merge_media_msg_db, merge_db, decrypt_merge,merge_real_time_db
|
||||
from .analyzer.db_parsing import read_img_dat, read_emoji, decompress_CompressContent, read_audio_buf, read_audio, \
|
||||
parse_xml_string, read_BytesExtra
|
||||
from .analyzer import export_csv,export_json
|
||||
@ -23,4 +23,4 @@ except:
|
||||
VERSION_LIST = {}
|
||||
VERSION_LIST_PATH = None
|
||||
|
||||
__version__ = "2.4.33"
|
||||
__version__ = "2.4.34"
|
||||
|
@ -16,7 +16,7 @@ from pywxdump import analyzer, read_img_dat, read_audio, get_wechat_db, get_core
|
||||
from pywxdump.analyzer.export_chat import get_contact, get_room_user_list
|
||||
from pywxdump.api.rjson import ReJson, RqJson
|
||||
from pywxdump.api.utils import read_session, save_session, error9999
|
||||
from pywxdump import read_info, VERSION_LIST, batch_decrypt, BiasAddr, merge_db, decrypt_merge
|
||||
from pywxdump import read_info, VERSION_LIST, batch_decrypt, BiasAddr, merge_db, decrypt_merge, merge_real_time_db
|
||||
import pywxdump
|
||||
|
||||
# app = Flask(__name__, static_folder='../ui/web/dist', static_url_path='/')
|
||||
@ -46,8 +46,14 @@ def init():
|
||||
save_msg_path = read_session(g.sf, "msg_path")
|
||||
save_micro_path = read_session(g.sf, "micro_path")
|
||||
save_my_wxid = read_session(g.sf, "my_wxid")
|
||||
|
||||
if save_msg_path and save_micro_path and os.path.exists(save_msg_path) and os.path.exists(
|
||||
save_micro_path):
|
||||
try:
|
||||
a = get_real_time_msg()
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
return ReJson(0, {"msg_path": save_msg_path, "micro_path": save_micro_path, "is_init": True})
|
||||
else:
|
||||
return ReJson(1002, body="上次初始化的路径不存在")
|
||||
@ -284,6 +290,34 @@ def get_msgs():
|
||||
return ReJson(0, {"msg_list": msg_list, "user_list": userlist, "my_wxid": my_wxid})
|
||||
|
||||
|
||||
@api.route('/api/realtimemsg', methods=["GET", "POST"])
|
||||
@error9999
|
||||
def get_real_time_msg():
|
||||
"""
|
||||
获取实时消息 使用 merge_real_time_db()函数
|
||||
:return:
|
||||
"""
|
||||
save_msg_path = read_session(g.sf, "msg_path")
|
||||
save_media_path = read_session(g.sf, "media_path")
|
||||
wx_path = read_session(g.sf, "wx_path")
|
||||
key = read_session(g.sf, "key")
|
||||
|
||||
if not save_msg_path or not save_media_path or not wx_path or not key:
|
||||
return ReJson(1002, body="msg_path or media_path or wx_path or key is required")
|
||||
media_paths = get_core_db(wx_path, ["MediaMSG"])
|
||||
msg_paths = get_core_db(wx_path, ["MSG"])
|
||||
|
||||
if not media_paths[0] or not msg_paths[0]:
|
||||
return ReJson(1001, body="media_paths or msg_paths is required")
|
||||
media_paths = media_paths[1]
|
||||
media_paths.sort()
|
||||
msg_paths = msg_paths[1]
|
||||
msg_paths.sort()
|
||||
merge_real_time_db(key=key, db_path=media_paths[-1], merge_path=save_media_path)
|
||||
merge_real_time_db(key=key, db_path=msg_paths[-1], merge_path=save_msg_path)
|
||||
return ReJson(0, "success")
|
||||
|
||||
|
||||
@api.route('/api/img', methods=["GET", 'POST'])
|
||||
@error9999
|
||||
def get_img():
|
||||
|
@ -8,4 +8,4 @@
|
||||
from .get_wx_info import read_info, get_wechat_db, get_core_db
|
||||
from .get_bias_addr import BiasAddr
|
||||
from .decryption import batch_decrypt, encrypt, decrypt
|
||||
from .merge_db import merge_msg_db, merge_copy_db, merge_media_msg_db, merge_db, decrypt_merge
|
||||
from .merge_db import merge_msg_db, merge_copy_db, merge_media_msg_db, merge_db, decrypt_merge,merge_real_time_db
|
||||
|
@ -330,3 +330,49 @@ def decrypt_merge(wx_path, key, outpath="", CreateTime: int = 0, endCreateTime:
|
||||
endCreateTime=endCreateTime)
|
||||
|
||||
return True, merge_save_path
|
||||
|
||||
|
||||
def merge_real_time_db(key, db_path: str, merge_path: str, CreateTime: int = 0, endCreateTime: int = 9999999999):
|
||||
"""
|
||||
合并实时数据库消息,暂时只支持64位系统
|
||||
:param key: 解密密钥
|
||||
:param db_path: 数据库路径
|
||||
:param merge_path: 合并后的数据库路径
|
||||
:param CreateTime: 从这个时间开始的消息 10位时间戳
|
||||
:param endCreateTime: 结束时间
|
||||
:return:
|
||||
"""
|
||||
try:
|
||||
import platform
|
||||
except:
|
||||
raise ImportError("未找到模块 platform")
|
||||
# 判断系统位数是否为64位,如果不是则抛出异常
|
||||
if platform.architecture()[0] != '64bit':
|
||||
raise Exception("System is not 64-bit.")
|
||||
|
||||
|
||||
if not os.path.exists(db_path):
|
||||
raise FileNotFoundError("数据库不存在")
|
||||
|
||||
out_path = "tmp_real_time.db"
|
||||
|
||||
if os.path.exists(out_path):
|
||||
os.remove(out_path)
|
||||
|
||||
# 获取当前文件夹路径
|
||||
current_path = os.path.dirname(__file__)
|
||||
|
||||
real_time_exe_path = os.path.join(current_path, "tools", "realTime.exe")
|
||||
|
||||
# 调用cmd命令
|
||||
cmd = f"{real_time_exe_path} \"{key}\" \"{db_path}\" \"{out_path}\" {CreateTime} {endCreateTime}"
|
||||
os.system(cmd)
|
||||
|
||||
if not os.path.exists(out_path):
|
||||
raise FileNotFoundError("合并失败")
|
||||
|
||||
a = merge_db([out_path], merge_path, CreateTime=CreateTime, endCreateTime=endCreateTime)
|
||||
|
||||
os.remove(out_path)
|
||||
|
||||
return merge_path
|
||||
|
BIN
pywxdump/wx_info/tools/libcrypto-1_1-x64.dll
Normal file
BIN
pywxdump/wx_info/tools/libcrypto-1_1-x64.dll
Normal file
Binary file not shown.
BIN
pywxdump/wx_info/tools/realTime.exe
Normal file
BIN
pywxdump/wx_info/tools/realTime.exe
Normal file
Binary file not shown.
2
setup.py
2
setup.py
@ -49,7 +49,7 @@ setup(
|
||||
},
|
||||
|
||||
package_data={
|
||||
'pywxdump': ['version_list.json', 'ui/templates/*', 'ui/web/*', 'ui/web/assets/*']
|
||||
'pywxdump': ['version_list.json', 'ui/templates/*', 'ui/web/*', 'ui/web/assets/*', 'wx_info/tools/*']
|
||||
},
|
||||
classifiers=[
|
||||
"Programming Language :: Python :: 3",
|
||||
|
@ -164,6 +164,13 @@ if package_path:
|
||||
datas_741258.append(f'''(r'{file_path}', r'{os.path.dirname(file_path.replace(package_path, "")[1:])}' )''')
|
||||
datas_741258 = ",\n".join(datas_741258)
|
||||
|
||||
# 获取 wx_info/tools 文件夹下的所有文件 用于打包
|
||||
for root, dirs, files in os.walk(os.path.join(root_path, "wx_info", "tools")):
|
||||
for file in files:
|
||||
file_path = os.path.join(root, file)
|
||||
datas_741258 += f''',\n(r'{file_path}', r'{os.path.dirname(file_path.replace(package_path, "")[1:])}' )'''
|
||||
|
||||
|
||||
# print(datas_741258)
|
||||
# 生成 spec 文件
|
||||
spec_content = spec_content.format(root_path=root_path, hidden_imports=hidden_imports, datas_741258=datas_741258, version=__version__)
|
||||
|
Loading…
Reference in New Issue
Block a user