Move scripts away from the root directory

This commit is contained in:
KingRainbow44 2023-03-31 17:05:12 -04:00
parent 4a6ff4721c
commit 5bf5fb07a2
No known key found for this signature in database
GPG Key ID: FC2CB64B00D257BE
12 changed files with 187 additions and 182 deletions

View File

@ -6,7 +6,7 @@ on:
- ".github/workflows/**" - ".github/workflows/**"
- "src/main/**.java" - "src/main/**.java"
- "**.json" - "**.json"
- "manage_languages.py" - "scripts/manage_languages.py"
branches: branches:
- "stable" - "stable"
- "development" - "development"
@ -15,7 +15,7 @@ on:
- ".github/workflows/**" - ".github/workflows/**"
- "src/main/**.java" - "src/main/**.java"
- "**.json" - "**.json"
- "manage_languages.py" - "scripts/manage_languages.py"
types: types:
- opened - opened
- synchronize - synchronize
@ -28,4 +28,4 @@ jobs:
- uses: actions/setup-python@v4 - uses: actions/setup-python@v4
with: with:
python-version: '3.10' # Version range or exact version of a Python version to use, using SemVer's version range syntax python-version: '3.10' # Version range or exact version of a Python version to use, using SemVer's version range syntax
- run: python3 manage_languages.py -l - run: python3 scripts/manage_languages.py -l

View File

@ -7,8 +7,8 @@ on:
- "src/main/**.java" - "src/main/**.java"
- "**.json" - "**.json"
- "build.gradle" - "build.gradle"
- "format_whitespace.py" - "scripts/format_whitespace.py"
- "manage_languages.py" - "scripts/manage_languages.py"
branches: branches:
- "development" - "development"
jobs: jobs:
@ -24,7 +24,7 @@ jobs:
with: with:
python-version: '3.10' python-version: '3.10'
- name: Run Whitespace Linter - name: Run Whitespace Linter
run: python format_whitespace.py run: python scripts/format_whitespace.py
- run: git config --global user.name "github-actions" - run: git config --global user.name "github-actions"
- run: git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - run: git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
- run: git stash - run: git stash
@ -37,7 +37,7 @@ jobs:
run: git add -u && git commit -m 'Fix whitespace [skip actions]' || true run: git add -u && git commit -m 'Fix whitespace [skip actions]' || true
- name: Update Languages - name: Update Languages
run: python manage_languages.py -u run: python scripts/manage_languages.py -u
- name: Commit any language changes - name: Commit any language changes
run: git add -u && git commit -m 'Update languages [skip actions]' || true run: git add -u && git commit -m 'Update languages [skip actions]' || true

View File

@ -1 +0,0 @@
./gradlew clean

View File

@ -1,2 +0,0 @@
call .\gradlew jar
pause

View File

@ -0,0 +1,4 @@
@echo off
call ..\gradlew clean
pause

4
scripts/gradlew-jar.bat Normal file
View File

@ -0,0 +1,4 @@
@echo off
call ..\gradlew jar
pause

View File

@ -1,155 +1,155 @@
## ##
# #
# Copyright (C) 2002-2022 MlgmXyysd All Rights Reserved. # Copyright (C) 2002-2022 MlgmXyysd All Rights Reserved.
# #
## ##
## ##
# #
# Animation Company script for mitmproxy # Animation Company script for mitmproxy
# #
# https://github.com/MlgmXyysd/ # https://github.com/MlgmXyysd/
# #
# *Original fiddler script from https://github.lunatic.moe/fiddlerscript # *Original fiddler script from https://github.lunatic.moe/fiddlerscript
# #
# Environment requirement: # Environment requirement:
# - mitmdump from mitmproxy # - mitmdump from mitmproxy
# #
# @author MlgmXyysd # @author MlgmXyysd
# @version 1.1 # @version 1.1
# #
## ##
import collections import collections
import random import random
from mitmproxy import http, connection, ctx, tls from mitmproxy import http, connection, ctx, tls
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from enum import Enum from enum import Enum
from mitmproxy.utils import human from mitmproxy.utils import human
from proxy_config import USE_SSL from proxy_config import USE_SSL
from proxy_config import REMOTE_HOST from proxy_config import REMOTE_HOST
from proxy_config import REMOTE_PORT from proxy_config import REMOTE_PORT
class MlgmXyysd_Animation_Company_Proxy: class MlgmXyysd_Animation_Company_Proxy:
LIST_DOMAINS = [ LIST_DOMAINS = [
"api-os-takumi.mihoyo.com", "api-os-takumi.mihoyo.com",
"hk4e-api-os-static.mihoyo.com", "hk4e-api-os-static.mihoyo.com",
"hk4e-sdk-os.mihoyo.com", "hk4e-sdk-os.mihoyo.com",
"dispatchosglobal.yuanshen.com", "dispatchosglobal.yuanshen.com",
"osusadispatch.yuanshen.com", "osusadispatch.yuanshen.com",
"account.mihoyo.com", "account.mihoyo.com",
"log-upload-os.mihoyo.com", "log-upload-os.mihoyo.com",
"dispatchcntest.yuanshen.com", "dispatchcntest.yuanshen.com",
"devlog-upload.mihoyo.com", "devlog-upload.mihoyo.com",
"webstatic.mihoyo.com", "webstatic.mihoyo.com",
"log-upload.mihoyo.com", "log-upload.mihoyo.com",
"hk4e-sdk.mihoyo.com", "hk4e-sdk.mihoyo.com",
"api-beta-sdk.mihoyo.com", "api-beta-sdk.mihoyo.com",
"api-beta-sdk-os.mihoyo.com", "api-beta-sdk-os.mihoyo.com",
"cnbeta01dispatch.yuanshen.com", "cnbeta01dispatch.yuanshen.com",
"dispatchcnglobal.yuanshen.com", "dispatchcnglobal.yuanshen.com",
"cnbeta02dispatch.yuanshen.com", "cnbeta02dispatch.yuanshen.com",
"sdk-os-static.mihoyo.com", "sdk-os-static.mihoyo.com",
"webstatic-sea.mihoyo.com", "webstatic-sea.mihoyo.com",
"webstatic-sea.hoyoverse.com", "webstatic-sea.hoyoverse.com",
"hk4e-sdk-os-static.hoyoverse.com", "hk4e-sdk-os-static.hoyoverse.com",
"sdk-os-static.hoyoverse.com", "sdk-os-static.hoyoverse.com",
"api-account-os.hoyoverse.com", "api-account-os.hoyoverse.com",
"hk4e-sdk-os.hoyoverse.com", "hk4e-sdk-os.hoyoverse.com",
"overseauspider.yuanshen.com", "overseauspider.yuanshen.com",
"gameapi-account.mihoyo.com", "gameapi-account.mihoyo.com",
"minor-api.mihoyo.com", "minor-api.mihoyo.com",
"public-data-api.mihoyo.com", "public-data-api.mihoyo.com",
"uspider.yuanshen.com", "uspider.yuanshen.com",
"sdk-static.mihoyo.com", "sdk-static.mihoyo.com",
"abtest-api-data-sg.hoyoverse.com", "abtest-api-data-sg.hoyoverse.com",
"log-upload-os.hoyoverse.com" "log-upload-os.hoyoverse.com"
] ]
def request(self, flow: http.HTTPFlow) -> None: def request(self, flow: http.HTTPFlow) -> None:
if flow.request.host in self.LIST_DOMAINS: if flow.request.host in self.LIST_DOMAINS:
if USE_SSL: if USE_SSL:
flow.request.scheme = "https" flow.request.scheme = "https"
else: else:
flow.request.scheme = "http" flow.request.scheme = "http"
flow.request.host = REMOTE_HOST flow.request.host = REMOTE_HOST
flow.request.port = REMOTE_PORT flow.request.port = REMOTE_PORT
class InterceptionResult(Enum): class InterceptionResult(Enum):
SUCCESS = 1 SUCCESS = 1
FAILURE = 2 FAILURE = 2
SKIPPED = 3 SKIPPED = 3
class TlsStrategy(ABC): class TlsStrategy(ABC):
def __init__(self): def __init__(self):
self.history = collections.defaultdict(lambda: collections.deque(maxlen=200)) self.history = collections.defaultdict(lambda: collections.deque(maxlen=200))
@abstractmethod @abstractmethod
def should_intercept(self, server_address: connection.Address) -> bool: def should_intercept(self, server_address: connection.Address) -> bool:
raise NotImplementedError() raise NotImplementedError()
def record_success(self, server_address): def record_success(self, server_address):
self.history[server_address].append(InterceptionResult.SUCCESS) self.history[server_address].append(InterceptionResult.SUCCESS)
def record_failure(self, server_address): def record_failure(self, server_address):
self.history[server_address].append(InterceptionResult.FAILURE) self.history[server_address].append(InterceptionResult.FAILURE)
def record_skipped(self, server_address): def record_skipped(self, server_address):
self.history[server_address].append(InterceptionResult.SKIPPED) self.history[server_address].append(InterceptionResult.SKIPPED)
class ConservativeStrategy(TlsStrategy): class ConservativeStrategy(TlsStrategy):
def should_intercept(self, server_address: connection.Address) -> bool: def should_intercept(self, server_address: connection.Address) -> bool:
return InterceptionResult.FAILURE not in self.history[server_address] return InterceptionResult.FAILURE not in self.history[server_address]
class ProbabilisticStrategy(TlsStrategy): class ProbabilisticStrategy(TlsStrategy):
def __init__(self, p: float): def __init__(self, p: float):
self.p = p self.p = p
super().__init__() super().__init__()
def should_intercept(self, server_address: connection.Address) -> bool: def should_intercept(self, server_address: connection.Address) -> bool:
return random.uniform(0, 1) < self.p return random.uniform(0, 1) < self.p
class MaybeTls: class MaybeTls:
strategy: TlsStrategy strategy: TlsStrategy
def load(self, l): def load(self, l):
l.add_option( l.add_option(
"tls_strategy", int, 0, "tls_strategy", int, 0,
"TLS passthrough strategy. If set to 0, connections will be passed through after the first unsuccessful " "TLS passthrough strategy. If set to 0, connections will be passed through after the first unsuccessful "
"handshake. If set to 0 < p <= 100, connections with be passed through with probability p.", "handshake. If set to 0 < p <= 100, connections with be passed through with probability p.",
) )
def configure(self, updated): def configure(self, updated):
if "tls_strategy" not in updated: if "tls_strategy" not in updated:
return return
if ctx.options.tls_strategy > 0: if ctx.options.tls_strategy > 0:
self.strategy = ProbabilisticStrategy(ctx.options.tls_strategy / 100) self.strategy = ProbabilisticStrategy(ctx.options.tls_strategy / 100)
else: else:
self.strategy = ConservativeStrategy() self.strategy = ConservativeStrategy()
def tls_clienthello(self, data: tls.ClientHelloData): def tls_clienthello(self, data: tls.ClientHelloData):
server_address = data.context.server.peername server_address = data.context.server.peername
if not self.strategy.should_intercept(server_address): if not self.strategy.should_intercept(server_address):
ctx.log(f"TLS passthrough: {human.format_address(server_address)}.") ctx.log(f"TLS passthrough: {human.format_address(server_address)}.")
data.ignore_connection = True data.ignore_connection = True
self.strategy.record_skipped(server_address) self.strategy.record_skipped(server_address)
def tls_established_client(self, data: tls.TlsData): def tls_established_client(self, data: tls.TlsData):
server_address = data.context.server.peername server_address = data.context.server.peername
ctx.log(f"TLS handshake successful: {human.format_address(server_address)}") ctx.log(f"TLS handshake successful: {human.format_address(server_address)}")
self.strategy.record_success(server_address) self.strategy.record_success(server_address)
def tls_failed_client(self, data: tls.TlsData): def tls_failed_client(self, data: tls.TlsData):
server_address = data.context.server.peername server_address = data.context.server.peername
ctx.log(f"TLS handshake failed: {human.format_address(server_address)}") ctx.log(f"TLS handshake failed: {human.format_address(server_address)}")
self.strategy.record_failure(server_address) self.strategy.record_failure(server_address)
addons = [ addons = [
MlgmXyysd_Animation_Company_Proxy(), MlgmXyysd_Animation_Company_Proxy(),
MaybeTls() MaybeTls()
] ]

View File

@ -1,17 +1,17 @@
import os import os
# This can also be replaced with another IP address. # This can also be replaced with another IP address.
USE_SSL = True USE_SSL = True
REMOTE_HOST = "localhost" REMOTE_HOST = "localhost"
REMOTE_PORT = 443 REMOTE_PORT = 443
if os.getenv('MITM_REMOTE_HOST') != None: if os.getenv('MITM_REMOTE_HOST') != None:
REMOTE_HOST = os.getenv('MITM_REMOTE_HOST') REMOTE_HOST = os.getenv('MITM_REMOTE_HOST')
if os.getenv('MITM_REMOTE_PORT') != None: if os.getenv('MITM_REMOTE_PORT') != None:
REMOTE_PORT = int(os.getenv('MITM_REMOTE_PORT')) REMOTE_PORT = int(os.getenv('MITM_REMOTE_PORT'))
if os.getenv('MITM_USE_SSL') != None: if os.getenv('MITM_USE_SSL') != None:
USE_SSL = bool(os.getenv('MITM_USE_SSL')) USE_SSL = bool(os.getenv('MITM_USE_SSL'))
print('MITM Remote Host: ' + REMOTE_HOST) print('MITM Remote Host: ' + REMOTE_HOST)
print('MITM Remote Port: ' + str(REMOTE_PORT)) print('MITM Remote Port: ' + str(REMOTE_PORT))
print('MITM Use SSL ' + str(USE_SSL)) print('MITM Use SSL ' + str(USE_SSL))