super_sign.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. <?php
  2. namespace app\index;
  3. use function GuzzleHttp\Psr7\str;
  4. use MingYuanYun\AppStore\Client;
  5. use app\aliyunoss\Aliyunoss;
  6. use app\qiniuoss\Qiniuoss;
  7. class super_sign extends Base
  8. {
  9. function mobileconfig()
  10. {
  11. $_var_0 = SafeRequest("app_id", "get");
  12. $_var_1 = db("appid")->where("in_id", $_var_0)->find();
  13. if (!$_var_1) {
  14. exit("应用不存在!");
  15. }
  16. $_var_2 = get_site_url("s") . "/index/super_sign/getudid?app_id=" . $_var_0;
  17. $_var_2 = get_site_url("s") . udid_mobileconfig($_var_2, $_var_1, $_var_0);
  18. redirect($_var_2);
  19. }
  20. function getudid()
  21. {
  22. $_var_3 = SafeRequest("app_id", "get");
  23. $_var_4 = db("appid")->where("in_id", $_var_3)->find();
  24. $_var_5 = file_get_contents("php://input");
  25. $_var_6 = "<?xml version=\"1.0\"";
  26. $_var_7 = "</plist>";
  27. $_var_8 = substr($_var_5, strpos($_var_5, $_var_6), strpos($_var_5, $_var_7) - strpos($_var_5, $_var_6));
  28. $_var_9 = xml_parser_create();
  29. $_var_10 = "";
  30. $_var_11 = "";
  31. $_var_12 = "";
  32. $_var_13 = "";
  33. $_var_14 = "";
  34. $_var_15 = 0;
  35. $_var_16 = array();
  36. $_var_5 = "";
  37. xml_parse_into_struct($_var_9, $_var_8, $_var_17);
  38. xml_parser_free($_var_9);
  39. foreach ($_var_17 as $_var_18) {
  40. if ($_var_18["level"] == 3 && $_var_18["type"] == "complete") {
  41. $_var_16[] = $_var_18;
  42. }
  43. }
  44. $_var_5 = [];
  45. foreach ($_var_16 as $_var_19) {
  46. switch ($_var_19["value"]) {
  47. case "CHALLENGE":
  48. $_var_11 = $_var_16[$_var_15 + 1]["value"];
  49. $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"];
  50. break;
  51. case "DEVICE_NAME":
  52. $_var_12 = $_var_16[$_var_15 + 1]["value"];
  53. $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"];
  54. break;
  55. case "PRODUCT":
  56. $_var_13 = $_var_16[$_var_15 + 1]["value"];
  57. $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"];
  58. break;
  59. case "UDID":
  60. $_var_10 = $_var_16[$_var_15 + 1]["value"];
  61. $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"];
  62. break;
  63. case "VERSION":
  64. $_var_14 = $_var_16[$_var_15 + 1]["value"];
  65. $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"];
  66. break;
  67. }
  68. $_var_15++;
  69. }
  70. $_var_20 = $_COOKIE["udid"] ?? $_SESSION["udid"] ?? "";
  71. if ($_var_20 && $_var_20 != $_var_10) {
  72. return redirect();
  73. }
  74. setcookie("udid", $_var_10, time() + 2592000);
  75. $_SESSION["udid"] = $_var_10;
  76. $_var_5["content"] = json_encode($_var_5);
  77. $_var_5["product"] = $_var_13;
  78. $_var_5["version"] = $_var_14;
  79. if (db("ios_device")->where("udid", $_var_10)->count()) {
  80. db("ios_device")->where("udid", $_var_10)->update($_var_5);
  81. }
  82. $this->create_logs($_var_4, $_var_10);
  83. }
  84. function create_logs($appData, $UDID)
  85. {
  86. $_var_21 = db("super_sign")->where("udid", $UDID)->where("app_id", $appData["in_id"])->where("user_id", $appData["in_uid"])->where("status", "<", "5")->order("id desc")->find();
  87. if ($_var_21) {
  88. $_var_22 = $_var_21["id"];
  89. db("super_sign")->where("udid", $UDID)->update(["plist_path" => "", "ipa_path" => ""]);
  90. } else {
  91. $_var_23 = ["app_id" => $appData["in_id"], "app_name" => $appData["in_name"], "app_version" => $appData["in_bsvs"], "udid" => $UDID, "user_id" => $appData["in_uid"], "type" => 0, "status" => 0, "create_time" => time()];
  92. $_var_22 = db("super_sign")->insertGetId($_var_23);
  93. }
  94. redirect("http://" . (IN_TZDOMAIN ?: $_SERVER["HTTP_HOST"]) . "/" . $appData["in_link"] . "?ssid=" . $_var_22, 301);
  95. }
  96. function updateCert($map = [])
  97. {
  98. $_var_24 = db("super_cert")->where($map);
  99. if (isset($map["iss"])) {
  100. $_var_24 = $_var_24->find();
  101. if (!$_var_24 || $_var_24["status"] == -1) {
  102. unset($map["iss"]);
  103. return $this->updateCert($map);
  104. }
  105. } else {
  106. $_var_25 = IN_CERT_KEEP && is_numeric(IN_CERT_KEEP) ? IN_CERT_KEEP : 0;
  107. $_var_24 = $_var_24->where("status > 0")->where("limit_count", ">", $_var_25)->orderRand()->find();
  108. }
  109. if ($_var_24) {
  110. if ($_var_24["type"]) {
  111. return $_var_24;
  112. }
  113. certMoveToNew($_var_24);
  114. $_var_26 = IN_CERT_PATH . getCert($_var_24["iss"], $_var_24["kid"]);
  115. if ($_var_26 && is_file($_var_26)) {
  116. $_var_27 = ["iss" => $_var_24["iss"], "kid" => $_var_24["kid"], "secret" => $_var_26];
  117. $_var_28 = new Client($_var_27);
  118. $_var_28->setHeaders(["Authorization" => "Bearer " . $_var_28->getToken()]);
  119. $_var_29 = $_var_28->api("device")->all(["filter[platform]" => "IOS"]);
  120. if (isset($_var_29["errors"][0]["status"]) && ($_var_29["errors"][0]["status"] == 403 || $_var_29["errors"][0]["status"] == 401)) {
  121. if ($_var_24["status"] == 401) {
  122. db("super_cert")->where("id", $_var_24["id"])->update(["status" => -1, "mark" => $_var_24["mark"] . date("Y-m-d H:i:s") . "被封"]);
  123. if (isset($map["iss"])) {
  124. unset($map["iss"]);
  125. }
  126. } else {
  127. db("super_cert")->where("id", $_var_24["id"])->update(["status" => $_var_29["errors"][0]["status"]]);
  128. }
  129. return $this->updateCert($map);
  130. } else {
  131. if (isset($_var_29["meta"]["paging"]["total"])) {
  132. $_var_30 = $_var_29["meta"]["paging"]["total"] > 100 ? 100 : $_var_29["meta"]["paging"]["total"];
  133. $_var_31 = 100 - $_var_30;
  134. db("super_cert")->where("id", $_var_24["id"])->update(["limit_count" => $_var_31, "total_count" => $_var_30, "status" => "1"]);
  135. return $_var_24;
  136. }
  137. }
  138. } else {
  139. db("super_cert")->where("id", $_var_24["id"])->update(["status" => 0]);
  140. if (isset($map["iss"])) {
  141. unset($map["iss"]);
  142. }
  143. return $this->updateCert($map);
  144. }
  145. }
  146. return null;
  147. }
  148. function dosign()
  149. {
  150. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
  151. header("Cache-Control: no-cache, must-revalidate");
  152. header("Pragma: no-cache");
  153. header("Content-type: text/html;charset=" . IN_CHARSET);
  154. $_var_32 = SafeRequest("ssid", "get");
  155. if (!$_var_32) {
  156. reJSON("PLATFORM_NOT_MATCHING", 404);
  157. }
  158. $_var_33 = db("super_sign")->where("id", $_var_32)->find();
  159. if (!$_var_33) {
  160. reJSON("PLATFORM_NOT_MATCHING", 404);
  161. }
  162. db("super_sign")->where("id", $_var_32)->update(["status" => "3"]);
  163. $_var_34 = IN_TMP_PATH . "sign_log/" . $_var_32 . "_output.log";
  164. @file_put_contents($_var_34, "");
  165. $_var_35 = $_var_33["udid"];
  166. $_var_36 = SafeRequest("appid", "get") ?: $_var_33["app_id"];
  167. if (!$_var_36) {
  168. reJSON("APP_EXPIRED", 404);
  169. }
  170. $_var_37 = db("appid")->where("in_id", $_var_36)->find();
  171. if (!$_var_37) {
  172. reJSON("APP_EXPIRED", 404);
  173. }
  174. $_var_38 = db("user")->where("in_userid", $_var_37["in_uid"])->value(($_var_37["in_private"] ? "prv_" : "") . "device_num");
  175. if ($_var_38 < 1) {
  176. reJSON("APP_DOWNLOAD_TIMES_OVER", 404);
  177. }
  178. if ($_var_37["in_private"] && !db("super_cert")->where("user_id", $_var_37["in_uid"])->where("status", "<>", "-1")->count()) {
  179. reJSON("NOTCERT", 404);
  180. }
  181. $this->clear_sign_ipa($_var_36);
  182. $_var_39 = [];
  183. $_var_40 = db("ios_device")->where("udid", $_var_35)->order("id desc")->value("cert_iss");
  184. if ($_var_40) {
  185. $_var_39["iss"] = $_var_40;
  186. }
  187. if ($_var_37["in_private"]) {
  188. $_var_39["user_id"] = $_var_37["in_uid"];
  189. } else {
  190. $_var_39["user_id"] = 0;
  191. }
  192. $_var_41 = $this->updateCert($_var_39);
  193. if (!$_var_41 || $_var_41["type"] == 0 && !is_file(IN_CERT_PATH . getCert($_var_41["iss"], $_var_41["kid"]))) {
  194. reJSON("NOTCERT", 404);
  195. }
  196. $_var_42 = $_var_41["iss"];
  197. $_var_43 = SafeRequest("authcode", "get") ?: db("super_code")->where("udid", $_var_35)->where("app_id", $_var_37["in_id"])->value("code");
  198. if ($_var_43) {
  199. db("super_code")->where("code", $_var_43)->update(["cert_iss" => $_var_42]);
  200. }
  201. $_var_44 = IN_CERT_PATH . getCert($_var_41["iss"], $_var_41["kid"], "p12");
  202. $_var_45 = IN_UPLOADS_PATH . "ios_mobileprovision/" . $_var_41["id"] . "_" . $_var_36 . ".mobileprovision";
  203. creatdir(IN_UPLOADS_PATH . "ios_mobileprovision/");
  204. $_var_46 = $_var_32 . "_" . $_var_37["in_app"];
  205. creatdir(IN_UPLOADS_PATH . "super_sign_ipa");
  206. $_var_47 = str_replace(IN_ROOT, "", IN_UPLOADS_PATH) . "super_sign_ipa/" . $_var_46;
  207. $_var_48 = IN_ROOT . $_var_47;
  208. if (is_file($_var_48)) {
  209. @unlink($_var_48);
  210. }
  211. creatdir(IN_TMP_PATH . "sign_log");
  212. if ($_var_41["type"]) {
  213. if (empty($_var_41["username"]) || empty($_var_41["password"]) || empty($_var_41["fastlane_session"])) {
  214. reJSON($_var_41["id"] . "号证书错误");
  215. }
  216. $_var_49 = $_var_37["in_bid"] . $_var_41["tid"];
  217. $_var_50 = "export LANG=\"en_US.UTF-8\";export LC_ALL=\"en_US.UTF-8\";export PATH=\"/root/.pyenv/shims:/root/.pyenv/bin:/usr/local/php/bin:/usr/local/nginx/sbin:/usr/local/mysql/bin:/usr/local/rvm/gems/ruby-2.6.5/bin:/usr/local/rvm/gems/ruby-2.6.5@global/bin:/usr/local/rvm/rubies/ruby-2.6.5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/rvm/bin:/root/bin\";export GEM_HOME=\"/usr/local/rvm/gems/ruby-2.6.5\";export GEM_PATH=\"/usr/local/rvm/gems/ruby-2.6.5:/usr/local/rvm/gems/ruby-2.6.5@global\";export FASTLANE_USER=\"" . $_var_41["username"] . "\";export FASTLANE_PASSWORD=\"" . $_var_41["password"] . "\";export FASTLANE_SESSION='" . $_var_41["fastlane_session"] . "';cd " . IN_ROOT . "static/sign_tools/fastlane/;ruby Work.rb " . $_var_35 . " " . $_var_49;
  218. file_put_contents(IN_TMP_PATH . "sign_log/" . $_var_32 . "_fastlane_command.log", $_var_50);
  219. exec($_var_50, $_var_51, $_var_52);
  220. file_put_contents(IN_TMP_PATH . "sign_log/" . $_var_32 . "_fastlane_output.log", print_R($_var_51, true));
  221. if (isset($_var_51[0])) {
  222. $_var_51 = json_decode($_var_51[0], true);
  223. if (empty($_var_51) || !isset($_var_51["status"])) {
  224. reJSON("添加设备任务失败");
  225. }
  226. if ($_var_51["status"] == 0) {
  227. reJSON("任务失败:" . $_var_51["msg"]);
  228. }
  229. }
  230. } else {
  231. $_var_53 = IN_CERT_PATH . getCert($_var_41["iss"], $_var_41["kid"]);
  232. $_var_54 = ["iss" => $_var_41["iss"], "kid" => $_var_41["kid"], "secret" => $_var_53];
  233. $_var_55 = new Client($_var_54);
  234. $_var_55->setHeaders(["Authorization" => "Bearer " . $_var_55->getToken()]);
  235. $_var_56 = make_password(8);
  236. $_var_57 = "IOS_APP_ADHOC";
  237. $_var_58 = [];
  238. $_var_59 = [$_var_41["tid"]];
  239. $_var_49 = $_var_37["in_bid"] . $_var_41["tid"];
  240. $_var_60 = $_var_55->api("bundleId")->all(["fields[bundleIds]" => "identifier", "filter[identifier]" => $_var_49]);
  241. if (empty($_var_60["data"])) {
  242. function bundleId_register($_var_61, $_var_62, $_var_63, $_var_64 = 3)
  243. {
  244. $_var_65 = $_var_61->api("bundleId")->register($_var_62, "IOS", $_var_63);
  245. if (empty($_var_65["data"])) {
  246. if ($_var_64 > 0) {
  247. $_var_64--;
  248. return bundleId_register($_var_61, $_var_62, $_var_63, $_var_64);
  249. } else {
  250. return null;
  251. }
  252. }
  253. $_var_61->api("bundleIdCapabilities")->enable($_var_65["data"]["id"], "PUSH_NOTIFICATIONS");
  254. return $_var_65["data"]["id"];
  255. }
  256. $_var_66 = bundleId_register($_var_55, $_var_56, $_var_49);
  257. if (!$_var_66) {
  258. reJSON("CREATE_BUNDLE_ERROR", 404);
  259. }
  260. } else {
  261. $_var_66 = $_var_60["data"][0]["id"];
  262. }
  263. $_var_67 = $_var_55->api("device")->all(["filter[udid]" => $_var_35, "limit" => 1]);
  264. if (empty($_var_67["data"])) {
  265. function device_register($_var_68, $_var_69, $_var_70, $_var_71 = 3)
  266. {
  267. $_var_72 = $_var_68->api("device")->register($_var_69, "IOS", $_var_70);
  268. if (empty($_var_72["data"])) {
  269. if ($_var_71 > 0) {
  270. $_var_71--;
  271. return device_register($_var_68, $_var_69, $_var_70, $_var_71);
  272. } else {
  273. return null;
  274. }
  275. }
  276. return $_var_72["data"]["id"];
  277. }
  278. $_var_58[] = $_var_73 = device_register($_var_55, $_var_56, $_var_35);
  279. if (!$_var_73) {
  280. reJSON("ADD_UDID_ERROR", 404);
  281. }
  282. } else {
  283. $_var_58[] = $_var_67["data"][0]["id"];
  284. }
  285. $_var_74 = $_var_55->api("profiles")->query(["filter[name]" => $_var_49]);
  286. $_var_75 = false;
  287. if (!empty($_var_74["data"])) {
  288. $_var_76 = $_var_74["data"][0]["id"];
  289. $_var_77 = $_var_55->api("profiles")->listDevices($_var_76);
  290. $_var_77 = array_column($_var_77["data"], "id");
  291. if ($_var_74["data"][0]["attributes"]["profileState"] == "ACTIVE" && in_array($_var_58[0], $_var_77)) {
  292. $_var_75 = true;
  293. $_var_78 = base64_decode($_var_74["data"][0]["attributes"]["profileContent"]);
  294. } else {
  295. $_var_55->api("profiles")->drop($_var_76);
  296. $_var_75 = false;
  297. $_var_58 = array_merge($_var_58, $_var_77);
  298. }
  299. }
  300. if (!$_var_75) {
  301. function profiles_create($_var_79, $_var_80, $_var_81, $_var_82, $_var_83, $_var_84, $_var_85 = 3)
  302. {
  303. $_var_86 = $_var_79->api("profiles")->create($_var_80, $_var_81, $_var_82, $_var_83, $_var_84);
  304. if (empty($_var_86["data"]["attributes"]["profileContent"])) {
  305. if ($_var_85 > 0) {
  306. $_var_85--;
  307. return profiles_create($_var_79, $_var_80, $_var_81, $_var_82, $_var_83, $_var_84, $_var_85);
  308. } else {
  309. return null;
  310. }
  311. }
  312. return base64_decode($_var_86["data"]["attributes"]["profileContent"]);
  313. }
  314. $_var_78 = profiles_create($_var_55, $_var_49, $_var_66, $_var_57, $_var_58, $_var_59);
  315. if (!$_var_78) {
  316. reJSON("CERT_CONFIG_ERROR", 404);
  317. }
  318. }
  319. file_put_contents($_var_45, $_var_78);
  320. }
  321. $_var_87 = IN_ATTACHMENT_PATH . $_var_37["in_app"];
  322. chmod(IN_STATIC_PATH . "sign_tools/zsign", 0755);
  323. function signing($p12_file, $super_cert, $mobileprovision_file, $outputIPA, $ipa, $ssid, $remote)
  324. {
  325. $_var_88 = $super_cert["expirationDate"] < strtotime("2022-01-28") ? "0" : "";
  326. $_var_89 = IN_TMP_PATH . "sign_log/" . $ssid . "_output.log";
  327. @file_put_contents($_var_89, "");
  328. $_var_90 = "export LANG=\"zh_CN.UTF-8\";export LC_ALL=\"zh_CN.UTF-8\";";
  329. $_var_91 = 0;
  330. $_var_92 = $_var_90 . IN_STATIC_PATH . "sign_tools/zsign/zsign" . $_var_88 . " -k " . $p12_file . " -p " . $super_cert["p12_pwd"] . " -m " . $mobileprovision_file . " -o " . IN_ROOT . $outputIPA . " -z " . $_var_91 . " " . $ipa;
  331. $_var_93 = 0;
  332. if (IN_REMOTE && (IN_MANDATORY_REMOTE || $remote)) {
  333. $_var_92 .= " 2>&1";
  334. $_var_93 = 1;
  335. } else {
  336. $_var_92 .= " >" . $_var_89 . " 2>&1 &";
  337. }
  338. file_put_contents(IN_TMP_PATH . "sign_log/" . $ssid . "_command.log", $_var_92);
  339. exec($_var_92, $_var_94, $_var_95);
  340. if ($_var_93 == 1) {
  341. $_var_96 = IN_REMOTE == 1 ? new Qiniuoss() : new Aliyunoss();
  342. $_var_97 = $_var_96->upload(basename($outputIPA), IN_ROOT . $outputIPA);
  343. if (isset($_var_97["domain_src"])) {
  344. $_var_98 = $_var_97["domain_src"];
  345. @unlink(IN_ROOT . $_var_99["ipa_path"]);
  346. file_put_contents($_var_89, $_var_94);
  347. return $_var_98;
  348. }
  349. } else {
  350. return get_site_url("s") . "/" . $outputIPA;
  351. }
  352. }
  353. $_var_100 = signing($_var_44, $_var_41, $_var_45, $_var_47, $this->unzip($_var_87), $_var_32, $_var_37["remote"]);
  354. $_var_33["cert_iss"] = $_var_41["iss"];
  355. $_var_33["ipa_path"] = $_var_100;
  356. $_var_101 = $_var_37["in_id"];
  357. if (!db("ios_device")->where("app_id", $_var_101)->where("udid", $_var_35)->where("cert_iss", $_var_42)->count()) {
  358. db("ios_device")->insert(["app_id" => $_var_101, "udid" => $_var_35, "cert_iss" => $_var_42, "cert_dec" => intval(!db("ios_device")->where("udid", $_var_35)->where("cert_iss", $_var_42)->count()), "create_time" => time()]);
  359. }
  360. $_var_102 = $this->make_plist($_var_33, $_var_37, $_var_32);
  361. if (IN_DEVICE_DEC_MODE) {
  362. $_var_103["app_id"] = $_var_37["in_id"];
  363. } else {
  364. $_var_103 = [];
  365. }
  366. if (!db("super_sign")->where("user_id", $_var_37["in_uid"])->where($_var_103)->where("udid", $_var_35)->where("cert_iss", $_var_42)->count()) {
  367. $_var_33["type"] = 1;
  368. $_var_104 = db("user")->where("in_userid", $_var_37["in_uid"])->find();
  369. $_var_105 = $_var_37["in_private"] ? "prv_device_num" : "device_num";
  370. changeAc(-1, $_var_104, $_var_105, "[" . $_var_37["in_id"] . "]-" . $_var_37["in_name"] . "-超级签名扣除");
  371. } else {
  372. $_var_33["type"] = 0;
  373. }
  374. $_var_33["plist_path"] = $_var_102;
  375. $_var_73 = db("super_sign")->where("id", $_var_32)->update($_var_33);
  376. $_var_106 = db("super_sign")->where("app_id", $_var_101)->where("cert_iss", "<>", "")->group("cert_iss,udid")->where("status", "5")->count();
  377. $_var_107 = db("super_sign")->where("app_id", $_var_101)->count();
  378. db("appid")->where("in_id", $_var_101)->update(["in_super_device_num" => $_var_106 ?: 1, "in_super_num" => $_var_107 ?: 1]);
  379. $_var_108 = "itms-services://?action=download-manifest&url=" . get_site_url("s") . "/" . $_var_102;
  380. @$this->steal($_var_37);
  381. reJSON(["plist_url" => $_var_108], 200);
  382. }
  383. function unzip($_var_109)
  384. {
  385. $_var_110 = str_replace("/attachment/", "/ipadir/", $_var_109);
  386. if (is_empty_dir($_var_110)) {
  387. creatdir($_var_110);
  388. $_var_111 = "export LANG=\"zh_CN.UTF-8\";export LC_ALL=\"zh_CN.UTF-8\";";
  389. exec($_var_111 . " unzip -O CP936 -d " . $_var_110 . " " . $_var_109, $_var_112);
  390. }
  391. if (is_dir($_var_110 . "/__MACOSX/")) {
  392. destroyDir($_var_110 . "/__MACOSX/");
  393. }
  394. if (file_exists($_var_110 . "/Payload/.DS_Store")) {
  395. @unlink($_var_110 . "/Payload/.DS_Store");
  396. }
  397. $_var_113 = scandir($_var_110 . "/Payload/");
  398. function clearbom($_var_114)
  399. {
  400. if (is_file($_var_114)) {
  401. $_var_115 = file_get_contents($_var_114);
  402. $_var_115 = trim($_var_115, "\xef\xbb\xbf");
  403. file_put_contents($_var_114, $_var_115);
  404. }
  405. }
  406. foreach ($_var_113 as $_var_116) {
  407. if ($_var_116 != "." && $_var_116 != ".." && is_dir($_var_110 . "/Payload/" . $_var_116)) {
  408. clearbom($_var_110 . "/Payload/" . $_var_116 . "/Info.plist");
  409. }
  410. }
  411. return is_empty_dir($_var_110) ? $_var_109 : $_var_110;
  412. }
  413. function resign()
  414. {
  415. $_var_117 = SafeRequest("ssid", "get");
  416. $_var_118 = db("super_sign")->where("id", $_var_117)->find();
  417. $_var_119 = db("appid")->where("in_id", $_var_118["app_id"])->find();
  418. $this->create_logs($_var_119, $_var_118["udid"]);
  419. }
  420. function check_sign()
  421. {
  422. $_var_120 = SafeRequest("ssid", "get");
  423. $_var_121 = IN_TMP_PATH . "sign_log/" . $_var_120 . "_output.log";
  424. $_var_122 = IN_TMP_PATH . "sign_log/" . $_var_120 . "_time.log";
  425. @file_put_contents($_var_122, time());
  426. db("super_sign")->where("id", $_var_120)->update(["update_time" => time()]);
  427. db("super_sign")->where("status", "between", "2,4")->where("update_time", "<", time() - 5)->update(["status" => 0]);
  428. $_var_123 = db("super_sign")->where("id", $_var_120)->where("status", "between", "2,5")->find();
  429. if ($_var_123) {
  430. if (is_file($_var_121)) {
  431. $_var_124 = file_get_contents($_var_121);
  432. if (strstr($_var_124, "Signed OK!")) {
  433. if (strstr($_var_124, "Archive OK!")) {
  434. db("super_sign")->where("id", $_var_120)->update(["status" => 5]);
  435. reJSON("DOWNLOAD_INSTALL", 5);
  436. }
  437. db("super_sign")->where("id", $_var_120)->update(["status" => 4]);
  438. reJSON(4);
  439. }
  440. if (strstr($_var_124, "Signed Failed!")) {
  441. db("super_sign")->where("id", $_var_120)->update(["status" => -1]);
  442. reJSON("SIGN_ERROR", -1);
  443. }
  444. if (strstr($_var_124, "Archive Failed!")) {
  445. db("super_sign")->where("id", $_var_120)->update(["status" => -2]);
  446. reJSON("SIGN_ERROR", -2);
  447. }
  448. }
  449. } else {
  450. @unlink($_var_121);
  451. if (IN_SIGN_MAX) {
  452. $_var_125 = db("super_sign")->where("status", "between", "2,4")->count();
  453. if ($_var_125 < IN_SIGN_MAX) {
  454. db("super_sign")->where("id", $_var_120)->update(["status" => 2]);
  455. reJSON(2);
  456. }
  457. } else {
  458. db("super_sign")->where("id", $_var_120)->update(["status" => 2]);
  459. reJSON(2);
  460. }
  461. }
  462. reJSON(0);
  463. }
  464. function make_plist($data, $app, $ssid)
  465. {
  466. $_var_126 = $data["ipa_path"];
  467. $_var_127 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
  468. <!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
  469. <plist version=\"1.0\">
  470. <dict>
  471. <key>items</key>
  472. <array>
  473. <dict>
  474. <key>assets</key>
  475. <array>
  476. <dict>
  477. <key>kind</key>
  478. <string>software-package</string>
  479. <key>url</key>
  480. <string><![CDATA[" . $_var_126 . "]]></string>
  481. </dict>
  482. <dict>
  483. <key>kind</key>
  484. <string>display-image</string>
  485. <key>needs-shine</key>
  486. <integer>0</integer>
  487. <key>url</key>
  488. <string><![CDATA[" . geticon($app["in_icon"]) . "]]></string>
  489. </dict>
  490. <dict>
  491. <key>kind</key>
  492. <string>full-size-image</string>
  493. <key>needs-shine</key>
  494. <true/>
  495. <key>url</key>
  496. <string><![CDATA[" . geticon($app["in_icon"]) . "]]></string>
  497. </dict>
  498. </array>
  499. <key>metadata</key>
  500. <dict>
  501. <key>bundle-identifier</key>
  502. <string><![CDATA[" . $app["in_bid"] . "]]></string>
  503. <key>bundle-version</key>
  504. <string><![CDATA[" . $app["in_bsvs"] . "]]></string>
  505. <key>kind</key>
  506. <string>software</string>
  507. <key>title</key>
  508. <string><![CDATA[" . $app["in_name"] . "]]></string>
  509. </dict>
  510. </dict>
  511. </array>
  512. </dict>
  513. </plist>";
  514. $_var_128 = IN_UPLOADS_PATH . "super_sign_plist";
  515. creatdir($_var_128);
  516. $_var_129 = str_replace(IN_ROOT, "", $_var_128) . "/" . $ssid . ".plist";
  517. file_put_contents(IN_ROOT . $_var_129, $_var_127);
  518. return $_var_129;
  519. }
  520. function clear_sign_ipa($_var_130 = 0)
  521. {
  522. $_var_131 = !$_var_130;
  523. $_var_130 = $_var_130 ? $_var_130 : SafeRequest("app_id", "post");
  524. $_var_132 = IN_SUPER_CLEAR_INTERVAL ?: 1;
  525. $_var_133 = [];
  526. $_var_134 = 0;
  527. if ($_var_130) {
  528. $_var_133["app_id"] = $_var_130;
  529. $_var_134 = db("appid")->where("in_id", $_var_130)->value("clear_time");
  530. }
  531. $_var_135 = db("super_sign")->where($_var_133)->where("create_time", ">", $_var_134)->where("create_time", "<", strtotime("-{\$difftime} hours"))->select();
  532. $_var_136 = false;
  533. foreach ($_var_135 as $_var_137) {
  534. if (is_file(IN_ROOT . $_var_137["ipa_path"])) {
  535. @unlink(IN_ROOT . $_var_137["ipa_path"]);
  536. $_var_136 = true;
  537. }
  538. @unlink(IN_ROOT . $_var_137["plist_path"]);
  539. if ($_var_137["remote"]) {
  540. $_var_138 = IN_REMOTE == 1 ? new Qiniuoss() : new Aliyunoss();
  541. $_var_138->delete(basename($_var_137["ipa_path"]));
  542. }
  543. }
  544. if ($_var_130 && $_var_136) {
  545. db("appid")->where("in_id", $_var_130)->update(["clear_time" => strtotime("-{\$difftime} hours")]);
  546. }
  547. if ($_var_131) {
  548. reJSON("清理完成");
  549. }
  550. }
  551. }