From cf6a08dc7f1837a1a2fa86d6cff9f6bb167ab6db Mon Sep 17 00:00:00 2001 From: Antkites Date: Thu, 25 Jul 2024 13:25:19 +0800 Subject: [PATCH] v1.0.0 --- .github/workflows/release.yml | 39 ++ .gitignore | 203 +++++++++ .goreleaser.yaml | 38 ++ .idea/.gitignore | 8 + .idea/JavaSceneConfigState.xml | 6 + .idea/KillWxapkg.iml | 11 + .idea/inspectionProfiles/Project_Default.xml | 5 + .idea/misc.xml | 41 ++ .idea/modules.xml | 8 + .idea/vcs.xml | 6 + .idea/watcherTasks.xml | 8 + README.md | 100 +++++ cmd/root.go | 59 +++ go.mod | 19 + go.sum | 22 + images/img.png | Bin 0 -> 24813 bytes images/img1.png | Bin 0 -> 32966 bytes images/img2.png | Bin 0 -> 45008 bytes images/img3.png | Bin 0 -> 43179 bytes internal/cmd/cmd.go | 146 +++++++ internal/config/delete.go | 73 ++++ internal/config/share.go | 79 ++++ internal/decrypt/decrypt.go | 73 ++++ internal/restore/javascript.go | 32 ++ internal/restore/restore.go | 45 ++ internal/restore/wxss.go | 19 + internal/unpack/fileMagicNumbers.go | 94 +++++ internal/unpack/formatter/formatter.go | 38 ++ internal/unpack/formatter/htmlformatter.go | 69 +++ internal/unpack/formatter/jsformatter.go | 35 ++ internal/unpack/formatter/jsonformatter.go | 26 ++ internal/unpack/uconfig.go | 419 +++++++++++++++++++ internal/unpack/ujs.go | 237 +++++++++++ internal/unpack/unpack.go | 221 ++++++++++ internal/unpack/uxml.go | 1 + internal/unpack/uxss.go | 381 +++++++++++++++++ main.go | 52 +++ utils/humanReadableSize.go | 17 + utils/transformCSS.go | 168 ++++++++ 39 files changed, 2798 insertions(+) create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 .goreleaser.yaml create mode 100644 .idea/.gitignore create mode 100644 .idea/JavaSceneConfigState.xml create mode 100644 .idea/KillWxapkg.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/watcherTasks.xml create mode 100644 README.md create mode 100644 cmd/root.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 images/img.png create mode 100644 images/img1.png create mode 100644 images/img2.png create mode 100644 images/img3.png create mode 100644 internal/cmd/cmd.go create mode 100644 internal/config/delete.go create mode 100644 internal/config/share.go create mode 100644 internal/decrypt/decrypt.go create mode 100644 internal/restore/javascript.go create mode 100644 internal/restore/restore.go create mode 100644 internal/restore/wxss.go create mode 100644 internal/unpack/fileMagicNumbers.go create mode 100644 internal/unpack/formatter/formatter.go create mode 100644 internal/unpack/formatter/htmlformatter.go create mode 100644 internal/unpack/formatter/jsformatter.go create mode 100644 internal/unpack/formatter/jsonformatter.go create mode 100644 internal/unpack/uconfig.go create mode 100644 internal/unpack/ujs.go create mode 100644 internal/unpack/unpack.go create mode 100644 internal/unpack/uxml.go create mode 100644 internal/unpack/uxss.go create mode 100644 main.go create mode 100644 utils/humanReadableSize.go create mode 100644 utils/transformCSS.go diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..e18639a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,39 @@ +name: Go Release + +on: + push: + # 创建 tag 时 + tags: + - 'v*' + +permissions: + contents: write + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + # 检出代码 + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install upx + run: sudo apt-get install -y upx + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: 'stable' + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v6 + with: + # either 'goreleaser' (default) or 'goreleaser-pro' + distribution: goreleaser + # 'latest', 'nightly', or a semver + version: 'latest' + args: release --clean + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7ed0965 --- /dev/null +++ b/.gitignore @@ -0,0 +1,203 @@ +### GoLand+all template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Go template +# If you prefer the allow list template instead of the deny list, see community template: +# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore +# +# Binaries for programs and plugins +*.exe +*.exe~ +*.dll +*.so +*.dylib + +# Test binary, built with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out +out/* + +# Dependency directories (remove the comment below to include it) +# vendor/ + +# Go workspace file +go.work + +### GoLand template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff + +# AWS User-specific + +# Generated files + +# Sensitive or high-churn files + +# Gradle + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake + +# Mongo Explorer plugin + +# File-based project format + +# IntelliJ + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Cursive Clojure plugin + +# SonarLint plugin + +# Crashlytics plugin (for Android Studio and IntelliJ) + +# Editor-based Rest Client + +# Android studio 3.1+ serialized cache file + +### GoLand+iml template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff + +# AWS User-specific + +# Generated files + +# Sensitive or high-churn files + +# Gradle + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake + +# Mongo Explorer plugin + +# File-based project format + +# IntelliJ + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Cursive Clojure plugin + +# SonarLint plugin + +# Crashlytics plugin (for Android Studio and IntelliJ) + +# Editor-based Rest Client + +# Android studio 3.1+ serialized cache file + + +dist/ diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..4585796 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,38 @@ +# This is an example .goreleaser.yml file with some sensible defaults. +# Make sure to check the documentation at https://goreleaser.com + +# The lines below are called `modelines`. See `:help modeline` +# Feel free to remove those if you don't want/need to use them. +# yaml-language-server: $schema=https://goreleaser.com/static/schema.json +# vim: set ts=2 sw=2 tw=0 fo=cnqoj + +version: 2 + +before: + hooks: + # You may remove this if you don't use go modules. + - go mod tidy + +upx: + - enabled: true + compress: best + lzma: true + +builds: + - env: + - CGO_ENABLED=0 + goos: + - windows + +archives: + - format: binary + +changelog: + sort: asc + filters: + exclude: + - "^docs:" + - "^test:" + +checksum: + algorithm: md5 \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..35410ca --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/JavaSceneConfigState.xml b/.idea/JavaSceneConfigState.xml new file mode 100644 index 0000000..68a9d6e --- /dev/null +++ b/.idea/JavaSceneConfigState.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/KillWxapkg.iml b/.idea/KillWxapkg.iml new file mode 100644 index 0000000..16dc49f --- /dev/null +++ b/.idea/KillWxapkg.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..8d66637 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ec50427 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,41 @@ + + + + + + + + + DOM 问题JavaScript 和 TypeScript + + + Go + + + HTTP 客户端 + + + JavaScript 和 TypeScript + + + SQL + + + 代码样式问题Go + + + 可能的 bugGo + + + 常规JavaScript 和 TypeScript + + + + + 用户定义 + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..5592cc7 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml new file mode 100644 index 0000000..cb1a783 --- /dev/null +++ b/.idea/watcherTasks.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5d22455 --- /dev/null +++ b/README.md @@ -0,0 +1,100 @@ +# KillWxapkg + +> 存Golang实现,一个用于自动化反编译微信小程序的工具,小程序安全利器,自动解密,解包,可最大程度还原工程目录 + +[![stable](https://img.shields.io/badge/stable-stable-green.svg)](https://github.com/Ackites/KillWxapkg) +[![license](https://img.shields.io/github/license/Ackites/KillWxapkg)]() +[![download](https://img.shields.io/github/downloads/Ackites/KillWxapkg/total)]() +[![release](https://img.shields.io/github/v/release/Ackites/KillWxapkg)]() +[![commit](https://img.shields.io/github/last-commit/Ackites/KillWxapkg)]() +[![issues](https://img.shields.io/github/issues/Ackites/KillWxapkg)]() +[![pull](https://img.shields.io/github/issues-pr/Ackites/KillWxapkg)]() +[![fork](https://img.shields.io/github/forks/Ackites/KillWxapkg)]() +[![star](https://img.shields.io/github/stars/Ackites/KillWxapkg)]() +[![go](https://img.shields.io/github/go-mod/go-version/Ackites/KillWxapkg)]() +[![size](https://img.shields.io/github/repo-size/Ackites/KillWxapkg)]() +[![contributors](https://img.shields.io/github/contributors/Ackites/KillWxapkg)]() +------------------ +## 介绍 + +- [x] 小程序自动解密 +- [x] 小程序自动解包,支持代码美化输出 + - [x] Json美化 + - [x] JavaScript美化 + - [x] Html美化 +- [x] 支持还原源代码工程目录结构 + - [x] Json配置文件还原 + - [x] JavaScript代码还原 + - [ ] Wxml代码还原 + - [ ] Wxss代码还原 +- [ ] 转换 Uni-app 项目 +- [ ] 敏感数据导出 + +### 工程结构还原 + +#### 未还原 + + +#### 还原后 + + +## 安装 + +- 下载最新版本的[release](https://github.com/Ackites/KillWxapkg/releases)包 +- 自行编译 + ```shell + # 克隆项目 + git clone https://github.com/Ackites/KillWxapkg.git + + # 进入项目目录 + cd ./KillWxapkg + + # 下载依赖 + go mod tidy + + # 编译 + go build + ``` + +## 用法 + +> 使用方法: program -id= -in=<输入文件1,输入文件2> 或 -in=<输入目录> -out=<输出目录> +> [-restore] [-pretty] [-ext=<文件后缀>] + +### 参数说明 +- `-id string` + - 微信小程序的AppID + - 包已解密,可不指定 + - 例:-id=wx7627e1630485288d +- `-in string` + - 输入文件路径(多个文件用逗号分隔)或输入目录路径 + - 自动检测,已解密的包,自动解包,未解密的包,自动解密后解包 + - 解密后的包会保存到输入目录下以AppID命名的文件夹 + - 例:-in=app.wxpkg,app1.wxapkg + - 例:-in=C:\Users\mi\Desktop\Applet\64 +- `-out string` + - 输出目录路径(如果未指定,则默认保存到输入目录下以AppID命名的文件夹) +- `-restore` + - 是否还原源代码工程目录结构,默认不还原 +- `-pretty` + - 是否美化输出,默认不美化,美化需较长时间 +- `-ext string` + - 处理的文件后缀 (default ".wxapkg") + - 例:-ext=.wxapkg +- `-help` + - 显示帮助信息 + +### 获取微信小程序AppID + + + +#### 文件夹名即为AppID + + + +进入文件夹下,即可找到.wxapkg文件 + + +## Star History + +[![Star History Chart](https://api.star-history.com/svg?repos=Ackites/KillWxapkg&type=Date)](https://star-history.com/#Ackites/KillWxapkg&Date) \ No newline at end of file diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..b4b7954 --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,59 @@ +package cmd + +import ( + "flag" + "fmt" + "log" + "sync" + + . "github.com/Ackites/KillWxapkg/internal/cmd" + . "github.com/Ackites/KillWxapkg/internal/config" + "github.com/Ackites/KillWxapkg/internal/restore" +) + +func Execute(appID, input, outputDir, fileExt string, restoreDir bool, pretty bool) { + if appID == "" || input == "" { + fmt.Println("使用方法: program -id= -in=<输入文件1,输入文件2> 或 -in=<输入目录> -out=<输出目录> [-ext=<文件后缀>] [-restore]") + flag.PrintDefaults() + return + } + + // 存储配置 + configManager := NewSharedConfigManager() + configManager.Set("appID", appID) + configManager.Set("input", input) + configManager.Set("outputDir", outputDir) + configManager.Set("fileExt", fileExt) + configManager.Set("restoreDir", restoreDir) + configManager.Set("pretty", pretty) + + inputFiles := ParseInput(input, fileExt) + + if len(inputFiles) == 0 { + log.Println("未找到任何文件") + return + } + + // 确定输出目录 + if outputDir == "" { + outputDir = DetermineOutputDir(input, appID) + } + + var wg sync.WaitGroup + for _, inputFile := range inputFiles { + wg.Add(1) + go func(file string) { + defer wg.Done() + err := ProcessFile(file, outputDir, appID) + if err != nil { + log.Printf("处理文件 %s 时出错: %v\n", file, err) + } else { + log.Printf("成功处理文件: %s\n", file) + } + }(inputFile) + } + wg.Wait() + + // 还原工程目录结构 + restore.ProjectStructure(outputDir, restoreDir) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b7e2479 --- /dev/null +++ b/go.mod @@ -0,0 +1,19 @@ +module github.com/Ackites/KillWxapkg + +go 1.22 + +require ( + github.com/ditashi/jsbeautifier-go v0.0.0-20141206144643-2520a8026a9c + github.com/dop251/goja v0.0.0-20240707163329-b1681fb2a2f5 + github.com/gorilla/css v1.0.1 + github.com/yosssi/gohtml v0.0.0-20201013000340-ee4748c638f4 + golang.org/x/crypto v0.25.0 + golang.org/x/net v0.21.0 +) + +require ( + github.com/dlclark/regexp2 v1.7.0 // indirect + github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect + github.com/google/pprof v0.0.0-20230207041349-798e818bf904 // indirect + golang.org/x/text v0.16.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..e649aef --- /dev/null +++ b/go.sum @@ -0,0 +1,22 @@ +github.com/ditashi/jsbeautifier-go v0.0.0-20141206144643-2520a8026a9c h1:+Zo5Ca9GH0RoeVZQKzFJcTLoAixx5s5Gq3pTIS+n354= +github.com/ditashi/jsbeautifier-go v0.0.0-20141206144643-2520a8026a9c/go.mod h1:HJGU9ULdREjOcVGZVPB5s6zYmHi1RxzT71l2wQyLmnE= +github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= +github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dop251/goja v0.0.0-20240707163329-b1681fb2a2f5 h1:ZRqTaoW9WZ2DqeOQGhK9q73eCb47SEs30GV2IRHT9bo= +github.com/dop251/goja v0.0.0-20240707163329-b1681fb2a2f5/go.mod h1:o31y53rb/qiIAONF7w3FHJZRqqP3fzHUr1HqanthByw= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/google/pprof v0.0.0-20230207041349-798e818bf904 h1:4/hN5RUoecvl+RmJRE2YxKWtnnQls6rQjjW5oV7qg2U= +github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg= +github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= +github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= +github.com/yosssi/gohtml v0.0.0-20201013000340-ee4748c638f4 h1:0sw0nJM544SpsihWx1bkXdYLQDlzRflMgFJQ4Yih9ts= +github.com/yosssi/gohtml v0.0.0-20201013000340-ee4748c638f4/go.mod h1:+ccdNT0xMY1dtc5XBxumbYfOUhmduiGudqaDgD2rVRE= +golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= +golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/images/img.png b/images/img.png new file mode 100644 index 0000000000000000000000000000000000000000..b306530ebc8c4e3df945fef85331190e9c92d4d3 GIT binary patch literal 24813 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

pE4 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 BY8e0k literal 0 HcmV?d00001 diff --git a/images/img2.png b/images/img2.png new file mode 100644 index 0000000000000000000000000000000000000000..4150c19193ebbce614bf23ab2b353ffedd138c35 GIT binary patch literal 45008 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¨MiP%~ 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 literal 0 HcmV?d00001 diff --git a/images/img3.png b/images/img3.png new file mode 100644 index 0000000000000000000000000000000000000000..2386258feeae561b1c7e10baacb5ed41c8d50e41 GIT binary patch literal 43179 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⩓0rndH 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 P&EMBCx>tGkQTTrV=i#lb literal 0 HcmV?d00001 diff --git a/internal/cmd/cmd.go b/internal/cmd/cmd.go new file mode 100644 index 0000000..8ae6671 --- /dev/null +++ b/internal/cmd/cmd.go @@ -0,0 +1,146 @@ +package cmd + +import ( + "fmt" + "io" + "log" + "os" + "path/filepath" + "strings" + + "github.com/Ackites/KillWxapkg/internal/decrypt" + "github.com/Ackites/KillWxapkg/internal/unpack" +) + +// ParseInput 解析输入文件 +func ParseInput(input, fileExt string) []string { + var inputFiles []string + if fileInfo, err := os.Stat(input); err == nil && fileInfo.IsDir() { + files, err := os.ReadDir(input) + if err != nil { + log.Fatalf("读取输入目录失败: %v", err) + } + for _, file := range files { + if !file.IsDir() && strings.HasSuffix(file.Name(), fileExt) { + inputFiles = append(inputFiles, filepath.Join(input, file.Name())) + } + } + } else { + inputFiles = strings.Split(input, ",") + } + + // 过滤掉不存在的文件 + var validFiles []string + for _, file := range inputFiles { + if _, err := os.Stat(file); err == nil { + validFiles = append(validFiles, file) + } + } + return validFiles +} + +// DetermineOutputDir 确定输出目录 +func DetermineOutputDir(input, appID string) string { + var baseDir string + if fileInfo, err := os.Stat(input); err == nil && fileInfo.IsDir() { + baseDir = input + } else { + baseDir = filepath.Dir(input) + } + return filepath.Join(baseDir, appID) +} + +// ProcessFile 合并目录 +func ProcessFile(inputFile, outputDir, appID string) error { + log.Printf("开始处理文件: %s\n", inputFile) + + // 确定解密后的文件路径 + decryptedFilePath := filepath.Join(outputDir, filepath.Base(inputFile)) + + // 解密 + decryptedData, err := decrypt.DecryptWxapkg(inputFile, appID) + if err != nil { + return fmt.Errorf("解密失败: %v", err) + } + + // 保存解密后的文件 + err = os.MkdirAll(outputDir, 0755) + if err != nil { + return fmt.Errorf("创建输出目录失败: %v", err) + } + + err = os.WriteFile(decryptedFilePath, decryptedData, 0755) + if err != nil { + return fmt.Errorf("保存解密文件失败: %v", err) + } + + log.Printf("文件解密并保存到: %s\n", decryptedFilePath) + + // 解包到临时目录 + tempDir, err := os.MkdirTemp("", "wxapkg") + if err != nil { + return fmt.Errorf("创建临时目录失败: %v", err) + } + defer func(path string) { + err := os.RemoveAll(path) + if err != nil { + log.Printf("删除临时目录 %s 失败: %v\n", path, err) + } + }(tempDir) + + err = unpack.UnpackWxapkg(decryptedData, tempDir) + if err != nil { + return fmt.Errorf("解包失败: %v", err) + } + + // 合并解包后的内容到输出目录 + err = mergeDirs(tempDir, outputDir) + if err != nil { + return fmt.Errorf("合并目录失败: %v", err) + } + + return nil +} + +// mergeDirs 合并目录 +func mergeDirs(srcDir, dstDir string) error { + return filepath.Walk(srcDir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + relPath, err := filepath.Rel(srcDir, path) + if err != nil { + return err + } + targetPath := filepath.Join(dstDir, relPath) + + if info.IsDir() { + return os.MkdirAll(targetPath, 0755) + } + + srcFile, err := os.Open(path) + if err != nil { + return err + } + defer func(srcFile *os.File) { + err := srcFile.Close() + if err != nil { + log.Printf("关闭文件 %s 失败: %v\n", srcFile.Name(), err) + } + }(srcFile) + + dstFile, err := os.Create(targetPath) + if err != nil { + return err + } + defer func(dstFile *os.File) { + err := dstFile.Close() + if err != nil { + log.Printf("关闭文件 %s 失败: %v\n", dstFile.Name(), err) + } + }(dstFile) + + _, err = io.Copy(dstFile, srcFile) + return err + }) +} diff --git a/internal/config/delete.go b/internal/config/delete.go new file mode 100644 index 0000000..0fe0e7f --- /dev/null +++ b/internal/config/delete.go @@ -0,0 +1,73 @@ +package config + +import ( + "context" + "log" + "os" + "sync" +) + +// FileDeletionManager 用于管理需要删除的文件列表 +type FileDeletionManager struct { + mu sync.Mutex + files map[string]bool + cancelFn context.CancelFunc + ctx context.Context +} + +var deleteInstance *FileDeletionManager +var deleteOnce sync.Once + +// NewFileDeletionManager 创建或获取一个单例的FileDeletionManager +func NewFileDeletionManager() *FileDeletionManager { + deleteOnce.Do(func() { + c := context.Background() + ctx, cancel := context.WithCancel(c) + deleteInstance = &FileDeletionManager{ + files: make(map[string]bool), + cancelFn: cancel, + ctx: ctx, + } + }) + return deleteInstance +} + +// AddFile 添加文件路径到删除列表 +func (f *FileDeletionManager) AddFile(filePath string) { + f.mu.Lock() + defer f.mu.Unlock() + f.files[filePath] = true +} + +// DeleteFiles 删除所有在列表中的文件 +func (f *FileDeletionManager) DeleteFiles() { + f.mu.Lock() + files := make([]string, 0, len(f.files)) + for file := range f.files { + files = append(files, file) + } + f.mu.Unlock() + + for _, file := range files { + select { + case <-f.ctx.Done(): + log.Println("文件删除操作已取消") + return + default: + err := os.Remove(file) + if err != nil { + log.Printf("删除文件 %s 失败: %v\n", file, err) + } else { + f.mu.Lock() + delete(f.files, file) // 删除成功后从列表中移除文件 + f.mu.Unlock() + log.Printf("文件 %s 已成功删除", file) + } + } + } +} + +// Cancel 取消删除操作 +func (f *FileDeletionManager) Cancel() { + f.cancelFn() +} diff --git a/internal/config/share.go b/internal/config/share.go new file mode 100644 index 0000000..e654c10 --- /dev/null +++ b/internal/config/share.go @@ -0,0 +1,79 @@ +package config + +import ( + "sync" +) + +// SharedConfigManager 用于管理共享配置 +type SharedConfigManager struct { + mu sync.RWMutex + settings map[string]interface{} +} + +var shareInstance *SharedConfigManager +var shareOnce sync.Once + +// NewSharedConfigManager 创建一个新的SharedConfigManager +func NewSharedConfigManager() *SharedConfigManager { + shareOnce.Do(func() { + shareInstance = &SharedConfigManager{ + settings: make(map[string]interface{}), + } + }) + return shareInstance +} + +// Set 设置一个配置项的值 +func (scm *SharedConfigManager) Set(key string, value interface{}) { + scm.mu.Lock() + defer scm.mu.Unlock() + scm.settings[key] = value +} + +// SetBulk 批量设置配置项的值 +func (scm *SharedConfigManager) SetBulk(configs map[string]interface{}) { + scm.mu.Lock() + defer scm.mu.Unlock() + for key, value := range configs { + scm.settings[key] = value + } +} + +// Get 获取一个配置项的值 +func (scm *SharedConfigManager) Get(key string) (interface{}, bool) { + scm.mu.RLock() + defer scm.mu.RUnlock() + value, exists := scm.settings[key] + return value, exists +} + +// GetBulk 批量获取配置项的值 +func (scm *SharedConfigManager) GetBulk(keys []string) map[string]interface{} { + scm.mu.RLock() + defer scm.mu.RUnlock() + results := make(map[string]interface{}) + for _, key := range keys { + if value, exists := scm.settings[key]; exists { + results[key] = value + } + } + return results +} + +// Delete 删除一个配置项 +func (scm *SharedConfigManager) Delete(key string) { + scm.mu.Lock() + defer scm.mu.Unlock() + delete(scm.settings, key) +} + +// GetAll 返回所有配置项的副本 +func (scm *SharedConfigManager) GetAll() map[string]interface{} { + scm.mu.RLock() + defer scm.mu.RUnlock() + c := make(map[string]interface{}) + for key, value := range scm.settings { + c[key] = value + } + return c +} diff --git a/internal/decrypt/decrypt.go b/internal/decrypt/decrypt.go new file mode 100644 index 0000000..c476271 --- /dev/null +++ b/internal/decrypt/decrypt.go @@ -0,0 +1,73 @@ +package decrypt + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/sha1" + "encoding/binary" + "fmt" + "os" + + "golang.org/x/crypto/pbkdf2" +) + +const ( + saltStr = "saltiest" + ivStr = "the iv: 16 bytes" + fileHeader = "V1MMWX" + defaultXorKey = 0x66 +) + +func DecryptWxapkg(inputFile, appID string) ([]byte, error) { + ciphertext, err := os.ReadFile(inputFile) + if err != nil { + return nil, fmt.Errorf("读取文件失败: %v", err) + } + + // 先检查是否已解密 + reader := bytes.NewReader(ciphertext) + var firstMark byte + binary.Read(reader, binary.BigEndian, &firstMark) + var info1, indexInfoLength, bodyInfoLength uint32 + binary.Read(reader, binary.BigEndian, &info1) + binary.Read(reader, binary.BigEndian, &indexInfoLength) + binary.Read(reader, binary.BigEndian, &bodyInfoLength) + var lastMark byte + binary.Read(reader, binary.BigEndian, &lastMark) + if firstMark == 0xBE && lastMark == 0xED { + // 已解密直接返回 + return ciphertext, nil + } + + if string(ciphertext[:len(fileHeader)]) != fileHeader { + return nil, fmt.Errorf("无效的文件格式") + } + + key := pbkdf2.Key([]byte(appID), []byte(saltStr), 1000, 32, sha1.New) + + block, err := aes.NewCipher(key) + if err != nil { + return nil, fmt.Errorf("创建AES密码块失败: %v", err) + } + + iv := []byte(ivStr) + mode := cipher.NewCBCDecrypter(block, iv) + originData := make([]byte, 1024) + mode.CryptBlocks(originData, ciphertext[6:1024+6]) + + afData := make([]byte, len(ciphertext)-1024-6) + var xorKey byte + if len(appID) >= 2 { + xorKey = appID[len(appID)-2] + } else { + xorKey = defaultXorKey + } + for i, b := range ciphertext[1024+6:] { + afData[i] = b ^ xorKey + } + + originData = append(originData[:1023], afData...) + + return originData, nil +} diff --git a/internal/restore/javascript.go b/internal/restore/javascript.go new file mode 100644 index 0000000..5aa286c --- /dev/null +++ b/internal/restore/javascript.go @@ -0,0 +1,32 @@ +package restore + +import ( + "encoding/json" + "fmt" + "os" + + "github.com/Ackites/KillWxapkg/internal/unpack" +) + +// ProcessJavaScriptFiles 分割JavaScript文件 +func ProcessJavaScriptFiles(configFile, outputDir string) error { + content, err := os.ReadFile(configFile) + if err != nil { + return fmt.Errorf("读取配置文件失败: %v", err) + } + + var config struct { + SubPackages []unpack.SubPackage `json:"subPackages"` + } + err = json.Unmarshal(content, &config) + if err != nil { + return fmt.Errorf("解析配置文件失败: %v", err) + } + + err = unpack.ProcessJavaScriptFiles(outputDir, config) + if err != nil { + return fmt.Errorf("处理JavaScript文件失败: %v", err) + } + + return nil +} diff --git a/internal/restore/restore.go b/internal/restore/restore.go new file mode 100644 index 0000000..613cab3 --- /dev/null +++ b/internal/restore/restore.go @@ -0,0 +1,45 @@ +package restore + +import ( + "log" + "path/filepath" + + "github.com/Ackites/KillWxapkg/internal/config" + "github.com/Ackites/KillWxapkg/internal/unpack" +) + +// ProjectStructure 是否还原工程目录结构 +func ProjectStructure(outputDir string, restoreDir bool) { + if !restoreDir { + return + } + + // 创建文件删除管理器 + manager := config.NewFileDeletionManager() + + // 配置文件还原 + configFile := filepath.Join(outputDir, "app-config.json") + err := unpack.ProcessConfigFiles(configFile) + if err != nil { + log.Printf("还原工程目录结构失败: %v\n", err) + } else { + manager.AddFile(configFile) + } + + // JavaScript文件还原 + err = ProcessJavaScriptFiles(configFile, outputDir) + if err != nil { + log.Printf("处理JavaScript文件失败: %v\n", err) + } + + // WXSS文件还原 + //var config unpack.AppConfig + //content, err := os.ReadFile(configFile) + //if err == nil { + // _ = json.Unmarshal(content, &config) + //} + //ProcessWxssFiles(outputDir, config) + + // 执行删除文件操作 + manager.DeleteFiles() +} diff --git a/internal/restore/wxss.go b/internal/restore/wxss.go new file mode 100644 index 0000000..d267b74 --- /dev/null +++ b/internal/restore/wxss.go @@ -0,0 +1,19 @@ +package restore + +import ( + "path/filepath" + + "github.com/Ackites/KillWxapkg/internal/unpack" +) + +// ProcessWxssFiles 分割 WXSS 文件 +func ProcessWxssFiles(outputDir string, config unpack.AppConfig) { + // 处理主包的 WXSS 文件 + unpack.ProcessXssFiles(outputDir, "") + + // 处理子包的 WXSS 文件 + for _, subPackage := range config.SubPackages { + subPackageDir := filepath.Join(outputDir, subPackage.Root) + unpack.ProcessXssFiles(subPackageDir, outputDir) + } +} diff --git a/internal/unpack/fileMagicNumbers.go b/internal/unpack/fileMagicNumbers.go new file mode 100644 index 0000000..5b77ccc --- /dev/null +++ b/internal/unpack/fileMagicNumbers.go @@ -0,0 +1,94 @@ +package unpack + +// FileMagicNumbers 文件类型及其对应的魔数(文件头标识) +var FileMagicNumbers = map[string][]byte{ + // 图像文件 + ".png": {0x89, 'P', 'N', 'G', '\r', '\n', 0x1A, '\n'}, + ".jpg": {0xFF, 0xD8, 0xFF}, + ".jpeg": {0xFF, 0xD8, 0xFF}, + ".gif": {'G', 'I', 'F', '8'}, + ".bmp": {'B', 'M'}, + ".webp": {'R', 'I', 'F', 'F'}, + ".tiff": {0x49, 0x49, 0x2A, 0x00}, + ".cr2": {0x49, 0x49, 0x2A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x43, 0x52}, + ".ico": {0x00, 0x00, 0x01, 0x00}, + ".heic": {'f', 't', 'y', 'p', 'h', 'e', 'i', 'c'}, + + // 文档文件 + ".pdf": {'%', 'P', 'D', 'F', '-'}, + ".doc": {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1}, + ".docx": {'P', 'K', 0x03, 0x04}, + ".xls": {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1}, + ".xlsx": {'P', 'K', 0x03, 0x04}, + ".ppt": {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1}, + ".pptx": {'P', 'K', 0x03, 0x04}, + ".odt": {'P', 'K', 0x03, 0x04}, + ".ods": {'P', 'K', 0x03, 0x04}, + ".odp": {'P', 'K', 0x03, 0x04}, + ".rtf": {'{', '\\', 'r', 't', 'f', '1'}, + ".epub": {'P', 'K', 0x03, 0x04}, + ".mobi": {'M', 'O', 'B', 'I'}, + + // 压缩文件 + ".zip": {'P', 'K', 0x03, 0x04}, + ".rar": {'R', 'a', 'r', '!', 0x1A, 0x07, 0x00}, + ".7z": {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}, + ".gz": {0x1F, 0x8B, 0x08}, + ".tar": {'u', 's', 't', 'a', 'r'}, + ".bz2": {'B', 'Z', 'h'}, + ".xz": {0xFD, '7', 'z', 'X', 'Z', 0x00}, + + // 音频文件 + ".mp3": {0xFF, 0xFB}, + ".wav": {'R', 'I', 'F', 'F'}, + ".ogg": {'O', 'g', 'g', 'S'}, + ".flac": {'f', 'L', 'a', 'C'}, + ".aac": {0xFF, 0xF1}, + ".m4a": {'f', 't', 'y', 'p', 'M', '4', 'A', ' '}, + ".mid": {'M', 'T', 'h', 'd'}, + ".aiff": {'F', 'O', 'R', 'M'}, + + // 视频文件 + ".mp4": {0x00, 0x00, 0x00, 0x18, 'f', 't', 'y', 'p'}, + ".avi": {'R', 'I', 'F', 'F'}, + ".mkv": {0x1A, 0x45, 0xDF, 0xA3}, + ".flv": {'F', 'L', 'V'}, + ".mov": {'f', 't', 'y', 'p', 'q', 't', ' ', ' '}, + ".webm": {0x1A, 0x45, 0xDF, 0xA3}, + ".mpg": {0x00, 0x00, 0x01, 0xBA}, + ".wmv": {0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11}, + + // 可执行文件和库文件 + ".exe": {'M', 'Z'}, + ".elf": {0x7F, 'E', 'L', 'F'}, + ".so": {0x7F, 'E', 'L', 'F'}, + ".dll": {'M', 'Z'}, + ".app": {0xCA, 0xFE, 0xBA, 0xBE}, // Mach-O 文件格式 (macOS) + + // 脚本和标记语言文件 + ".json": {'{'}, // 假设 JSON 文件以 { 开头 + ".xml": {'<', '?', 'x', 'm', 'l'}, + ".html": {'<', '!', 'D', 'O', 'C', 'T', 'Y', 'P', 'E'}, + + // 字体文件 + ".ttf": {0x00, 0x01, 0x00, 0x00, 0x00}, + ".otf": {'O', 'T', 'T', 'O'}, + ".woff": {'w', 'O', 'F', 'F'}, + ".woff2": {'w', 'O', 'F', '2'}, + + // 数据库文件 + ".sqlite": {'S', 'Q', 'L', 'i', 't', 'e', ' ', 'f', 'o', 'r', 'm', 'a', 't', ' ', '3', 0x00}, + ".db": {0x00, 0x06, 0x15, 0x61, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00}, + + // 其他 + ".swf": {'F', 'W', 'S'}, + ".class": {0xCA, 0xFE, 0xBA, 0xBE}, + ".psd": {'8', 'B', 'P', 'S'}, + ".torrent": {'d', '8', ':', 'a', 'n', 'n', 'o', 'u', 'n', 'c', 'e'}, + ".blend": {'B', 'L', 'E', 'N', 'D', 'E', 'R'}, + ".pcap": {0xD4, 0xC3, 0xB2, 0xA1}, + ".dwg": {0x41, 0x43, 0x31, 0x30}, + ".iso": {0x43, 0x44, 0x30, 0x30, 0x31}, + ".vsd": {0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1}, + ".mdb": {0x00, 0x01, 0x00, 0x00, 0x53, 0x74, 0x61, 0x6E, 0x64, 0x61, 0x72, 0x64, 0x20, 0x4A, 0x65, 0x74}, +} diff --git a/internal/unpack/formatter/formatter.go b/internal/unpack/formatter/formatter.go new file mode 100644 index 0000000..5a623a4 --- /dev/null +++ b/internal/unpack/formatter/formatter.go @@ -0,0 +1,38 @@ +package formatter + +import ( + "fmt" + "strings" + + . "github.com/Ackites/KillWxapkg/internal/config" +) + +// Formatter 是一个文件格式化器接口 +type Formatter interface { + Format([]byte) ([]byte, error) +} + +// 注册所有格式化器 +var formatters = map[string]Formatter{} + +// RegisterFormatter 注册文件扩展名对应的格式化器 +func RegisterFormatter(ext string, formatter Formatter) { + formatters[strings.ToLower(ext)] = formatter +} + +// GetFormatter 返回文件扩展名对应的格式化器 +func GetFormatter(ext string) (Formatter, error) { + formatter, exists := formatters[strings.ToLower(ext)] + if !exists { + return nil, fmt.Errorf("不支持的文件类型: %s", ext) + } + configManager := NewSharedConfigManager() + if pretty, ok := configManager.Get("pretty"); ok { + if p, o := pretty.(bool); o { + if !p && ext == ".js" { + return nil, fmt.Errorf("不进行美化输出") + } + } + } + return formatter, nil +} diff --git a/internal/unpack/formatter/htmlformatter.go b/internal/unpack/formatter/htmlformatter.go new file mode 100644 index 0000000..3aee7f8 --- /dev/null +++ b/internal/unpack/formatter/htmlformatter.go @@ -0,0 +1,69 @@ +package formatter + +import ( + "bytes" + "regexp" + "strings" + + "github.com/yosssi/gohtml" +) + +// HTMLFormatter 结构体,用于格式化 HTML 代码 +type HTMLFormatter struct { + jsFormatter *JSFormatter +} + +// 正则表达式用于匹配 HTML 中的 `) + +// NewHTMLFormatter 创建一个新的 HTMLFormatter 实例 +func NewHTMLFormatter() *HTMLFormatter { + return &HTMLFormatter{ + jsFormatter: NewJSFormatter(), + } +} + +// Format 方法用于格式化 HTML 代码 +// input: 原始的 HTML 代码字节切片 +// 返回值: 格式化后的 HTML 代码字节切片和错误信息(如果有) +func (f *HTMLFormatter) Format(input []byte) ([]byte, error) { + // 使用 gohtml 库格式化 HTML 代码 + data := gohtml.FormatBytes(bytes.TrimSpace(input)) + + // 替换