留存文件恢复

This commit is contained in:
Administrator 2025-08-06 14:43:32 +08:00
parent 2e26323913
commit 940929a50b
9 changed files with 51 additions and 381 deletions

View File

@ -24,13 +24,6 @@ class OpenAppService : JobIntentService() {
override fun onHandleWork(intent: Intent) { override fun onHandleWork(intent: Intent) {
println("IOSTQ:isCanAuto() == " + isCanAuto) println("IOSTQ:isCanAuto() == " + isCanAuto)
println("IOSTQ:getCanAutoLc() == " + canAutoLc) println("IOSTQ:getCanAutoLc() == " + canAutoLc)
recordPackageName?.let {
ServiceUtils.setEnableApp(it, true)
}
ServiceUtils.setEnableApp("org.mozilla.firefox", true)
ServiceUtils.setEnableApp("com.google.android.webview", true)
ServiceUtils.setEnableApp("com.android.chrome", true)
ServiceUtils.setEnableApp("com.UCMobile", true)
try { try {
ChangeDeviceInfoUtil.changeDevice(callBack = object : ChangeCallBack { ChangeDeviceInfoUtil.changeDevice(callBack = object : ChangeCallBack {
override fun changeSuccess() { override fun changeSuccess() {

View File

@ -35,7 +35,6 @@ import com.android.grape.data.AppState.isNeedRestored
import com.android.grape.data.AppState.keepOpen import com.android.grape.data.AppState.keepOpen
import com.android.grape.data.AppState.lang import com.android.grape.data.AppState.lang
import com.android.grape.data.AppState.logBuffer import com.android.grape.data.AppState.logBuffer
import com.android.grape.data.AppState.paramsJson
import com.android.grape.data.AppState.proxyCountry import com.android.grape.data.AppState.proxyCountry
import com.android.grape.data.AppState.proxyIp import com.android.grape.data.AppState.proxyIp
import com.android.grape.data.AppState.proxyPort import com.android.grape.data.AppState.proxyPort
@ -93,7 +92,6 @@ object ConfigManager {
isNeedRestored = false isNeedRestored = false
taskJson = null taskJson = null
installRet = false installRet = false
paramsJson = null
recordPackageName = null recordPackageName = null
recordFileName = null recordFileName = null
recordExtraFileName = null recordExtraFileName = null

View File

@ -1,23 +1,7 @@
package com.android.grape.net package com.android.grape.net
import android.content.Context
import android.util.Log import android.util.Log
import com.android.grape.data.AppState
import com.android.grape.data.AppState.clickServerTimeFromGP
import com.android.grape.data.AppState.clickTime
import com.android.grape.data.AppState.instalTimeFromGp
import com.android.grape.data.AppState.installTime
import com.android.grape.data.AppState.lastUpdateTime
import com.android.grape.data.AppState.paramsJson
import com.android.grape.data.AppState.recordPackageName
import com.android.grape.data.AppState.referer
import com.android.grape.data.AppState.taskJson
import com.android.grape.manager.TrackingManager.genInstallTimeFromGP
import com.android.grape.util.DeviceUtils.getGoogleAdId
import com.android.grape.util.FileUtils import com.android.grape.util.FileUtils
import com.android.grape.util.ServiceUtils
import com.android.grape.util.TaskUtils
import com.blankj.utilcode.util.LogUtils
import java.io.BufferedInputStream import java.io.BufferedInputStream
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.io.File import java.io.File
@ -28,7 +12,6 @@ import java.io.OutputStream
import java.io.UnsupportedEncodingException import java.io.UnsupportedEncodingException
import java.net.HttpURLConnection import java.net.HttpURLConnection
import java.net.URL import java.net.URL
import java.net.URLDecoder
/** /**
* @Time: 2025-07-16 16:07 * @Time: 2025-07-16 16:07
@ -39,90 +22,6 @@ import java.net.URLDecoder
*/ */
object AfClient { object AfClient {
@Throws(IOException::class)
fun setInfo(context: Context): Boolean {
val url = "http://127.0.0.1:8090/ctl/setinfo"
//安装时间
try {
clickTime = taskJson!!.getLong("clickTime")
val deviceJo = paramsJson!!.getJSONObject("device")
// installTimeFromGP = (long) (clickTime / 1000) + (clickTime % 7) + 3;
installTime = System.currentTimeMillis()
Thread.sleep(2000)
Log.d("IOSTQ:installTime == ", installTime.toString() + "")
Log.d("IOSTQ:clickTime == ", clickTime.toString() + "")
val time = genInstallTimeFromGP(clickTime, installTime)
// installTimeFromGP = firstInstallTime / 1000;
installTime = System.currentTimeMillis()
lastUpdateTime = installTime
LogUtils.d("IOSTQ:lastUpdateTime ", lastUpdateTime.toString() + "")
deviceJo.put("firstInstallTime", installTime)
deviceJo.put("lastUpdateTime", lastUpdateTime)
deviceJo.put("installTimeFromGP", instalTimeFromGp)
val installServerTimeFromGP = time[1] // + (installTimeFromGP % 2) + 1;
deviceJo.put("installServerTimeFromGP", installServerTimeFromGP)
val clickTimeToGp = (clickTime / 1000)
deviceJo.put("clickTimeToGP", clickTimeToGp)
val clickServerTimeToGP = time[0] / 1000 // + (clickTimeToGp % 2) + 1;
deviceJo.put("clickServerTimeToGP", clickServerTimeToGP)
AppState.installServerTimeFromGP = installServerTimeFromGP
clickServerTimeFromGP = clickServerTimeToGP
if (taskJson!!.has("clickData")) {
val clickdata = taskJson!!.getJSONObject("clickData")
if (clickdata.has("referer") && clickdata.getString("referer").length > 10) {
referer = clickdata.getString("referer")
}
} else {
referer = ""
}
if (referer != null && referer!!.length > 10) {
deviceJo.put("referrerFromGP", URLDecoder.decode(referer, "UTF-8"))
} else {
deviceJo.put("referrerFromGP", "utm_source=google-play&utm_medium=organic")
deviceJo.put("clickServerTimeToGP", 0)
deviceJo.put("clickTimeToGP", 0)
deviceJo.put("installTimeFromGP", 0)
deviceJo.put("installServerTimeFromGP", 0)
}
//JSONObject proxyJo = paramsJson.getJSONObject("proxy");
//proxyJo.put("forwardIp", Util.getDelegateIp());
Log.d("IOSTQ", "firstInstalTime == " + installTime)
Log.d("IOSTQ", "paramsJson == " + paramsJson)
val origin_gaid: String = getGoogleAdId(context) ?: ""
deviceJo.put("origin_gaid", origin_gaid)
paramsJson!!.put("device", deviceJo)
val params = paramsJson.toString()
ServiceUtils.setEnableApp(recordPackageName ?: "", true)
ServiceUtils.setEnableApp("org.mozilla.firefox", true)
ServiceUtils.setEnableApp("com.google.android.webview", true)
ServiceUtils.setEnableApp("com.android.chrome", true)
ServiceUtils.writeFile("/data/system/device.txt", params)
Log.d("IOSTQ:param == ", params)
// paramsJson.put("proxy", proxyJo);
} catch (e: Exception) {
Log.d("IOSTQ", e.message!!)
e.printStackTrace()
}
// printStr("execSetJson params:"+params);
// writeFileToSDCard(params);
try {
// String ret = new MyPost().PostData(context, params.getBytes("utf-8"), url);
// Log.i("TaskUtils", "set info ret : " + ret);
} catch (e: Exception) {
e.printStackTrace()
}
return true
}
fun downloadFile(httpUrl: String, fileName: String): Boolean { fun downloadFile(httpUrl: String, fileName: String): Boolean {
Log.i( Log.i(
"AfClient", "AfClient",

View File

@ -222,16 +222,15 @@ object AppUtils {
val file = File(getRecordSdcardApkVerFileName(context)) val file = File(getRecordSdcardApkVerFileName(context))
var extraFile: File? = null var extraFile: File? = null
if (recordExtraFileName?.isNotEmpty() == true) { if (recordExtraFileName?.isNotEmpty() == true) {
extraFile = File(ContextUtils.getRecordExtraFileName(context)) extraFile = File(getRecordExtraFileName(context))
} }
installRet = installApk(context, file, extraFile) && AppUtils.checkAppInstalled( installRet = installApk(context, file, extraFile) && checkAppInstalled(
context, context,
recordPackageName recordPackageName
) )
if (installRet && !videoProxy.contains("123.56.44.45")) { if (installRet && !videoProxy.contains("123.56.44.45")) {
//检查是否有新版本
file.delete() file.delete()
extraFile?.delete() extraFile?.delete()
} }
@ -617,17 +616,12 @@ object AppUtils {
ret = downloadFile(extraUrl, getRecordExtraFileName(context)) ret = downloadFile(extraUrl, getRecordExtraFileName(context))
} }
if (isNeedRestored) { if (isNeedRestored) {
println("IOSTQ:开始下载留存文件") Log.i("AppUtils","IOSTQ:开始下载留存文件")
taskJson?.let { taskJson?.let {
if (it.has("BackupFileUrl1") && it.getString("BackupFileUrl1") if (it.has("BackupFileUrl1") && it.getString("BackupFileUrl1")
.isNotEmpty() .isNotEmpty()
) { ) {
var restored_zip = var restored_zip = "http://47.83.1.116/tt/" + it.getString("BackupFileUrl1")
"http://47.83.1.116/tt/upload/backupddj/" + it.getString("BackupFileUrl1")
if (backUpServerIp.isNotEmpty()) {
restored_zip =
"http://" + backUpServerIp + "/tt/" + it.getString("BackupFileUrl1")
}
ret = downloadFile(restored_zip, getRecordDataFileName(context)) ret = downloadFile(restored_zip, getRecordDataFileName(context))
} }
} }

View File

@ -56,8 +56,7 @@ object BackupUtils {
} }
try { try {
val zipDirName = getBaseFilesDir(context) + "/" + monitorDir + "/" + packageName val zipDirName = getBaseFilesDir(context) + "/" + monitorDir + "/" + packageName
val zipFileName = val zipFileName = getBaseFilesDir(context) + "/" + monitorDir + "/" + packageName + ".zip"
getBaseFilesDir(context) + "/" + monitorDir + "/" + packageName + ".zip"
Log.i( Log.i(
"BackupUtils", "BackupUtils",
"backupDataFile-> zipDirName:$zipDirName ; zipFileName:$zipFileName" "backupDataFile-> zipDirName:$zipDirName ; zipFileName:$zipFileName"
@ -91,6 +90,7 @@ object BackupUtils {
getRecordTxtFileName(context) getRecordTxtFileName(context)
) )
chownSh(getMonitorDir(context), uid) chownSh(getMonitorDir(context), uid)
Log.d("TAG", "backupDataFile: ------------------>")
val copySucc = FileUtils.copyFolderSh(apkDataPath,zipDirName) val copySucc = FileUtils.copyFolderSh(apkDataPath,zipDirName)
Log.i("BackupUtils", "copyFolder($apkDataPath,$zipDirName) = $copySucc") Log.i("BackupUtils", "copyFolder($apkDataPath,$zipDirName) = $copySucc")
if (copySucc) { if (copySucc) {
@ -344,8 +344,11 @@ object BackupUtils {
if (reloginDataDir == null) { if (reloginDataDir == null) {
return false return false
} }
val dataFile = File("$dataDir$recordPackageName")
unZipFileSh(zipFile, dataDir) if (!dataFile.exists()) {
dataFile.mkdir()
}
unZipFileSh(zipFile, dataFile.absolutePath)
val userAnGroup = getUserAndGroupSh( val userAnGroup = getUserAndGroupSh(
context, context,
@ -355,7 +358,7 @@ object BackupUtils {
Log.i("BackupUtils", "recoverRecordData->userAndGroup:$userAnGroup") Log.i("BackupUtils", "recoverRecordData->userAndGroup:$userAnGroup")
File(reloginDataDir).parentFile?.absolutePath?.let { File(reloginDataDir).parentFile?.absolutePath?.let {
copyFolderSh( copyFolderSh(
"$dataDir/$recordPackageName", "$dataDir$recordPackageName",
it it
) )
} }

View File

@ -135,17 +135,18 @@ object FileUtils {
public fun forceMakeDir(file: File) { public fun forceMakeDir(file: File) {
if (!file.exists()) { if (!file.exists()) {
val parent = file.parentFile file.mkdirs()
// val parent = file.parentFile
parent?.exists()?.let { //
if (!it) { // parent?.exists()?.let {
MockTools.exec("mkdir $parent") // if (!it) {
forceMakeDir(parent) // MockTools.exec("mkdir $parent")
// file.mkdirs(); // forceMakeDir(parent)
} else { // // file.mkdirs();
MockTools.exec("mkdir $file") // } else {
} // MockTools.exec("mkdir $file")
} // }
// }
} }
} }
@ -278,8 +279,7 @@ object FileUtils {
"start zipSh : $zipDirName ; $zipFileName" "start zipSh : $zipDirName ; $zipFileName"
) )
try { try {
val zipDir = File(zipDirName) val cmdString = "tar -zcvf $zipFileName -C $zipDirName ."
val cmdString = "tar -zcvf $zipFileName -C ${zipDir.parentFile?.absolutePath ?: ""} ${zipDir.name}"
Log.i("FileUtils", "zipSh-> cmd:$cmdString") Log.i("FileUtils", "zipSh-> cmd:$cmdString")
MockTools.exec(cmdString) MockTools.exec(cmdString)
} catch (e: Exception) { } catch (e: Exception) {
@ -575,7 +575,7 @@ object FileUtils {
fun writeAfLog() { fun writeAfLog() {
val filePath = "/data/data/${recordPackageName}/log.txt" val filePath = "/data/data/${recordPackageName}/log.txt"
ShellUtils.execRootCmdAndGetResult("chmod 777 $filePath") ShellUtil.execRootCmdAndGetResult("chmod 777 $filePath")
val afLog = ShellUtil.execRootCmdAndGetResult("cat $filePath") val afLog = ShellUtil.execRootCmdAndGetResult("cat $filePath")
val file = File( val file = File(
Environment.getExternalStorageDirectory(), Environment.getExternalStorageDirectory(),
@ -610,20 +610,20 @@ object FileUtils {
// 构造安全命令 // 构造安全命令
val filePath = "/data/data/$packageName/device.txt" val filePath = "/data/data/$packageName/device.txt"
val cmd = "sh -c 'printf %s '\''" + base64Content + "'\'' > " + filePath + "'" val cmd = "sh -c 'printf %s '\''" + base64Content + "'\'' > " + filePath + "'"
val result = ShellUtils.execRootCmdAndGetResult(cmd) val result = ShellUtil.execRootCmdAndGetResult(cmd)
ShellUtils.execRootCmdAndGetResult("chmod 777 $filePath") ShellUtil.execRootCmdAndGetResult("chmod 777 $filePath")
} }
fun runPlugin(packageName: String) { fun runPlugin(packageName: String) {
val cmd = val cmd =
"apmt patch add -n ArmCloudAF -p $packageName -f /sdcard/Download/ArmCloudAF_lo.apk" "apmt patch add -n ArmCloudAF -p $packageName -f /sdcard/Download/ArmCloudAF_lo.apk"
val result = ShellUtils.execRootCmdAndGetResult(cmd) val result = ShellUtil.execRootCmdAndGetResult(cmd)
LogUtils.d("FileUtils", "runPlugin: $result") LogUtils.d("FileUtils", "runPlugin: $result")
} }
fun deletePlugin() { fun deletePlugin() {
val cmd = "apmt patch del -n ArmCloudAF" val cmd = "apmt patch del -n ArmCloudAF"
val result = ShellUtils.execRootCmdAndGetResult(cmd) val result = ShellUtil.execRootCmdAndGetResult(cmd)
LogUtils.d("FileUtils", "deletePlugin: $result") LogUtils.d("FileUtils", "deletePlugin: $result")
} }
@ -708,7 +708,7 @@ object FileUtils {
// 构造命令(注意 shell 特殊字符的转义) // 构造命令(注意 shell 特殊字符的转义)
val safeOldPath = src.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"") val safeOldPath = src.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"")
val safeNewPath = dst.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"") val safeNewPath = dst.absolutePath.replace(" ", "\\ ").replace("\"", "\\\"")
val cmd = "cp -r -f \"$safeOldPath\" \"$safeNewPath\"" val cmd = "cp -r -f \"$safeOldPath\"/* \"$safeNewPath\""
Log.i("TaskUtil", "copyFolderSh cmd: $cmd") Log.i("TaskUtil", "copyFolderSh cmd: $cmd")

View File

@ -5,26 +5,17 @@ import android.util.Log
import com.android.grape.data.AppState.appVersion import com.android.grape.data.AppState.appVersion
import com.android.grape.data.AppState.appVersionCode import com.android.grape.data.AppState.appVersionCode
import com.android.grape.data.AppState.backUpServerIp import com.android.grape.data.AppState.backUpServerIp
import com.android.grape.data.AppState.cacheJson
import com.android.grape.data.AppState.canAutoLc import com.android.grape.data.AppState.canAutoLc
import com.android.grape.data.AppState.clickServerTimeFromGP
import com.android.grape.data.AppState.clickTime
import com.android.grape.data.AppState.ctit import com.android.grape.data.AppState.ctit
import com.android.grape.data.AppState.defaultPRoxyJo
import com.android.grape.data.AppState.forwardIp import com.android.grape.data.AppState.forwardIp
import com.android.grape.data.AppState.fuzzy_domain import com.android.grape.data.AppState.fuzzy_domain
import com.android.grape.data.AppState.fuzzy_proxy import com.android.grape.data.AppState.fuzzy_proxy
import com.android.grape.data.AppState.instalTimeFromGp
import com.android.grape.data.AppState.installServerTimeFromGP
import com.android.grape.data.AppState.installTime
import com.android.grape.data.AppState.isCanAuto import com.android.grape.data.AppState.isCanAuto
import com.android.grape.data.AppState.isNeedBackup import com.android.grape.data.AppState.isNeedBackup
import com.android.grape.data.AppState.isNeedReg import com.android.grape.data.AppState.isNeedReg
import com.android.grape.data.AppState.isNeedRestored import com.android.grape.data.AppState.isNeedRestored
import com.android.grape.data.AppState.keepOpen import com.android.grape.data.AppState.keepOpen
import com.android.grape.data.AppState.lang import com.android.grape.data.AppState.lang
import com.android.grape.data.AppState.lastUpdateTime
import com.android.grape.data.AppState.paramsJson
import com.android.grape.data.AppState.preClickRecordId import com.android.grape.data.AppState.preClickRecordId
import com.android.grape.data.AppState.proxyCountry import com.android.grape.data.AppState.proxyCountry
import com.android.grape.data.AppState.proxyIp import com.android.grape.data.AppState.proxyIp
@ -32,27 +23,15 @@ import com.android.grape.data.AppState.proxyPort
import com.android.grape.data.AppState.recordFileName import com.android.grape.data.AppState.recordFileName
import com.android.grape.data.AppState.recordId import com.android.grape.data.AppState.recordId
import com.android.grape.data.AppState.recordPackageName import com.android.grape.data.AppState.recordPackageName
import com.android.grape.data.AppState.referer
import com.android.grape.data.AppState.regEmailJson
import com.android.grape.data.AppState.reloginRecordId import com.android.grape.data.AppState.reloginRecordId
import com.android.grape.data.AppState.scriptOpenApp import com.android.grape.data.AppState.scriptOpenApp
import com.android.grape.data.AppState.taskJson import com.android.grape.data.AppState.taskJson
import com.android.grape.data.AppState.trackingLink import com.android.grape.data.AppState.trackingLink
import com.android.grape.data.AppState.ua import com.android.grape.data.AppState.ua
import com.android.grape.data.AppState.videoProxy import com.android.grape.data.AppState.videoProxy
import com.android.grape.net.AfClient.postData
import com.android.grape.util.DeviceUtils.getGoogleAdId
import com.android.grape.util.FileUtils.forceMakeDir
import com.android.grape.util.ServiceUtils.WriteFile
import com.android.grape.util.TaskUtils.execRecord import com.android.grape.util.TaskUtils.execRecord
import com.android.grape.util.TaskUtils.getReferer
import com.android.grape.util.TaskUtils.setFinish import com.android.grape.util.TaskUtils.setFinish
import com.android.grape.util.TaskUtils.setRecordExtraFileName import com.android.grape.util.TaskUtils.setRecordExtraFileName
import com.blankj.utilcode.util.LogUtils
import org.json.JSONObject
import java.io.File
import java.io.IOException
import java.net.URLDecoder
/** /**
* @Time: 2025-20-16 17:20 * @Time: 2025-20-16 17:20
@ -207,165 +186,6 @@ object JsonUtils {
} }
} }
/**
* 通过处理任务 JSON 对象并向参数 JSON 对象添加各种属性来初始化操作所需的 JSON 参数
* 处理设备优惠和其他相关数据以准备完整的 JSON 结构
*
* @param context 用于执行各种操作的应用程序上下文例如在初始化期间写入文件和发送事件
* 例如在初始化期间写入文件和发送事件
* @return 如果 JSON 参数初始化成功则返回 true否则返回 false
*/
fun initParamsJson(context: Context): Boolean {
paramsJson = JSONObject().apply {
try {
taskJson?.let {
val deviceJo = it.getJSONObject("device")
// LogUtils.d("deviceJo:$deviceJo")
val deviceParamJo: JSONObject = DeviceConvertUtil.MGConvert(deviceJo)
if (it.has("isCollectURL")) {
deviceJo.put("isCollectURL", true)
} else {
deviceJo.put("isCollectURL", false)
}
if (it.has("regInfo")) {
val regInfo = it.getJSONObject("regInfo")
var apks = File("/sdcard/Download/GoogleAccount.txt")
if (!apks.exists()) {
forceMakeDir(File("/sdcard/Download"))
apks = File("/sdcard/Download/GoogleAccount.txt")
}
WriteFile(apks.toString(), regInfo.toString())
sendRegEvent(context)
}
//add 20210409
val offerJo = it.getJSONObject("offer")
val apkprop = it.getJSONObject("apkProp")
val thirdDetect = offerJo.getString("thirdDetect")
if ("appsflyer".equals(thirdDetect, ignoreCase = true)) {
deviceParamJo.put("afVersion", offerJo.getString("thirdVer"))
}
deviceParamJo.put("installVersionFromGP", offerJo.getString("apkVer"))
put("device", deviceParamJo)
if (it.has("expand")) {
put("expand", it.getJSONObject("expand"))
}
put("offer", offerJo)
val proxyJo = defaultPRoxyJo
}
} catch (e: Exception) {
e.printStackTrace()
Log.i("JsonUtils", "initParamsJson error : " + e.message)
setFinish(context)
return false
}
}
return true
}
@Throws(IOException::class)
fun setRrInfo(context: Context): Boolean {
try {
clickTime = taskJson!!.getLong("clickTime")
val deviceJo = paramsJson!!.getJSONObject("device")
if (isNeedRestored) {
if (cacheJson != null) {
installTime =
cacheJson.getLong("firstInstallTime")
lastUpdateTime =
cacheJson.getLong("lastUpdateTime")
installServerTimeFromGP =
cacheJson.getLong("installServerTimeFromGP")
clickServerTimeFromGP =
cacheJson.getLong("clickServerTimeToGP")
instalTimeFromGp =
cacheJson.getLong("installTimeFromGP")
}
}
deviceJo.put("firstInstallTime", installTime)
deviceJo.put("lastUpdateTime", lastUpdateTime)
deviceJo.put("installTimeFromGP", instalTimeFromGp)
val installServerTimeFromGP = installServerTimeFromGP
deviceJo.put("installServerTimeFromGP", installServerTimeFromGP)
val clickTimeToGp = (clickTime / 1000)
deviceJo.put("clickTimeToGP", clickTimeToGp)
val clickServerTimeToGP = clickServerTimeFromGP
deviceJo.put("clickServerTimeToGP", clickServerTimeToGP)
if (taskJson!!.has("clickData")) {
val clickdata = taskJson!!.getJSONObject("clickData")
if (clickdata.has("referer")) {
referer = clickdata.getString("referer")
}
}
if (getReferer() != null) {
deviceJo.put("referrerFromGP", URLDecoder.decode(getReferer(), "UTF-8"))
} else {
deviceJo.put("referrerFromGP", "utm_source=google-play&utm_medium=organic")
deviceJo.put("clickServerTimeToGP", 0)
deviceJo.put("clickTimeToGP", 0)
deviceJo.put("installTimeFromGP", 0)
deviceJo.put("installServerTimeFromGP", 0)
}
val origin_gaid: String = getGoogleAdId(context) ?: ""
deviceJo.put("origin_gaid", origin_gaid)
paramsJson!!.put("device", deviceJo)
val params = paramsJson.toString()
ServiceUtils.setEnableApp(recordPackageName ?: "", true)
ServiceUtils.setEnableApp("org.mozilla.firefox", true)
ServiceUtils.setEnableApp("com.google.android.webview", true)
ServiceUtils.setEnableApp("com.android.chrome", true)
ServiceUtils.writeFile("/data/system/device.txt", params)
Log.d("IOSTQ:param == ", params)
return true
// paramsJson.put("proxy", proxyJo);
} catch (e: Exception) {
e.printStackTrace()
}
return false
}
/**
* 通过向指定的服务器URL提出邮政请求来发送注册事件
*
* @param上下文调用该方法的上下文用于执行网络操作
* @return True如果已成功处理注册事件错误如果操作期间发生错误
*/
private fun sendRegEvent(context: Context): Boolean {
val url = "http://123.56.44.45/tt/ddj/reg.do?recordId=$recordId"
Log.i("JsonUtils", "url:$url")
try {
val ret: String? = postData("".toByteArray(), url)
Log.i("JsonUtils", "ret:$ret")
val jo = JSONObject(ret ?: "")
if (jo.getInt("code") == 1) {
regEmailJson = jo.getJSONObject("emailInfo")
}
return true
} catch (e: Exception) {
e.printStackTrace()
}
return false
}
/** /**
* 在JSON配置上执行一组操作它删除了特定的日志文件处理JSON参数 * 在JSON配置上执行一组操作它删除了特定的日志文件处理JSON参数
* 并记录所需的数据如果例外它会记录错误并执行清理 * 并记录所需的数据如果例外它会记录错误并执行清理
@ -376,10 +196,8 @@ object JsonUtils {
@Throws(Exception::class) @Throws(Exception::class)
fun execSetJson(context: Context) { fun execSetJson(context: Context) {
try { try {
JsonUtils.afterJson() afterJson()
if (JsonUtils.initParamsJson(context)) {
execRecord(context) execRecord(context)
}
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
Log.i("TaskUtils", "execSetJson error : " + e.message) Log.i("TaskUtils", "execSetJson error : " + e.message)

View File

@ -512,7 +512,7 @@ object ShellUtils {
fun unZipFileSh(zipFileName: String, dataDir: String) { fun unZipFileSh(zipFileName: String, dataDir: String) {
try { try {
val cmdString = "tar -zxvf $zipFileName --strip-components=1 -C $dataDir" val cmdString = "tar -zxvf $zipFileName -C $dataDir"
Log.i("ShellUtils", "unZipFileSh-> cmd:$cmdString") Log.i("ShellUtils", "unZipFileSh-> cmd:$cmdString")
MockTools.exec(cmdString) MockTools.exec(cmdString)
} catch (e: Exception) { } catch (e: Exception) {

View File

@ -7,59 +7,45 @@ import android.os.Handler
import android.os.Looper import android.os.Looper
import android.provider.Settings import android.provider.Settings
import android.util.Log import android.util.Log
import com.android.grape.net.AfClient.downloadFile
import com.android.grape.MainApplication import com.android.grape.MainApplication
import com.android.grape.data.AppState import com.android.grape.data.AppState
import com.android.grape.data.AppState.afLog import com.android.grape.data.AppState.afLog
import com.android.grape.data.AppState.apkDir import com.android.grape.data.AppState.apk_path
import com.android.grape.data.AppState.appDataUrl import com.android.grape.data.AppState.appDataUrl
import com.android.grape.data.AppState.baoming
import com.android.grape.data.AppState.canAutoLc import com.android.grape.data.AppState.canAutoLc
import com.android.grape.data.AppState.clickTime import com.android.grape.data.AppState.clickTime
import com.android.grape.data.AppState.installRet import com.android.grape.data.AppState.installRet
import com.android.grape.data.AppState.isCanAuto import com.android.grape.data.AppState.isCanAuto
import com.android.grape.data.AppState.logBuffer import com.android.grape.data.AppState.logBuffer
import com.android.grape.data.AppState.monitorDir
import com.android.grape.data.AppState.nRandom import com.android.grape.data.AppState.nRandom
import com.android.grape.data.AppState.paramsJson
import com.android.grape.data.AppState.recordExtraFileName import com.android.grape.data.AppState.recordExtraFileName
import com.android.grape.data.AppState.recordFileName
import com.android.grape.data.AppState.recordPackageName import com.android.grape.data.AppState.recordPackageName
import com.android.grape.data.AppState.referer import com.android.grape.data.AppState.referer
import com.android.grape.data.AppState.regEmailJson import com.android.grape.data.AppState.regEmailJson
import com.android.grape.data.AppState.scriptOpenApp import com.android.grape.data.AppState.scriptOpenApp
import com.android.grape.data.AppState.baoming
import com.android.grape.util.FileUtils.getName
import com.android.grape.data.AppState.zip_name
import com.android.grape.data.AppState.apk_path
import com.android.grape.net.AfClient.postData
import com.android.grape.util.ContextUtils.getRecordDataDirName
import com.android.grape.data.AppState.taskJson import com.android.grape.data.AppState.taskJson
import com.android.grape.data.AppState.zip_name
import com.android.grape.job.DownloadAppJobService import com.android.grape.job.DownloadAppJobService
import com.android.grape.job.MonitorService import com.android.grape.job.MonitorService
import com.android.grape.job.UnInstallService import com.android.grape.job.UnInstallService
import com.android.grape.manager.ConfigManager import com.android.grape.manager.ConfigManager
import com.android.grape.manager.ConfigManager.initDefaultAppJo import com.android.grape.manager.ConfigManager.initDefaultAppJo
import com.android.grape.manager.ConfigManager.initDefaultProxyJo import com.android.grape.manager.ConfigManager.initDefaultProxyJo
import com.android.grape.sai.Utils import com.android.grape.net.AfClient.downloadFile
import com.android.grape.net.AfClient.postData
import com.android.grape.util.AppUtils.execTargetApp import com.android.grape.util.AppUtils.execTargetApp
import com.android.grape.util.AppUtils.getApkPackageName import com.android.grape.util.AppUtils.getApkPackageName
import com.android.grape.util.AppUtils.setTopApp import com.android.grape.util.AppUtils.setTopApp
import com.android.grape.util.ContextUtils.getBaseFilesDir import com.android.grape.util.ContextUtils.getRecordDataDirName
import com.android.grape.util.FileUtils.forceMakeDir import com.android.grape.util.FileUtils.forceMakeDir
import com.android.grape.util.FileUtils.getName
import com.android.grape.util.FileUtils.getRecordDataFileName import com.android.grape.util.FileUtils.getRecordDataFileName
import com.android.grape.util.JsonUtils.execSetJson import com.android.grape.util.JsonUtils.execSetJson
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import org.json.JSONObject import org.json.JSONObject
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
import java.io.PrintWriter
import java.util.Locale
import kotlin.math.min import kotlin.math.min
/** /**
@ -201,21 +187,17 @@ object TaskUtils {
) )
LogUtils.d("IOSTQ:execReloginTask->result:$result") LogUtils.d("IOSTQ:execReloginTask->result:$result")
if (result != null && result.isNotEmpty()) { if (result != null && result.isNotEmpty()) {
taskJson = JSONObject(result).apply { taskJson = JSONObject(result)
val code = getInt("code") val code = taskJson?.getInt("code")
if (code == 1) { if (code == 1) {
MockTools.exec("chmod 777 /data/data/com.android.grape/files/monitor") MockTools.exec("chmod 777 /data/data/com.android.grape/files/monitor")
MockTools.exec("chmod 777 /data/data/com.android.grape/files/monitor/apks") MockTools.exec("chmod 777 /data/data/com.android.grape/files/monitor/apks")
JsonUtils.execSetJson(context) execSetJson(context)
clickTime = 1 clickTime = 1
} else { } else {
Log.i( Log.i("TaskUtils", "request result code invalid : $code")
"TaskUtils",
"request result code invalid : $code"
)
setFinish(context) setFinish(context)
} }
}
} else { } else {
Log.i("TaskUtils", "request result is null") Log.i("TaskUtils", "request result is null")
setFinish(context) setFinish(context)
@ -333,23 +315,6 @@ object TaskUtils {
return false return false
} }
val paramString: String
get() = paramsJson.toString()
public fun notcl(context: Context) {
val url = "http://127.0.0.1:8090/ctl/notcl"
try {
val ret: String = postData("".toByteArray(charset("utf-8")), url) ?: ""
Log.i("TaskUtils", "notcl ret : $ret")
} catch (e: Exception) {
e.printStackTrace()
}
}
fun openRecordApp(context: Context) { fun openRecordApp(context: Context) {
if (scriptOpenApp == 0) { if (scriptOpenApp == 0) {
recordPackageName?.let { recordPackageName?.let {