ApkCheckPack for APK Packing and Security Inspection
apk加固特征检查工具,汇总收集已知特征和手动收集大家提交的app加固特征,全网最全开源加固特征,支持40+厂商的加固检测,欢迎大家提交无法识别的app
At a glance
- What is it?
- ApkCheckPack is a Go command-line scanner for Android APK packing signatures, anti-environment checks, SDKs, certificates, and embedded packages. It offers a convenient embedded rule library, but the README explicitly warns that signature detection can miss unfamiliar products.
- Who is it for?
- Adopt ApkCheckPack for triage when a fixed, reproducible inventory of known APK packing and inspection signals is more useful than a full security assessment. Do not treat a match, or the absence of one, as proof that an application is safe.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Yes. The repository last received commits 143 days ago.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 7, 2026, and from our analysis. They are not legal advice.
Star history
- moyuwa/ApkCheckPack1,395 ★ · +9
| Repository | 2026-10-17 | 2026-11-07 |
|---|---|---|
| moyuwa/ApkCheckPack | 1.4k | 1.4k |
9 Stars in the last 21 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
ApkCheckPack's APK Inspection Scope
ApkCheckPack addresses a specific static-analysis problem: identifying telltale files and strings associated with Android APK protection products, then presenting several related security and packaging signals in one scan. Its primary audience is security engineers, reverse engineering practitioners, and teams triaging Android applications or collections of APKs. The project description says it supports detection for more than 40 vendors and accepts submissions for protections that it cannot identify.
The scanner covers more than commercial packing. According to the README, it checks ROOT, emulator, anti-debugging, and proxy-related environment checks. It also recognizes advertising, push messaging, and analytics SDKs, scans certificate files, and recursively handles embedded APK files such as those found in XAPK containers. Hardcoded information scanning is available but disabled by default through `-hardcode`.
This is an inventory tool, not a complete malware analysis platform or a vulnerability scanner. The repository does not describe source-code auditing, dynamic instrumentation, network traffic analysis, permission-risk scoring, or a database of known vulnerabilities. Those boundaries matter. An output that names a packer or SDK answers an identification question, while leaving broader application security unanswered.
The main workflow is suited to bulk triage because `-f` accepts either one APK path or a directory. Other checks are enabled by default, including `-root`, `-emu`, `-debug`, `-proxy`, `-sdk`, `-cert`, and `-r`. Operators can therefore disable categories through command-line flags when they need a narrower review, although the README does not document the syntax for turning an individual boolean flag off.
Embedded Rules and APK Inspection Flow
All detection rules are compiled into the executable, so a normal scan does not require an external signature database or configuration file. The repository separates its implementation under `pkg/`: `pack` handles packing detection, `anti` covers anti-environment checks, `sdk` identifies third-party SDKs, `hardcode` performs the optional secret-oriented scan, and `certificate` handles certificate inspection. The executable entry point is `cmd/apkcheckpack/main.go`.
The packing rules operate on several observable artifact types. `sopath` matches an absolute path associated with a characteristic shared object, while `soname` matches only a shared object's filename. `soregex` exists because some protection libraries carry versioned names and cannot be matched reliably with a fixed filename. `jclass` searches DEX content for strings associated with compiled Java class code. `other` covers characteristic files and strings that do not fit the named-library categories.
That mix is important. A protection scheme may be recognizable through a native library, an unusual archive path, or a class name, so filename inspection alone would miss cases. However, the README does not expose the matching algorithm, output format, rule-file schema, or details of individual patterns. It also does not claim that a detection provides a confidence score. Consumers should expect categorical findings based on compiled signatures rather than a documented probabilistic ranking system.
Recursive scanning expands the input model beyond a single APK. This is useful for XAPK and similar containers, but the documented behavior does not explain how overlapping matches, deeply nested packages, malformed archives, or duplicate findings are handled. Those cases should be checked against representative samples before the scanner becomes part of an automated intake pipeline.
Building ApkCheckPack and Running a First Scan
The repository declares Go 1.20 in `go.mod`. The README provides a Windows-oriented build command that produces `ApkCheckPack.exe` from the command package. This is the complete documented build route; no release download, installer, container image, or Linux build command is supplied.
go build -o ApkCheckPack.exe ./cmd/apkcheckpackRun that command from the repository root. A successful build should produce the executable named `ApkCheckPack.exe`, although the README does not show command output.
The basic scan accepts either an APK or a directory:
ApkCheckPack.exe -f test.apkReplace `test.apk` with the path of the application under inspection. The README does not specify the terminal layout of the result, so the safe expectation is that the tool emits findings for the enabled categories, not any particular table or JSON schema.
For a directory of samples, the documented command is:
ApkCheckPack.exe -f ./apksThis form is the natural starting point for triage. Because several checks default to enabled, the first scan includes anti-environment indicators, SDK recognition, certificate information, and recursive embedded-package handling. The default per-file ceiling is 500 MB through `-maxsize`.
Hardcoded information scanning must be requested explicitly:
ApkCheckPack.exe -f test.apk -hardcode trueThe `-hardcode` switch does not document the exact patterns or redaction behavior. Teams should inspect its output carefully before sharing reports because the purpose is to find potentially sensitive information.
A smaller size ceiling can be set as follows:
ApkCheckPack.exe -f test.apk -maxsize 100This example limits scanning to 100 MB per file. The documentation does not state what happens to a larger file, whether the limit is enforced before opening each APK, or whether matching in embedded APKs is governed by the same limit.
Rule Coverage Gaps in ApkCheckPack
The project itself states the most important limitation: new protection methods and vendors continue to appear, and its feature-based detection may miss them. A negative result therefore means only that the compiled signatures did not match. It does not establish that the APK is unpacked, benign, or free of anti-analysis behavior.
False positives are also possible whenever a signature is shared. The README explains what several rule types match, but it does not document whether names, class strings, and paths are unique enough to support precise attribution. Because there is no documented confidence model, reviewers should preserve the original APK and examine matching paths or strings when a result affects an important decision.
The embedded data model creates a release discipline issue. Rule updates require rebuilding or obtaining a newer executable. This has advantages, including operation without external configuration, but it also means that an old binary will continue using old signatures. The README reports packing rules updated on 2026-06-18 and third-party SDK rules updated on 2026-01-11. Consumers need to track those dates alongside the executable used for each case.
The repository is not archived, and its last push was on 2026-06-18. Recent releases include `20260618` with added rules, `20260111` with added packing signatures and code optimization, and `20250624` with packing signatures, anti-proxy detection, and certificate scanning. This activity indicates continuing rule maintenance, but it does not guarantee coverage for every vendor.
The README invites users to submit rules or provide unrecognized protected samples. That contribution route may improve coverage, yet it is not a formal compatibility-testing process. There is no documented schema review, false-positive rate, sample corpus size, or vendor-by-vendor validation matrix.
ApkCheckPack Versus Manual APK Artifact Inspection
The practical alternative is manual static inspection: unpack the APK, browse its archive paths, search native library names, and examine DEX strings with separate archive and search tools. That approach gives an analyst direct access to every artifact and makes it possible to investigate unusual names that are not in any maintained rule set. It can also reveal context around a matching string, which a signature-oriented report may omit.
Manual inspection scales poorly, however. An engineer must repeat similar path, class-name, and shared-library searches for each APK, remember multiple matching patterns, and separately check anti-environment artifacts, SDKs, certificates, and embedded packages. ApkCheckPack packages those operations and its accumulated vendor knowledge behind one command.
The trade-off is control. A generic archive and string search workflow can adapt immediately to a novel protection scheme. ApkCheckPack is more consistent for known signatures because its rules are compiled into the binary, but its findings are constrained by the included data. It is also less transparent from the current documentation: the README describes rule categories, not the complete rule set or matching output.
Neither approach should substitute for dynamic analysis when behavior matters. ApkCheckPack scans static APK characteristics, and the repository describes no runtime hooks or execution environment. A packing identification may guide a later dynamic review, but the tool's documented output cannot by itself describe what the application does at runtime.
Deployment, Licensing, and Rule Upgrade Costs
ApkCheckPack has a small deployment surface because it is a compiled Go executable and its rules are embedded. The documented build depends on Go 1.20 and the repository's `go.mod` and `go.sum` files. The README does not document cross-compilation, release binaries, container images, or automated release checks, so operators should not assume that Windows is the only supported target or that distribution is already solved.
Upgrading rules means obtaining code containing newer signatures and rebuilding the binary. The README gives no migration mechanism for reports generated by earlier releases. If findings are stored as evidence or used in case management, operators should record the executable and rule dates alongside each result. Otherwise, later reviewers may compare old and new outputs without knowing why the signature set changed.
The largest recurring cost is likely rule review rather than runtime configuration, but the repository does not provide cost measurements. Contributors may need to normalize unusual native-library names, add version-aware expressions, supply DEX class strings, or submit samples that expose gaps. Maintainers then need to decide whether a pattern is specific enough to prevent unrelated applications from matching.
The repository's license status is unknown, and the README does not state a license. No permission grant for copying, modifying, redistributing, or embedding the code can therefore be confirmed from the repository documentation. This is a concrete adoption blocker for organizations that require a known license before incorporating source code or distributing binaries. The `LICENSE` file and its terms need to be checked in the repository before use.
Editorial conclusion
Adopt ApkCheckPack for triage when a fixed, reproducible inventory of known APK packing and inspection signals is more useful than a full security assessment. Do not treat a match, or the absence of one, as proof that an application is safe. Before integrating it, verify Go 1.20 availability, the unknown licensing status, the intended `-maxsize` limit, and whether your samples use packing methods covered by the rule set.
Frequently asked questions
What is ApkCheckPack used for?
ApkCheckPack statically inspects Android APKs for known packing signatures, anti-environment checks, third-party SDKs, certificate files, embedded APKs, and optionally hardcoded information. Its focus is artifact identification and triage rather than complete vulnerability assessment.
How do I build and run ApkCheckPack?
The README documents building with Go 1.20 and running the resulting `ApkCheckPack.exe` with `-f` followed by an APK or directory. All detection rule data is compiled into the executable.
Can ApkCheckPack detect every Android APK packer?
No. The README explicitly warns that new packing methods and vendors may not be covered and says not to depend on the tool completely. An unmatched APK should not be treated as proof that no protection is present.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/moyuwa-apkcheckpack)Star history chart for your README
[](https://hysenlabs.com/projects/moyuwa-apkcheckpack)Was this useful?