From 85eec17ee655b3fa8e4949b141f042f837a778af Mon Sep 17 00:00:00 2001
From: Yutousama <583819556@qq.com>
Date: Fri, 29 May 2020 17:31:53 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AF=B9=E5=A3=B3=E6=89=80?=
=?UTF-8?q?=E6=9C=89=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=8A=A0=E5=AF=86=E7=9A=84?=
=?UTF-8?q?=E6=93=8D=E4=BD=9C=EF=BC=88=E8=BF=98=E6=B2=A1=E5=81=9AUI?=
=?UTF-8?q?=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ad_config.cfg | 67 ++++++++--
config.cfg | 3 +-
src/com/qy/utils/AESTools.java | 37 ++----
src/com/qy/utils/AutoPackageSDK.java | 103 +++++++++------
src/com/qy/utils/AutoPackageSDKMust.java | 161 +++++++++++++++++++++++
src/com/qy/utils/Tools.java | 8 ++
6 files changed, 306 insertions(+), 73 deletions(-)
create mode 100644 src/com/qy/utils/AutoPackageSDKMust.java
diff --git a/ad_config.cfg b/ad_config.cfg
index 7e97a95..87783db 100644
--- a/ad_config.cfg
+++ b/ad_config.cfg
@@ -133,7 +133,11 @@
"class": [
"com.qy.sdk.views.MyActivity",
"com.qy.sdk_rx.listeners.QyReceiver",
- "com.qy.sdk.TMProvider"
+ "com.qy.sdk.TMProvider",
+ "com.qy.sdk.rds.BannerView",
+ "com.qy.sdk.rds.NativeUnifiedsView",
+ "com.qy.sdk.rds.RewardView",
+ "com.qy.sdk.rds.SplashView"
],
"random": [
"com",
@@ -143,7 +147,11 @@
"rename": {
"MyActivity": "{>+}Activity",
"QyReceiver": "{>+}Receiver",
- "TMProvider": "TProvider"
+ "BannerView": "{>+}BView",
+ "NativeUnifiedsView": "{>+}NUView",
+ "RewardView": "{>+}RView",
+ "SplashView": "{>+}OpenView"
+
},
"isAllPackage": true,
"regexPackage":".qy",
@@ -204,8 +212,8 @@
],
"random":[
"com",
- "prujwk",
- "jdyphn",
+ "nusqu",
+ "gzxem"
],
"isAllPackage":false,
"isReName":true,
@@ -223,17 +231,17 @@
},{
"class":"com.bytedance.embedapplog.util.TTEncryptUtils",
"find":"const-string v0, \"tobEmbedEncrypt\"",
- "data":"const-string v0, \"tob\"\n",
+ "data":"const-string v0, \"ttb\"\n",
"end":"invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V"
},{
"class":"com.pgl.sys.ces.a",
"find":"const-string v0, \"nms\"",
- "data":"const-string v0, \"hms\"\n",
+ "data":"const-string v0, \"ees\"\n",
"end":"invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V"
},{
"class":"com.pgl.sys.ces.b",
"find":"const-string p1, \"nms\"",
- "data":"const-string p1, \"hms\"\n",
+ "data":"const-string p1, \"ees\"\n",
"end":"invoke-static {p0, p1}, Lcom/pgl/a/b/e;->a(Landroid/content/Context;Ljava/lang/String;)Z"
}
],
@@ -269,6 +277,49 @@
"com.androidx"
]
- }
+ },
+ {
+ "title": "百青藤",
+ "ltName": "bsb",
+ "manifest": [
+ "",
+ " "
+ ],
+ "class": [
+ "com.baidu.mobads.AppActivity",
+ "com.baidu.mobads.production.rewardvideo.MobRewardVideoActivity",
+ "com.baidu.mobads.AppActivityImp"
+ ],
+ "random": [
+ "com",
+ "nusqu",
+ "gzxem",
+ "bsb"
+ ],
+ "rename": {
+ "AppActivity": "MyActivity",
+ "MobRewardVideoActivity":"MyRewardVideoActivity",
+ "AppActivityImp":"MyActivityImp"
+ },
+ "isAllPackage": false,
+ "isReName": true,
+ "isJarLib": false,
+ "packagerlimit": 3,
+ "isManual": true,
+ "dex2jar": "D:\\反编译\\dex2jar-2.0\\_d2j-dex2jar.bat",
+ "manual": [
+ {
+ "class":"com.baidu.mobads.utils.r",
+ "find":"const-string v1, \".bd.provider\"",
+ "data":"const-string v1, \".fileprovider\"\n",
+ "end":"invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;"
+ },{
+ "class":"com.baidu.mobads.utils.r",
+ "find":"invoke-static {p0, v0, p1}, Lcom/baidu/mobads/openad/BdFileProvider;->getUriForFile(Landroid/content/Context;Ljava/lang/String;Ljava/io/File;)Landroid/net/Uri;",
+ "data":"invoke-static {p0, v0, p1}, Landroid/support/v4/content/FileProvider;->getUriForFile(Landroid/content/Context;Ljava/lang/String;Ljava/io/File;)Landroid/net/Uri;\n",
+ "end":":try_end_0"
+ }
+ ]
+ },
]
}
\ No newline at end of file
diff --git a/config.cfg b/config.cfg
index 84d35b2..0cf3182 100755
--- a/config.cfg
+++ b/config.cfg
@@ -40,5 +40,6 @@
}
]
}
- }
+ },
+ "sdkPath":"D:\\AndroidStudio_Data\\ADSDK_v5"
}
\ No newline at end of file
diff --git a/src/com/qy/utils/AESTools.java b/src/com/qy/utils/AESTools.java
index 14f4bc0..c23e59c 100755
--- a/src/com/qy/utils/AESTools.java
+++ b/src/com/qy/utils/AESTools.java
@@ -20,7 +20,7 @@ public class AESTools {
/**
- * ֽתΪд16ַ
+ * 字节数组转化为大写16进制字符串
*
* @param b
* @return
@@ -40,7 +40,7 @@ public class AESTools {
}
/**
- * 16ַתֽ
+ * 16进制字符串转字节数组
*
* @param s
* @return
@@ -59,12 +59,12 @@ public class AESTools {
/**
- * AES
+ * AES 加密
*
* @param content
- *
+ * 明文
* @param password
- * ԿĹؼ
+ * 生成秘钥的关键字
* @return
*/
@@ -76,22 +76,9 @@ public class AESTools {
cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
byte[] encryptedData = cipher.doFinal(content.getBytes(bm));
- // return Base64.encode(encryptedData);
- return byte2HexStr(encryptedData);
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- } catch (InvalidAlgorithmParameterException e) {
- // TODO Auto-generated catch block
+ // return Base64.encode(encryptedData);
+ return byte2HexStr(encryptedData);
+ } catch (Exception e) {
e.printStackTrace();
}
@@ -99,19 +86,19 @@ public class AESTools {
}
/**
- * AES
+ * AES 解密
*
* @param content
- *
+ * 密文
* @param password
- * ԿĹؼ
+ * 生成秘钥的关键字
* @return
*/
public static String aesDecrypt(String content, String password) {
try {
// byte[] byteMi = Base64.decode(content);
- byte[] byteMi= str2ByteArray(content);
+ byte[] byteMi= str2ByteArray(content);
IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes());
SecretKeySpec key = new SecretKeySpec(password.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
diff --git a/src/com/qy/utils/AutoPackageSDK.java b/src/com/qy/utils/AutoPackageSDK.java
index e30f211..ae49436 100644
--- a/src/com/qy/utils/AutoPackageSDK.java
+++ b/src/com/qy/utils/AutoPackageSDK.java
@@ -6,6 +6,7 @@ import org.json.JSONObject;
import sun.applet.Main;
import java.io.*;
+import java.nio.charset.StandardCharsets;
import java.util.Objects;
import java.util.Timer;
import java.util.TimerTask;
@@ -16,6 +17,10 @@ public class AutoPackageSDK {
private String packageName;
File gdtsdk, uniplaysdk, qysdk;
+ private AutoPackageSDK() {
+
+ }
+
public AutoPackageSDK(SmaliApkToolsPath inter, String version, String packageName) {
this.version = version;
this.packageName = packageName;
@@ -79,18 +84,19 @@ public class AutoPackageSDK {
@Override
public void smaliPath(String path) {
System.out.println("打包完成:" + path);
- delete(gdtPath,gdtsdk);
- delete(unplayPath,uniplaysdk);
- delete(qysdkPath,qysdk);
+ delete(gdtPath, gdtsdk);
+ delete(unplayPath, uniplaysdk);
+ delete(qysdkPath, qysdk);
outAssetsADS(path);
copy();
- File sdk=zip();
+ File sdk = zip();
System.out.println("制作SDK完成:");
- inter.smaliPath(sdk==null?"sdk打包失败":sdk.getAbsolutePath());
+ inter.smaliPath(sdk == null ? "sdk打包失败" : sdk.getAbsolutePath());
}
- private void delete(File path,File sdk){
+
+ private void delete(File path, File sdk) {
for (File file : path.listFiles()) {
- if(!file.getName().equals(sdk.getName())){
+ if (!file.getName().equals(sdk.getName())) {
file.delete();
}
}
@@ -176,50 +182,56 @@ public class AutoPackageSDK {
str.append(tmp.replace("{packagename}", packageName)).append("\n");
}
reader.close();
- FileWriter writer = new FileWriter(manifest);
- writer.write(str.toString());
- writer.flush();
- writer.close();
+ byte[] uft8bom = {(byte) 0xef, (byte) 0xbb, (byte) 0xbf};
+ OutputStream os = new FileOutputStream(manifest);
+
+ OutputStreamWriter outputStream = new OutputStreamWriter(os, StandardCharsets.UTF_8);
+ outputStream.write(new String(str.toString().getBytes(), StandardCharsets.UTF_8));
+ outputStream.flush();
+ outputStream.close();
+ os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
+
private File zip(File file) throws Exception {
String cd = "cd " + new File("packageSDK").getAbsolutePath();
File sdk = new File("packageSDK" + File.separator + "sdk.aar");
- File files=new File("packageSDK");
- String aapt=new File("aapt.exe").exists()?new File("aapt.exe").getAbsolutePath():"aapt";
+ File files = new File("packageSDK");
+ String aapt = new File("aapt.exe").exists() ? new File("aapt.exe").getAbsolutePath() : "aapt";
for (File listFile : file.listFiles()) {
- if(listFile.isDirectory()){
+ if (listFile.isDirectory()) {
zip(listFile);
- }else if(!listFile.getName().equals("sdk.aar")){
- String path=listFile.getAbsolutePath().replace(files.getAbsolutePath(),"");
- String exec=aapt+" r "+sdk.getAbsolutePath()+" "+path.substring(1)+"\n";
- Runtime.getRuntime().exec("cmd /c "+cd+" && "+exec);
+ } else if (!listFile.getName().equals("sdk.aar")) {
+ String path = listFile.getAbsolutePath().replace(files.getAbsolutePath(), "");
+ String exec = aapt + " r " + sdk.getAbsolutePath() + " " + path.substring(1) + "\n";
+ Runtime.getRuntime().exec("cmd /c " + cd + " && " + exec);
Thread.sleep(100);
- exec =aapt+ " a " + sdk.getAbsolutePath() + " " + path.substring(1) + "\n";
- Runtime.getRuntime().exec("cmd /c "+cd+" && "+exec);
+ exec = aapt + " a " + sdk.getAbsolutePath() + " " + path.substring(1) + "\n";
+ Runtime.getRuntime().exec("cmd /c " + cd + " && " + exec);
Thread.sleep(100);
}
}
return sdk;
}
+
private File zip() {
- File sdk=null;
+ File sdk = null;
try {
Tools.copyFile(new File("input" + File.separator + "Documents" + File.separator + "sdk.aar").getAbsolutePath(),
new File("packageSDK").getAbsolutePath(), true);
String cd = "cd " + new File("packageSDK").getAbsolutePath() + "\n\r";
- Process process=Runtime.getRuntime().exec(new String[]{"cmd"});
- OutputStream stream =process.getOutputStream();
+ Process process = Runtime.getRuntime().exec(new String[]{"cmd"});
+ OutputStream stream = process.getOutputStream();
stream.write(cd.getBytes());
stream.flush();
stream.close();
process.destroy();
- sdk=zip(new File("packageSDK"));
- File copy=new File("packageSDK"+File.separator+"copy");
- if(copy.exists()){
+ sdk = zip(new File("packageSDK"));
+ File copy = new File("packageSDK" + File.separator + "copy");
+ if (copy.exists()) {
zip(copy);
}
stream.close();
@@ -230,24 +242,37 @@ public class AutoPackageSDK {
}
return sdk;
}
- private void copy(){
- try{
- File copyPath=new File("input"+File.separator+"Documents"+File.separator+"copy");
- if(copyPath.exists()){
- Tools.copyFile(copyPath.getAbsolutePath(),new File("packageSDK").getAbsolutePath(),true);
+
+ private void copy() {
+ try {
+ File copyPath = new File("input" + File.separator + "Documents" + File.separator + "copy");
+ if (copyPath.exists()) {
+ Tools.copyFile(copyPath.getAbsolutePath(), new File("packageSDK").getAbsolutePath(), true);
}
- }catch (Exception e){
+ } catch (Exception e) {
e.printStackTrace();
}
}
+
public static void main(String[] args) {
- int a=1;
- new AutoPackageSDK(new SmaliApkToolsPath() {
- @Override
- public void smaliPath(String path) {
- //com.tanggttaxc.langtt.mi
- System.out.println(">"+path);
+ int[] nums = new int[]{-1,-1,-1,1,-1,-1};
+ for (int j = 1; j < nums.length; j++) {
+ int index =j;
+ int tmp = 0;
+ int tmp2 = 0;
+ for (int i = 0; i < index; i++) {
+ tmp += nums[i];
}
- }, "5800", a==0?"com.luckyboy.mmxing":"com.prujwk.jdyphn");
+ for (int i = index + 1; i < nums.length; i++) {
+ tmp2 += nums[i];
+ }
+ System.out.println(tmp);
+ System.out.println(tmp2);
+ if (tmp == tmp2) {
+ System.out.println("return:" + index);
+ return;
+ }
+ }
+ System.out.println("return:" + -1);
}
}
diff --git a/src/com/qy/utils/AutoPackageSDKMust.java b/src/com/qy/utils/AutoPackageSDKMust.java
new file mode 100644
index 0000000..8dac912
--- /dev/null
+++ b/src/com/qy/utils/AutoPackageSDKMust.java
@@ -0,0 +1,161 @@
+package com.qy.utils;
+
+import com.qy.Interfaces.SmaliApkToolsPath;
+import org.json.JSONObject;
+
+import java.io.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class AutoPackageSDKMust {
+ private String key;
+ private SmaliApkToolsPath path;
+ private JSONObject config;
+ private String sdkCode = " String RDCpplictPath=Decode.getData(\"RDCpplictPath\");";
+
+ private AutoPackageSDKMust(String key, SmaliApkToolsPath path) {
+ this.key = key;
+ this.path = path;
+ config = Tools.loadConfig(new File("config.cfg"));
+ start();
+ }
+
+ public static void start(String key, SmaliApkToolsPath path) {
+ new AutoPackageSDKMust(key, path);
+ }
+
+ private void start() {
+ if (true) {
+ copySDK();
+ File sdk_src = new File("sdk_src" + File.separator + "sdk" + File.separator + "src" + File.separator + "main" + File.separator + "java");
+ loadFile(sdk_src);
+ path.smaliPath(packageSDK());
+ } else {
+ System.out.println(encrypt(sdkCode));
+ System.out.println(AESTools.aesDecrypt("655312476E8F4F12A72E1AB1C3CF8032", key));
+ }
+ }
+
+ private void copySDK() {
+ File sdkPath = new File(config.getString("sdkPath"));
+ if (!sdkPath.exists()) {
+ path.smaliPath(null);
+ return;
+ }
+ File sdk_src = new File("sdk_src");
+ sdk_src.mkdirs();
+ Tools.copyFile(sdkPath.getAbsolutePath() + File.separator + "build.gradle", sdk_src.getAbsolutePath() + File.separator, true);
+ Tools.copyFile(sdkPath.getAbsolutePath() + File.separator + "gradlew", sdk_src.getAbsolutePath() + File.separator, true);
+ Tools.copyFile(sdkPath.getAbsolutePath() + File.separator + "gradlew.bat", sdk_src.getAbsolutePath() + File.separator, true);
+ Tools.copyFile(sdkPath.getAbsolutePath() + File.separator + "settings.gradle", sdk_src.getAbsolutePath() + File.separator, true);
+ Tools.copyFile(sdkPath.getAbsolutePath() + File.separator + "local.properties", sdk_src.getAbsolutePath() + File.separator, true);
+ try {
+ BufferedReader reader;
+ Process process = Runtime.getRuntime().exec("xcopy " + sdkPath.getAbsolutePath() + File.separator + "gradle " + sdk_src.getAbsolutePath() + File.separator + "gradle /E /I /Y");
+ reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ while (reader.readLine() != null) ;
+ reader.close();
+ process = Runtime.getRuntime().exec("xcopy " + sdkPath.getAbsolutePath() + File.separator + "sdk " + sdk_src.getAbsolutePath() + File.separator + "sdk /E /I /Y");
+ reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ while (reader.readLine() != null) ;
+ reader.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ System.out.println("复制完全");
+ }
+
+ private void loadFile(File path) {
+ for (File file : path.listFiles()) {
+ if (file.isDirectory()) {
+ loadFile(file);
+ } else if (file.getName().endsWith(".java")) {
+ if (!file.getName().equals("Decode.java")) {
+ loadCode(file);
+ } else {
+ try {
+ BufferedReader reader = new BufferedReader(new FileReader(file));
+ StringBuilder builder = new StringBuilder();
+ String tmp = null;
+ while ((tmp = reader.readLine()) != null) {
+ if (tmp.contains("String key=")) {
+ tmp = tmp.replace("\"\"", "\"" + key + "\"");
+ }
+ builder.append(tmp).append("\n");
+ }
+ reader.close();
+ FileWriter writer = new FileWriter(file);
+ writer.write(builder.toString());
+ writer.flush();
+ writer.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+ }
+ }
+ }
+
+ private void loadCode(File java) {
+ try {
+ BufferedReader reader = new BufferedReader(new FileReader(java));
+ StringBuilder builder = new StringBuilder();
+ String tmp = null;
+ while ((tmp = reader.readLine()) != null) {
+ tmp = encrypt(tmp);
+ builder.append(tmp).append("\n");
+ }
+ reader.close();
+ FileWriter writer = new FileWriter(java);
+ writer.write(builder.toString());
+ writer.flush();
+ writer.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private String encrypt(String tmp) {
+ Pattern pattern = Pattern.compile("\\\"([^\\\"]*)\\\"");
+ Matcher matcher = pattern.matcher(tmp);
+ while (matcher.find()) {
+ String code = tmp.substring(matcher.start(), matcher.end());
+ String encrypt = AESTools.aesEncrypt(code.replace("\"", ""), key);
+ if (encrypt != null) {
+ tmp = tmp.replace(code, "$#&" + encrypt + "$#&");
+ }
+ matcher = pattern.matcher(tmp);
+ }
+ tmp = tmp.replace("$#&", "\"");
+ return tmp;
+ }
+
+ private String packageSDK() {
+ File sdk_src = new File("sdk_src");
+ try {
+ Process process = Runtime.getRuntime().exec(sdk_src.getAbsolutePath() + File.separator + "gradlew.bat assembleRelease -p " + sdk_src.getAbsolutePath() + File.separator + "sdk");//打包sdk
+ BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+ String tmp;
+ while ((tmp = reader.readLine()) != null) {
+ System.out.println(tmp);
+ }
+ process.waitFor();
+ reader.close();
+ return sdk_src.getAbsolutePath() + File.separator + "sdk" + File.separator + "build" + File.separator
+ + "intermediates" + File.separator + "aar_main_jar" + File.separator + "release" + File.separator + "classes.jar";
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public static void main(String[] args) {
+ start("eZMpiVponpIUV5VO", new SmaliApkToolsPath() {
+ @Override
+ public void smaliPath(String path) {
+ System.out.println("over=" + path);
+ }
+ });
+ }
+}
diff --git a/src/com/qy/utils/Tools.java b/src/com/qy/utils/Tools.java
index 5987167..f8aca60 100755
--- a/src/com/qy/utils/Tools.java
+++ b/src/com/qy/utils/Tools.java
@@ -298,7 +298,15 @@ public class Tools {
String exec="java -jar "+dx+" --dex --output="+outName+" "+inName+"";
System.out.println("java to dex:"+exec);
Process process=Runtime.getRuntime().exec(exec);
+ BufferedReader reader=new BufferedReader(new InputStreamReader(process.getErrorStream()));
+ System.out.println("read");
+ String tmp=reader.readLine();
+ while (tmp!=null){
+ System.out.println(tmp);
+ tmp=reader.readLine();
+ }
process.waitFor();
+ System.out.println("打包完成");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();