新增dll检测功能

This commit is contained in:
2022-11-18 17:18:24 +08:00
parent 386022ea36
commit 50cdbd13f4
8 changed files with 334 additions and 71 deletions

24
demo/CheckDLL/Check.cpp Normal file
View File

@@ -0,0 +1,24 @@
/**********************************
* 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
* 版本2.5.0
* 更新时间2022年11月18日
* 只能在 Wine/Windows 运行
**********************************/
#include <iostream>
#include <Windows.h>
using namespace std;
int main(int argc, char* argv[]){
HINSTANCE hdll;
hdll = LoadLibrary(argv[1]);
if(argv[1] == ""){
cout << "Don't have full parameter" << endl;
return 2;
}
cout << "Checking " << argv[1] << " ......" << endl;
if(hdll == NULL){
cout << "Error, can't load this library." << endl;
return 1;
}
cout << "No Problem!" << endl;
return 0;
}

BIN
demo/CheckDLL/Check.exe Executable file

Binary file not shown.

73
demo/CheckDLL/main.py Normal file
View File

@@ -0,0 +1,73 @@
#!/usr/bin/env python3
# 使用系统默认的 python3 运行
#################################################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本2.5.0
# 更新时间2022年11月18日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建
#################################################################################################################
#################
# 引入所需的库
#################
import os
import sys
import json
if len(sys.argv) <= 1:
print("参数不足")
sys.exit(1)
if "--help" in sys.argv:
print("帮助:")
print("[exe path] [option]")
print("--json 以 json 格式输出")
print("-w [wine botton] [wine program path]")
jsonPrint = "--json" in sys.argv
if jsonPrint:
del sys.argv[sys.argv.index("--json")]
lists = []
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
checkDll = False
if "-w" in sys.argv:
wineCommand = sys.argv.index("-w")
wineBotton = os.getenv("HOME")
wineProgram = "deepin-wine6-stable"
checkDll = True
try:
wineBotton = sys.argv[wineCommand + 1]
wineProgram = sys.argv[wineCommand + 2]
except:
pass
with open(sys.argv[1], "rb") as file:
while True:
things = file.readline()
if things == b"":
break
for n in [".dll", ".DLL"]:
if n.encode() in things:
# 提取 DLL 名称
for i in str(things[1: -2]).split("\\x"):
if n in i:
dllName = i[2: ].replace(",{M", "").replace("+", "")
if dllName.lower() == ".dll":
continue
if dllName in lists:
continue
if checkDll:
if jsonPrint:
if os.system(f"WINEPREFIX='{wineBotton}' {wineProgram} '{programPath}/Check.exe' '{dllName}' > /dev/null 2>&1"):
lists.append(dllName)
continue
else:
os.system(f"WINEPREFIX='{wineBotton}' {wineProgram} '{programPath}/Check.exe' '{dllName}'")
lists.append(dllName)
elif jsonPrint:
lists.append(dllName)
continue
else:
print(dllName)
lists.append(dllName)
if jsonPrint:
print(json.dumps(lists))