Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
f0fbd921
Commit
f0fbd921
authored
Mar 17, 2022
by
vvb2060
Committed by
John Wu
Apr 08, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove test key
parent
c4f37c55
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
13 additions
and
71 deletions
+13
-71
HideAPK.kt
app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt
+4
-3
Keygen.kt
app/src/main/java/com/topjohnwu/magisk/core/utils/Keygen.kt
+9
-68
No files found.
app/src/main/java/com/topjohnwu/magisk/core/tasks/HideAPK.kt
View file @
f0fbd921
...
@@ -82,7 +82,7 @@ object HideAPK {
...
@@ -82,7 +82,7 @@ object HideAPK {
// Write apk changes
// Write apk changes
jar
.
getOutputStream
(
je
).
use
{
it
.
write
(
xml
.
bytes
)
}
jar
.
getOutputStream
(
je
).
use
{
it
.
write
(
xml
.
bytes
)
}
val
keys
=
Keygen
(
context
)
val
keys
=
Keygen
()
SignApk
.
sign
(
keys
.
cert
,
keys
.
key
,
jar
,
out
)
SignApk
.
sign
(
keys
.
cert
,
keys
.
key
,
jar
,
out
)
return
true
return
true
}
}
...
@@ -104,6 +104,7 @@ object HideAPK {
...
@@ -104,6 +104,7 @@ object HideAPK {
activity
.
finish
()
activity
.
finish
()
}
}
@Suppress
(
"BlockingMethodInNonBlockingContext"
)
private
suspend
fun
patchAndHide
(
activity
:
Activity
,
label
:
String
,
onFailure
:
Runnable
):
Boolean
{
private
suspend
fun
patchAndHide
(
activity
:
Activity
,
label
:
String
,
onFailure
:
Runnable
):
Boolean
{
val
stub
=
File
(
activity
.
cacheDir
,
"stub.apk"
)
val
stub
=
File
(
activity
.
cacheDir
,
"stub.apk"
)
try
{
try
{
...
@@ -130,7 +131,7 @@ object HideAPK {
...
@@ -130,7 +131,7 @@ object HideAPK {
}
}
val
cmd
=
"adb_pm_install $repack ${activity.applicationInfo.uid}"
val
cmd
=
"adb_pm_install $repack ${activity.applicationInfo.uid}"
if
(
Shell
.
su
(
cmd
).
exec
().
isSuccess
)
return
true
if
(
Shell
.
cmd
(
cmd
).
exec
().
isSuccess
)
return
true
try
{
try
{
session
.
install
(
activity
,
repack
)
session
.
install
(
activity
,
repack
)
...
@@ -178,7 +179,7 @@ object HideAPK {
...
@@ -178,7 +179,7 @@ object HideAPK {
dialog
.
dismiss
()
dialog
.
dismiss
()
}
}
val
cmd
=
"adb_pm_install $apk ${activity.applicationInfo.uid}"
val
cmd
=
"adb_pm_install $apk ${activity.applicationInfo.uid}"
if
(
Shell
.
su
(
cmd
).
await
().
isSuccess
)
return
if
(
Shell
.
cmd
(
cmd
).
await
().
isSuccess
)
return
val
success
=
withContext
(
Dispatchers
.
IO
)
{
val
success
=
withContext
(
Dispatchers
.
IO
)
{
try
{
try
{
session
.
install
(
activity
,
apk
)
session
.
install
(
activity
,
apk
)
...
...
app/src/main/java/com/topjohnwu/magisk/core/utils/Keygen.kt
View file @
f0fbd921
package
com.topjohnwu.magisk.core.utils
package
com.topjohnwu.magisk.core.utils
import
android.content.Context
import
android.content.pm.PackageManager
import
android.util.Base64
import
android.util.Base64
import
android.util.Base64OutputStream
import
android.util.Base64OutputStream
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.signing.CryptoUtils.readCertificate
import
com.topjohnwu.magisk.signing.CryptoUtils.readPrivateKey
import
com.topjohnwu.magisk.signing.KeyData
import
org.bouncycastle.asn1.x500.X500Name
import
org.bouncycastle.asn1.x500.X500Name
import
org.bouncycastle.cert.jcajce.JcaX509CertificateConverter
import
org.bouncycastle.cert.jcajce.JcaX509CertificateConverter
import
org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder
import
org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder
import
org.bouncycastle.operator.jcajce.JcaContentSignerBuilder
import
org.bouncycastle.operator.jcajce.JcaContentSignerBuilder
import
java.io.ByteArrayInputStream
import
java.io.ByteArrayOutputStream
import
java.io.ByteArrayOutputStream
import
java.math.BigInteger
import
java.math.BigInteger
import
java.security.KeyPairGenerator
import
java.security.KeyPairGenerator
import
java.security.KeyStore
import
java.security.KeyStore
import
java.security.MessageDigest
import
java.security.PrivateKey
import
java.security.PrivateKey
import
java.security.cert.X509Certificate
import
java.security.cert.X509Certificate
import
java.util.*
import
java.util.*
...
@@ -29,13 +22,11 @@ private interface CertKeyProvider {
...
@@ -29,13 +22,11 @@ private interface CertKeyProvider {
val
key
:
PrivateKey
val
key
:
PrivateKey
}
}
@Suppress
(
"DEPRECATION"
)
class
Keygen
:
CertKeyProvider
{
class
Keygen
(
context
:
Context
)
:
CertKeyProvider
{
companion
object
{
companion
object
{
private
const
val
ALIAS
=
"magisk"
private
const
val
ALIAS
=
"magisk"
private
val
PASSWORD
get
()
=
"magisk"
.
toCharArray
()
private
val
PASSWORD
get
()
=
"magisk"
.
toCharArray
()
private
const
val
TESTKEY_CERT
=
"61ed377e85d386a8dfee6b864bd85b0bfaa5af81"
private
const
val
DNAME
=
"C=US,ST=California,L=Mountain View,O=Google Inc.,OU=Android,CN=Android"
private
const
val
DNAME
=
"C=US,ST=California,L=Mountain View,O=Google Inc.,OU=Android,CN=Android"
private
const
val
BASE64_FLAG
=
Base64
.
NO_PADDING
or
Base64
.
NO_WRAP
private
const
val
BASE64_FLAG
=
Base64
.
NO_PADDING
or
Base64
.
NO_WRAP
}
}
...
@@ -43,49 +34,9 @@ class Keygen(context: Context) : CertKeyProvider {
...
@@ -43,49 +34,9 @@ class Keygen(context: Context) : CertKeyProvider {
private
val
start
=
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
MONTH
,
-
3
)
}
private
val
start
=
Calendar
.
getInstance
().
apply
{
add
(
Calendar
.
MONTH
,
-
3
)
}
private
val
end
=
(
start
.
clone
()
as
Calendar
).
apply
{
add
(
Calendar
.
YEAR
,
30
)
}
private
val
end
=
(
start
.
clone
()
as
Calendar
).
apply
{
add
(
Calendar
.
YEAR
,
30
)
}
override
val
cert
get
()
=
provider
.
cert
private
val
ks
=
init
()
override
val
key
get
()
=
provider
.
key
override
val
cert
=
ks
.
getCertificate
(
ALIAS
)
as
X509Certificate
override
val
key
=
ks
.
getKey
(
ALIAS
,
PASSWORD
)
as
PrivateKey
private
val
provider
:
CertKeyProvider
inner
class
KeyStoreProvider
:
CertKeyProvider
{
private
val
ks
by
lazy
{
init
()
}
override
val
cert
by
lazy
{
ks
.
getCertificate
(
ALIAS
)
as
X509Certificate
}
override
val
key
by
lazy
{
ks
.
getKey
(
ALIAS
,
PASSWORD
)
as
PrivateKey
}
}
class
TestProvider
:
CertKeyProvider
{
override
val
cert
by
lazy
{
readCertificate
(
ByteArrayInputStream
(
KeyData
.
testCert
()))
}
override
val
key
by
lazy
{
readPrivateKey
(
ByteArrayInputStream
(
KeyData
.
testKey
()))
}
}
init
{
val
pm
=
context
.
packageManager
val
info
=
pm
.
getPackageInfo
(
context
.
packageName
,
PackageManager
.
GET_SIGNATURES
)
val
sig
=
info
.
signatures
[
0
]
val
digest
=
MessageDigest
.
getInstance
(
"SHA1"
)
val
chksum
=
digest
.
digest
(
sig
.
toByteArray
())
val
sb
=
StringBuilder
()
for
(
b
in
chksum
)
{
sb
.
append
(
"%02x"
.
format
(
0
xFF
and
b
.
toInt
()))
}
provider
=
if
(
sb
.
toString
()
==
TESTKEY_CERT
)
{
// The app was signed by the test key, continue to use it (legacy mode)
TestProvider
()
}
else
{
KeyStoreProvider
()
}
}
private
fun
init
():
KeyStore
{
private
fun
init
():
KeyStore
{
val
raw
=
Config
.
keyStoreRaw
val
raw
=
Config
.
keyStoreRaw
...
@@ -93,12 +44,8 @@ class Keygen(context: Context) : CertKeyProvider {
...
@@ -93,12 +44,8 @@ class Keygen(context: Context) : CertKeyProvider {
if
(
raw
.
isEmpty
())
{
if
(
raw
.
isEmpty
())
{
ks
.
load
(
null
)
ks
.
load
(
null
)
}
else
{
}
else
{
GZIPInputStream
(
Base64
.
decode
(
raw
,
GZIPInputStream
(
Base64
.
decode
(
raw
,
BASE64_FLAG
).
inputStream
()).
use
{
BASE64_FLAG
ks
.
load
(
it
,
PASSWORD
)
).
inputStream
()).
use
{
ks
.
load
(
it
,
PASSWORD
)
}
}
}
}
...
@@ -115,16 +62,10 @@ class Keygen(context: Context) : CertKeyProvider {
...
@@ -115,16 +62,10 @@ class Keygen(context: Context) : CertKeyProvider {
val
cert
=
JcaX509CertificateConverter
().
getCertificate
(
builder
.
build
(
signer
))
val
cert
=
JcaX509CertificateConverter
().
getCertificate
(
builder
.
build
(
signer
))
// Store them into keystore
// Store them into keystore
ks
.
setKeyEntry
(
ks
.
setKeyEntry
(
ALIAS
,
kp
.
private
,
PASSWORD
,
arrayOf
(
cert
))
ALIAS
,
kp
.
private
,
PASSWORD
,
arrayOf
(
cert
))
val
bytes
=
ByteArrayOutputStream
()
val
bytes
=
ByteArrayOutputStream
()
GZIPOutputStream
(
Base64OutputStream
(
bytes
,
GZIPOutputStream
(
Base64OutputStream
(
bytes
,
BASE64_FLAG
)).
use
{
BASE64_FLAG
ks
.
store
(
it
,
PASSWORD
)
)).
use
{
ks
.
store
(
it
,
PASSWORD
)
}
}
Config
.
keyStoreRaw
=
bytes
.
toString
(
"UTF-8"
)
Config
.
keyStoreRaw
=
bytes
.
toString
(
"UTF-8"
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment