Skip to content
This repository was archived by the owner on Dec 4, 2024. It is now read-only.

Commit 74744e1

Browse files
committed
加密动态密钥
1 parent 1615aa7 commit 74744e1

File tree

8 files changed

+44
-22
lines changed

8 files changed

+44
-22
lines changed

native/encryptor.c

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include "stdlib.h"
66
#include "core_en.h"
77

8-
void internal(unsigned char *chars, int start) {
8+
void internal(unsigned char *chars, int start, unsigned char *key) {
99
unsigned char first[4];
1010
for (int i = start; i < start + 4; i++) {
1111
first[i - start] = chars[i];
@@ -15,12 +15,19 @@ void internal(unsigned char *chars, int start) {
1515
second[i - start - 4] = chars[i];
1616
}
1717
uint32_t v[2] = {convert(first), convert(second)};
18-
// key: Y4Sec-Team-4ra1n
19-
// 59345365 632D5465 616D2D34 7261316E
18+
19+
unsigned char *key_part1 = key;
20+
unsigned char *key_part2 = key + 4;
21+
unsigned char *key_part3 = key + 8;
22+
unsigned char *key_part4 = key + 12;
23+
2024
uint32_t const k[4] = {
21-
(unsigned int) 0x65533459, (unsigned int) 0x65542d63,
22-
(unsigned int) 0X342d6d61, (unsigned int) 0x6e316172,
25+
(unsigned int) convert(key_part1),
26+
(unsigned int) convert(key_part2),
27+
(unsigned int) convert(key_part3),
28+
(unsigned int) convert(key_part4),
2329
};
30+
2431
tea_encrypt(v, k);
2532
unsigned char first_arr[4];
2633
unsigned char second_arr[4];
@@ -46,7 +53,7 @@ void internal(unsigned char *chars, int start) {
4653
// 1. asm encrypt
4754
// 2. tea encrypt: {[10:14],[14:18]} {[18:22],[22:26]} {[26:30],[30:34]}
4855
JNIEXPORT jbyteArray JNICALL Java_org_y4sec_encryptor_core_CodeEncryptor_encrypt
49-
(JNIEnv *env, jclass cls, jbyteArray text, jint length) {
56+
(JNIEnv *env, jclass cls, jbyteArray text, jint length, jbyteArray key) {
5057
jbyte *data = (*env)->GetByteArrayElements(env, text, NULL);
5158
unsigned char *chars = (unsigned char *) malloc(length);
5259
memcpy(chars, data, length);
@@ -58,14 +65,21 @@ JNIEXPORT jbyteArray JNICALL Java_org_y4sec_encryptor_core_CodeEncryptor_encrypt
5865
EN_LOG("ERROR: BYTE CODE TOO SHORT");
5966
return text;
6067
}
68+
69+
jbyte *j_tea_key = (*env)->GetByteArrayElements(env, key, NULL);
70+
unsigned char *tea_key = (unsigned char *) malloc(17);
71+
memcpy(tea_key, j_tea_key, 16);
72+
tea_key[17] = '\00';
73+
printf("KEY: %s\n", tea_key);
74+
6175
// {[10:14],[14:18]}
62-
internal(chars, 10);
76+
internal(chars, 10, tea_key);
6377
EN_LOG("TEA ENCRYPT #1");
6478
// {[18:22],[22:26]}
65-
internal(chars, 18);
79+
internal(chars, 18, tea_key);
6680
EN_LOG("TEA ENCRYPT #2");
6781
// {[26:30],[30:34]}
68-
internal(chars, 26);
82+
internal(chars, 26, tea_key);
6983
EN_LOG("TEA ENCRYPT #3");
7084
(*env)->SetByteArrayRegion(env, text, 0, length, (jbyte *) chars);
7185
return text;

native/encryptor.h

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/java/org/y4sec/encryptor/cli/PatchCommand.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,32 +17,40 @@ class PatchCommand implements Command, Constants {
1717
private static final Logger logger = LogManager.getLogger();
1818
@Parameter(names = "--jar", description = "JAR File Path", required = true)
1919
String jarPath;
20+
21+
@Parameter(names = "--key", description = "KEY", required = true)
22+
String key;
2023
@Parameter(names = "--package", description = "Encrypt Package Name", required = true)
2124
String packageName;
2225

2326
public void execute() {
24-
logger.info("patch jar: {}",jarPath);
27+
logger.info("patch jar: {}", jarPath);
2528
Path path = Paths.get(jarPath);
2629

2730
if (!OSUtil.isArch64()) {
2831
System.out.println("ONLY SUPPORT ARCH 64");
2932
return;
3033
}
3134

35+
if (key.length() != 16) {
36+
System.out.println("KEY LENGTH MUST BE 16");
37+
return;
38+
}
39+
3240
Path libPath;
3341
Path tmp = Paths.get(TempDir);
34-
if (OSUtil.isWin()){
35-
JNIUtil.extractDllSo(EncryptorDLL,null,false);
42+
if (OSUtil.isWin()) {
43+
JNIUtil.extractDllSo(EncryptorDLL, null, false);
3644
libPath = tmp.resolve(EncryptorDLL);
37-
}else{
38-
JNIUtil.extractDllSo(EncryptorSO,null,false);
45+
} else {
46+
JNIUtil.extractDllSo(EncryptorSO, null, false);
3947
libPath = tmp.resolve(EncryptorSO);
4048
}
41-
if(packageName == null || packageName.isEmpty()){
49+
if (packageName == null || packageName.isEmpty()) {
4250
logger.error("need package name");
4351
return;
4452
}
4553

46-
PatchHelper.patchJar(path,libPath,packageName);
54+
PatchHelper.patchJar(path, libPath, packageName, key.getBytes());
4755
}
4856
}

src/main/java/org/y4sec/encryptor/core/CodeEncryptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,5 @@ public class CodeEncryptor {
1010
* @param text ByteCode
1111
* @return Encrypted BytesCode
1212
*/
13-
public native static byte[] encrypt(byte[] text, int length);
13+
public native static byte[] encrypt(byte[] text, int length, byte[] key);
1414
}

src/main/java/org/y4sec/encryptor/core/PatchHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class PatchHelper implements Constants {
1818
private static final Logger logger = LogManager.getLogger();
1919

2020
@SuppressWarnings("unchecked")
21-
public static void patchJar(Path jarPath, Path libPath, String packageName) {
21+
public static void patchJar(Path jarPath, Path libPath, String packageName,byte[] key) {
2222
logger.info("start patch jar");
2323

2424
JNIUtil.loadLib(libPath.toAbsolutePath().toString());
@@ -53,7 +53,7 @@ public static void patchJar(Path jarPath, Path libPath, String packageName) {
5353
if (name.startsWith(packageName)) {
5454
if (name.toLowerCase().endsWith(ClassFile)) {
5555
try {
56-
bytes = CodeEncryptor.encrypt(bytes, bytes.length);
56+
bytes = CodeEncryptor.encrypt(bytes, bytes.length,key);
5757
} catch (Exception e) {
5858
logger.error("encrypt error: {}", e.toString());
5959
return;

src/main/java/org/y4sec/encryptor/gui/MainForm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public MainForm() {
7878
new Thread(() -> {
7979
JNIUtil.extractDllSo(EncryptorDLL, null, true);
8080
Path libPath = Paths.get(TempDir).resolve(EncryptorDLL);
81-
PatchHelper.patchJar(Paths.get(jar), libPath, packageName);
81+
PatchHelper.patchJar(Paths.get(jar), libPath, packageName,new byte[]{});
8282
}).start();
8383
});
8484

src/main/resources/decrypter.dll

0 Bytes
Binary file not shown.

src/main/resources/encryptor.dll

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)