From a6cb7d7067df1ed10e389dd15b8d8ca8ffb50f40 Mon Sep 17 00:00:00 2001 From: smartfrigde <37928912+smartfrigde@users.noreply.github.com> Date: Tue, 30 Apr 2024 17:46:31 +0200 Subject: [PATCH] poc --- .github/release.md | 1 + .github/workflows/build.yml | 54 +++++++++++++++++++++++++++++++++++++ .gitignore | 1 + bdInject.nimble | 13 +++++++++ nim.cfg | 5 ++++ src/bdInject.nim | 26 ++++++++++++++++++ src/index.js | 11 ++++++++ src/package.json | 4 +++ 8 files changed, 115 insertions(+) create mode 100644 .github/release.md create mode 100644 .github/workflows/build.yml create mode 100644 bdInject.nimble create mode 100644 nim.cfg create mode 100644 src/bdInject.nim create mode 100644 src/index.js create mode 100644 src/package.json diff --git a/.github/release.md b/.github/release.md new file mode 100644 index 0000000..5cde7ed --- /dev/null +++ b/.github/release.md @@ -0,0 +1 @@ +# These builds are automatically generated by GitHub Actions \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..64236e1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,54 @@ +name: Build and release +on: [push] +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: jiro4989/setup-nim-action@v1 + with: + nim-version: '2.0.2' # default is 'stable' + - name: Install dependencies + run: nimble install -y + - name: Build the project on Linux + run: nim c -d:release src/bdInject.nim + - name: Build the project on Windows + run: sudo apt install mingw-w64 && nim c --os:Windows -d:mingw -d:release --cpu:amd64 src/bdInject.nim + - id: vars + shell: bash + run: | + echo "::set-output name=sha_short::$(git rev-parse --short HEAD)" + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.vars.outputs.sha_short }} + release_name: Release ${{ steps.vars.outputs.sha_short }} + draft: true + prerelease: false + body_path: ./.github/release.md + - uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: /home/runner/work/bdInject/bdInject/src/bdInject + asset_name: bdInjectLinux + asset_content_type: application/octet-stream + - uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: /home/runner/work/bdInject/bdInject/src/bdInject.exe + asset_name: bdInjectWindows.exe + asset_content_type: application/octet-stream + - run: | + curl --request PATCH \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + -H "Content-Type: application/json" \ + https://api.github.com/repos/${{ github.repository }}/releases/${{steps.create_release.outputs.id}} \ + -d '{"draft":false}' \ No newline at end of file diff --git a/.gitignore b/.gitignore index 32e1dc0..96965df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ nimcache/ nimblecache/ htmldocs/ +src/bdInject \ No newline at end of file diff --git a/bdInject.nimble b/bdInject.nimble new file mode 100644 index 0000000..bc2226d --- /dev/null +++ b/bdInject.nimble @@ -0,0 +1,13 @@ +# Package + +version = "0.1.0" +author = "smartfrigde" +description = "bdCompat installer for ArmCord" +license = "MIT" +srcDir = "src" +bin = @["bdInject"] + + +# Dependencies + +requires "nim >= 2.0.2", "puppy >= 2.1.2", "zippy >= 0.10.12" diff --git a/nim.cfg b/nim.cfg new file mode 100644 index 0000000..cb7c17c --- /dev/null +++ b/nim.cfg @@ -0,0 +1,5 @@ +amd64.windows.gcc.path = "/usr/bin/" +amd64.windows.gcc.exe = "x86_64-w64-mingw32-gcc" +amd64.windows.gcc.linkerexe = "x86_64-w64-mingw32-gcc" +amd64.windows.gcc.options.linker = "" +#gcc.options.linker = "" \ No newline at end of file diff --git a/src/bdInject.nim b/src/bdInject.nim new file mode 100644 index 0000000..6505806 --- /dev/null +++ b/src/bdInject.nim @@ -0,0 +1,26 @@ +import os +import zippy/ziparchives +import puppy +const jsIndex: string = staticRead"index.js" +const jsonPackage: string = staticRead"package.json" +type + Paths = array[3, string] +# let commonInstallPaths: Paths = ["Jasmine", "Ktisztina", "Kristof"] +when isMainModule: + echo("BDCompat injector") + write(stdout, "Your resources directory -> ") + var input: string = readLine(stdin) + var asar: string = joinPath(input & "/app.asar") + echo(asar) + if fileExists(asar): + echo "Injecting BDCompat..." + moveFile(asar, input & "/app-original.asar") + createDir(input & "/app") + writeFile(input & "/app/index.js", jsIndex) + writeFile(input & "/app/package.json", jsonPackage) + writeFile(input & "/app/kernel.asar", fetch("https://github.com/kernel-mod/electron/releases/download/2023-01-15-07-14-02/kernel.asar")) + writeFile(input & "/app/bdCompat.zip", fetch("https://github.com/ArmCord/bdCompat/archive/refs/heads/main.zip")) + extractAll(input & "/app/bdCompat.zip", input & "/app/packages") + removeFile(input & "/app/bdCompat.zip") + else: + echo "Directory does not exist" \ No newline at end of file diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..0daea21 --- /dev/null +++ b/src/index.js @@ -0,0 +1,11 @@ +const pkg = require("./package.json"); +const Module = require("module"); +const path = require("path"); + +try { + const kernel = require(path.join(__dirname, "kernel.asar")); + if (kernel?.default) kernel.default({ startOriginal: true }); +} catch(e) { + console.error("Kernel failed to load: ", e.message); + Module._load(path.join(__dirname, "..", "app-original.asar"), null, true); +} diff --git a/src/package.json b/src/package.json new file mode 100644 index 0000000..3427d67 --- /dev/null +++ b/src/package.json @@ -0,0 +1,4 @@ +{ + "name": "kernel", + "main": "index.js" +}