76 Commits

Author SHA1 Message Date
oSumAtrIX
8f166d5125
Merge branch 'upstream'
# Conflicts:
#	brut.apktool/apktool-lib/src/main/java/brut/androlib/AaptInvoker.java
#	brut.apktool/apktool-lib/src/main/java/brut/androlib/ApkDecoder.java
#	brut.apktool/apktool-lib/src/main/java/brut/androlib/res/ResourcesDecoder.java
#	brut.apktool/apktool-lib/src/test/java/brut/androlib/decode/MissingDiv9PatchTest.java
#	brut.j.util/src/main/java/brut/util/BrutIO.java
#	brut.j.util/src/main/java/brut/util/OSDetection.java
#	build.gradle.kts
2024-12-17 03:43:46 +01:00
Igor Eisberg
542b66cbd0
refactor: ExtDataInput rework, source layout and formatting (#3738)
* refactor: ExtDataInput rework, source layout and formatting

Refactor ExtDataInput classes: ExtDataInput is now the extended interface,
ExtDataInputStream is an easy-to-use FilterInputStream implementing ExtDataInput
with static creator methods for big-endian and little-endian wrappers.

Refactor AaptManager class: unify aapt-related verifications to one class.

Replace Apache Commons' deprecated CountingInputStream with Google Guava's
equivalent with the same name. Apache's BoundedInputStream is an overkill
for our use case and its constructors are deprecated as well.

Normalize source layout to have a common and somewhat more standard order:
Static fields first, instance fields after, methods last.

Fix some formatting, like empty spaces or extra spaces and exception messages.

Renamed ResXmlPatcher to ResXmlUtils, as it has more purposes than just patching.

Renamed DirUtil to DirUtils, to match other utility classes naming convention.

Moved "properties/apktool.properties" to jar's root, to match smali/baksmali.

Moved Android Framework to "prebuilt", as it is just a prebuilt, looks out of
place among .class files.

@SuppressWarnings removed from Duo as there are quite a few unsafe assignments
of raw Duo[] instances to parameterized Duo<> variables in the project, this is
just Java being the primitive boilerplate it is, no point in fighting it.

No end-user changes.
Tested against a full ROM decompile/recompile, no issues found.

* small tweak

* last refinement

* missed a stream
2024-12-11 10:55:13 -05:00
Igor Eisberg
c2eab3101c
refactor: tweaks IO handling (#3723)
Use BrutIO where possible to improve and simplify stream handling.
Ensure streams are closed when no longer needed.

Some minor formatting tweaks and naming consistency.

No functionality changes.
2024-11-10 08:56:47 -05:00
Igor Eisberg
03a7c67082
clean up tab intendation (#3707) 2024-10-03 13:58:44 -04:00
Igor Eisberg
4de92a23ae
refactor: ApkDecoder & ApkBuilder overhaul (#3699)
* refactor: ApkDecoder & ApkBuilder overhaul

A major rewrite of ApkDecoder and ApkBuilder classes to make them managable.
Removed many instances of redundancy and improved syntaxed and indentation.

Modifying the stock Apktool source to our needs have become too difficult,
so I'm pushing the general (not specific to our needs) changes upstream.

I'd change a lot more, but I wanted to make sure all tests pass as expected,
despite some of them being wierd, outdated or unnecessary.

This also fixes certain files in META-INF being lost during recompile
when the -c/--copy-original option isn't used.

This has been tweaked and tested for several days and I vouch for its stablity.

* style: fix more redundancy

* style: fix more redundancy

* tweak: consistent case-sensitivity for cmd and options

* refactor: tracking unknownFiles via apkInfo is redundant

1) We take advantage of the fact that doNotCompress already tracks uncompressed files,
   including those separated into "unknown".
   With this change the "unknownFiles" is simply ignored, so it's backward-compatible
   with existing decoded APK dirs.
   Tweaked a few tests to match the removal of "unknownFiles".

2) Passing doNotCompress to AAPT is redundant, Apktool extracts the temp APK packed by
   AAPT to build/apk and then repackages it anyway, so it serves no purpose.

* refactor: fix minSdkVersion from baksmali + clean up more redundancy

* Regression: minSdkVersion inferred from baksmali was not stored properly.

* The arsc extension can be generalized for simplicity as seen in AOSP source.
https://cs.android.com/android/platform/superproject/main/+/main:external/deqp/scripts/android/build_apk.py;l=644?q=apk%20pack&ss=android%2Fplatform%2Fsuperproject%2Fmain:external%2F
  Note:
    NO_COMPRESS_EXT_PATTERN only collapses paths to a common extension.
    It does NOT force these extensions to be always uncompressed.
    doNotCompress is the one determining files/extensions that should be uncompressed.
  (no funcionality was changed)

* resourcesAreCompressed in apkInfo is redundant. It was only used in invokeAapt,
  but not ApkBuilder. Its value is also never set by Apktool, only read.
  Like with doNotCompress, passing any kind of compression rules to AAPT is pointless,
  since we don't use the temp APK packed by AAPT directly - it's extracted and repacked
  by ApkBuilder, where doNotCompress already determines whether resources.arsc should
  or should not be compressed in the final APK.
  (no funcionality was changed)

* style: optional args come after required args

* style: optional args come after required args

* style: sdkInfo as a normal field for consistency

* style: some formatting tweaks
2024-10-03 06:52:59 -04:00
oSumAtrIX
b0f3957320
Merge upstream 2024-02-14 00:18:03 +01:00
Connor Tumbleson
1b1c7f8f50
fix: tighten up detectPossibleDirectoryTraversal for Windows 2024-01-20 06:37:12 -05:00
Connor Tumbleson
ea391dcd79 fix: tighten up detectPossibleDirectoryTraversal for Windows 2024-01-18 21:35:00 -05:00
Connor Tumbleson
93e7d6bdbf
Prevent arbitrary file writes with malicious resource names. (#3484)
* refactor: rename sanitize function

* fix: expose getDir

* fix: safe handling of untrusted resource names

 - fixes: GHSA-2hqv-2xv4-5h5w

* test: sample file for GHSA-2hqv-2xv4-5h5w

* refactor: avoid detection of absolute files for resource check

* chore: enable info mode on gradle

* test: skip test on windows

* chore: debug windows handling

* fix: normalize entry with file separators

* fix: normalize filepath after cleansing

* chore: Android paths are not OS specific

* refactor: use java.nio for path traversal checking

* chore: align path separator on Windows for Zip files

* chore: rework towards basic directory traversal

* chore: remove '--info' on build.yml
2024-01-05 06:28:07 -05:00
Connor Tumbleson
d348c43b24
Prevent arbitrary file writes with malicious resource names. (#3484)
* refactor: rename sanitize function

* fix: expose getDir

* fix: safe handling of untrusted resource names

 - fixes: GHSA-2hqv-2xv4-5h5w

* test: sample file for GHSA-2hqv-2xv4-5h5w

* refactor: avoid detection of absolute files for resource check

* chore: enable info mode on gradle

* test: skip test on windows

* chore: debug windows handling

* fix: normalize entry with file separators

* fix: normalize filepath after cleansing

* chore: Android paths are not OS specific

* refactor: use java.nio for path traversal checking

* chore: align path separator on Windows for Zip files

* chore: rework towards basic directory traversal

* chore: remove '--info' on build.yml
2024-01-02 06:11:03 -05:00
oSumAtrIX
35e23a9ad7
Merge branch 'upstream'
# Conflicts:
#	brut.apktool/apktool-lib/build.gradle.kts
#	build.gradle.kts
2023-10-08 20:42:48 +02:00
Connor Tumbleson
93c66ef373
build: migrate towards "libs.versions.toml" (#3353) 2023-10-01 06:08:47 -04:00
oSumAtrIX
2c9e14c94b
fix: Make sure the property is not null 2023-08-19 17:08:51 +02:00
oSumAtrIX
72ffcbbc44
feat: decode 9patch files on Android 2023-08-11 00:56:49 +02:00
Connor Tumbleson
342ff67a4c
Migrate to Gradle Kotlin DSL (#3249)
* feat: initial migration to kotlin

* feat: initial migration to kotlin

* fix: wire up dependencies

* fix: Deprecated tag for kotlin detection

* refactor: put all modules into sub-projects

* fix: include jar file (android framework)

* fix: add version message/info

* fix: wire up version/gitrev to properties

* fix: wire up proguard on cli

* fix: wire up proguard

* fix: wire up output cleaning command

* fix: drop license header on gradle files

 - fully rewritten from scratch by myself
 - no longer including license header on build files

* fix: add compile utf8/flags for java8

* refactor: remove unneeded curly braces

* feat: progress towards maven-publish

* build: publish to maven

* docs: update documentation

* refactor: prevent implicit order by removal of afterEvaluate

* build: remove unused license plugin
2023-08-05 06:28:31 -04:00
Connor Tumbleson
7c2cb5b30a
Hardened String Block Parser (#3239)
* fix: add headerSize to stringBlock to detect larger headers

* fix: handle app with style offset, but 0 styles

* refactor: split counting stream into CountingDataInput

* fix: read strings till end of string pool chunk

* fix: support out of bound string reading

* fix: don't read string/style offset out of bounds

* refactor: cleanup comments for string parser

* style: comment on 4 byte alignment

* fix: only warn if utf16 string
2023-08-01 06:23:14 -04:00
Igor Eisberg
33ca2929c9
refactor: clean up style and redundancy (#3232)
* refactor: clean up redundancy

* refactor: no need for both setApkFile and setApkFileName
2023-07-29 18:56:27 -04:00
Igor Eisberg
79b2173b85
style: normalize command descs and redundancy (#3188) 2023-07-21 06:08:30 -04:00
Connor Tumbleson
bdbe1384bf
ARSC/AXML Parser Rework (#3131)
* Supports ASRC with null renamed package.
* Rework ASRC Chunk parser to a loop to break assumption of order of chunks
* Break out unknown skips for alignment to ResourceTypes.h
* Add verbose information for file skips
* Add test for protected apk sample
* Rework chunk parsing for StringBlock
* Refactor AXML Parser to support proper header reading
* Fix parsing if attribute size reported does not align to actual size
2023-07-12 05:33:28 -04:00
sv99
b83b58e8e8
Correct aapt/aapt2 waiting too long on execution output (#3071)
Co-authored-by: Connor Tumbleson <iBotPeaches@users.noreply.github.com>
2023-05-20 14:01:03 -04:00
sv99
48b71b34b1
refactor: Replace to nio & apply CS inspection skips (#3055) 2023-05-13 06:12:22 -04:00
Connor Tumbleson
67a936f1c7
build: include bleeding edge smali from source via jitpack (#2941)
* build: include smali from source

* refactor: adjust build.gradle for repositories
2022-11-24 06:15:41 -05:00
Goooler
94ed86db28 Code cleanups 2021-08-27 01:16:46 +08:00
Goooler
e25c3636ff Update docs & licenses to use https 2021-08-26 07:40:32 -04:00
Matteo Baccan
b3741409f5
Code smell reduction (#2554)
* Correct use of <> diamond operator

* Correct modifiers order

* Private constructor for utility class

* Correct use of diamond operator

* Corrected naming convention

* Correct modifier order

* Use not synchronized class

* Introduced try/resource in stream copy

* Removed unused private field

* Code reformat

Reformat of IOUtils.copy from to stream

* Add a space

Improved code formatting

* Code reformat

Only a new space

* Code reformat

Removed extra spaces
2021-04-14 06:31:32 -04:00
Connor Tumbleson
64eda064eb
fix: remove unused util methods/exceptions 2021-03-28 17:10:52 -04:00
Connor Tumbleson
8a23d0dbc1
refactor: correct spelling mistake of aapt 2021-03-28 10:54:31 -04:00
Connor Tumbleson
447ba50332
refactor: drop author tags and support javadocs 2021-03-07 15:06:45 -05:00
Connor Tumbleson
49a167540f fix: cut down length of zipslip exceptions 2020-12-11 07:10:05 -05:00
Connor Tumbleson
1452014992 fix: early return if no files + enhanced for loop 2020-12-03 06:35:47 -05:00
Giacomo Ferretti
4c3f1f335a refactor: 'compile' it's deprecated
`compile` it's deprecated since Gradle 6.0 and been discouraged since Gradle 3.4.

We should use `implementation` and `api` instead because `compile` will be removed in Gradle 7.0.

https://docs.gradle.org/6.5.1/userguide/upgrading_version_5.html#deprecations
2020-08-14 07:56:52 -04:00
Connor Tumbleson
44a2e87f81
refactor: support more random suffix to prevent multi-thread crash 2020-04-11 06:50:09 -04:00
Connor Tumbleson
d4b2314e26
Merge branch 'issue-2251' of https://github.com/chris-sharl/Apktool into chris-sharl-issue-2251 2020-04-11 06:43:54 -04:00
Connor Tumbleson
3f831c8221
refactor: copyright year should be year started, not current year 2020-04-11 06:33:05 -04:00
Frieder Bluemle
81ca785e02
Fix file header comment format 2020-02-29 17:37:46 -08:00
chris-sharl
5272ae24b3 fix issue-2251 2019-12-19 18:39:04 +08:00
Connor Tumbleson
c1f9afe33c fix: enhance bitness detection on windows 2019-11-19 06:45:07 -05:00
Connor Tumbleson
25a1cb02ef
fix: License 2019 update 2019-07-13 12:19:41 -04:00
Sebastian Rasmussen
b01dce7f3a Adapt AXMLResourceParser to handle broken headers.
Fixes #1976.
2019-01-08 21:20:50 +01:00
Connor Tumbleson
61848cfa06 fix: allow AaptManager to find new naming of aapt binaries 2019-01-04 11:24:49 -05:00
Connor Tumbleson
618de55bd3 fix: update AaptManager to handle flattened aapt structure 2018-12-18 17:37:04 -05:00
Connor Tumbleson
b7d33cb623 style: update license headers that are missing 2018 2018-08-23 16:14:24 -04:00
Connor Tumbleson
6231edfcfd fix: make sure we wait on executor for output
- fixes: #1809
 - thanks to sunshouxiang
2018-07-23 13:22:27 -04:00
Connor Tumbleson
3a33bfc48f fix: allow detection of aapt2 from old SDK builds 2018-04-19 17:09:44 -04:00
Connor Tumbleson
cabf1d5cad fix: prevent cluttering temp files, delete BRUT temp files on close 2018-04-06 11:12:09 -04:00
Connor Tumbleson
07afbdb52b fix: normalize path to fix building .apk on Windows
- fixes #1741
2018-04-05 16:24:58 -04:00
Connor Tumbleson
d2c808dd7d aapt2: refactor loading of aapt/aapt2 binaries
- change: die out if invalid aapt path is provided
2018-02-28 11:25:56 -05:00
Connor Tumbleson
367d33e314 aapt2: remove util outputting to console 2018-02-28 10:54:35 -05:00
Connor Tumbleson
bd0ce9aea3 aapt2: aapt1 is "aapt" 2018-02-22 11:41:31 -05:00
Connor Tumbleson
574de8db71 aapt2: new method to execAndReturn to collect stdout from a process 2018-02-22 11:22:40 -05:00