where("in_id", $_var_0)->find(); if (!$_var_1) { exit("应用不存在!"); } $_var_2 = get_site_url("s") . "/index/super_sign/getudid?app_id=" . $_var_0; $_var_2 = get_site_url("s") . udid_mobileconfig($_var_2, $_var_1, $_var_0); redirect($_var_2); } function getudid() { $_var_3 = SafeRequest("app_id", "get"); $_var_4 = db("appid")->where("in_id", $_var_3)->find(); $_var_5 = file_get_contents("php://input"); $_var_6 = ""; $_var_8 = substr($_var_5, strpos($_var_5, $_var_6), strpos($_var_5, $_var_7) - strpos($_var_5, $_var_6)); $_var_9 = xml_parser_create(); $_var_10 = ""; $_var_11 = ""; $_var_12 = ""; $_var_13 = ""; $_var_14 = ""; $_var_15 = 0; $_var_16 = array(); $_var_5 = ""; xml_parse_into_struct($_var_9, $_var_8, $_var_17); xml_parser_free($_var_9); foreach ($_var_17 as $_var_18) { if ($_var_18["level"] == 3 && $_var_18["type"] == "complete") { $_var_16[] = $_var_18; } } $_var_5 = []; foreach ($_var_16 as $_var_19) { switch ($_var_19["value"]) { case "CHALLENGE": $_var_11 = $_var_16[$_var_15 + 1]["value"]; $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"]; break; case "DEVICE_NAME": $_var_12 = $_var_16[$_var_15 + 1]["value"]; $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"]; break; case "PRODUCT": $_var_13 = $_var_16[$_var_15 + 1]["value"]; $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"]; break; case "UDID": $_var_10 = $_var_16[$_var_15 + 1]["value"]; $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"]; break; case "VERSION": $_var_14 = $_var_16[$_var_15 + 1]["value"]; $_var_5[strtolower($_var_19["value"])] = $_var_16[$_var_15 + 1]["value"]; break; } $_var_15++; } $_var_20 = $_COOKIE["udid"] ?? $_SESSION["udid"] ?? ""; if ($_var_20 && $_var_20 != $_var_10) { return redirect(); } setcookie("udid", $_var_10, time() + 2592000); $_SESSION["udid"] = $_var_10; $_var_5["content"] = json_encode($_var_5); $_var_5["product"] = $_var_13; $_var_5["version"] = $_var_14; if (db("ios_device")->where("udid", $_var_10)->count()) { db("ios_device")->where("udid", $_var_10)->update($_var_5); } $this->create_logs($_var_4, $_var_10); } function create_logs($appData, $UDID) { $_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(); if ($_var_21) { $_var_22 = $_var_21["id"]; db("super_sign")->where("udid", $UDID)->update(["plist_path" => "", "ipa_path" => ""]); } else { $_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()]; $_var_22 = db("super_sign")->insertGetId($_var_23); } redirect("http://" . (IN_TZDOMAIN ?: $_SERVER["HTTP_HOST"]) . "/" . $appData["in_link"] . "?ssid=" . $_var_22, 301); } function updateCert($map = []) { $_var_24 = db("super_cert")->where($map); if (isset($map["iss"])) { $_var_24 = $_var_24->find(); if (!$_var_24 || $_var_24["status"] == -1) { unset($map["iss"]); return $this->updateCert($map); } } else { $_var_25 = IN_CERT_KEEP && is_numeric(IN_CERT_KEEP) ? IN_CERT_KEEP : 0; $_var_24 = $_var_24->where("status > 0")->where("limit_count", ">", $_var_25)->orderRand()->find(); } if ($_var_24) { if ($_var_24["type"]) { return $_var_24; } certMoveToNew($_var_24); $_var_26 = IN_CERT_PATH . getCert($_var_24["iss"], $_var_24["kid"]); if ($_var_26 && is_file($_var_26)) { $_var_27 = ["iss" => $_var_24["iss"], "kid" => $_var_24["kid"], "secret" => $_var_26]; $_var_28 = new Client($_var_27); $_var_28->setHeaders(["Authorization" => "Bearer " . $_var_28->getToken()]); $_var_29 = $_var_28->api("device")->all(["filter[platform]" => "IOS"]); if (isset($_var_29["errors"][0]["status"]) && ($_var_29["errors"][0]["status"] == 403 || $_var_29["errors"][0]["status"] == 401)) { if ($_var_24["status"] == 401) { db("super_cert")->where("id", $_var_24["id"])->update(["status" => -1, "mark" => $_var_24["mark"] . date("Y-m-d H:i:s") . "被封"]); if (isset($map["iss"])) { unset($map["iss"]); } } else { db("super_cert")->where("id", $_var_24["id"])->update(["status" => $_var_29["errors"][0]["status"]]); } return $this->updateCert($map); } else { if (isset($_var_29["meta"]["paging"]["total"])) { $_var_30 = $_var_29["meta"]["paging"]["total"] > 100 ? 100 : $_var_29["meta"]["paging"]["total"]; $_var_31 = 100 - $_var_30; db("super_cert")->where("id", $_var_24["id"])->update(["limit_count" => $_var_31, "total_count" => $_var_30, "status" => "1"]); return $_var_24; } } } else { db("super_cert")->where("id", $_var_24["id"])->update(["status" => 0]); if (isset($map["iss"])) { unset($map["iss"]); } return $this->updateCert($map); } } return null; } function dosign() { header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("Content-type: text/html;charset=" . IN_CHARSET); $_var_32 = SafeRequest("ssid", "get"); if (!$_var_32) { reJSON("PLATFORM_NOT_MATCHING", 404); } $_var_33 = db("super_sign")->where("id", $_var_32)->find(); if (!$_var_33) { reJSON("PLATFORM_NOT_MATCHING", 404); } db("super_sign")->where("id", $_var_32)->update(["status" => "3"]); $_var_34 = IN_TMP_PATH . "sign_log/" . $_var_32 . "_output.log"; @file_put_contents($_var_34, ""); $_var_35 = $_var_33["udid"]; $_var_36 = SafeRequest("appid", "get") ?: $_var_33["app_id"]; if (!$_var_36) { reJSON("APP_EXPIRED", 404); } $_var_37 = db("appid")->where("in_id", $_var_36)->find(); if (!$_var_37) { reJSON("APP_EXPIRED", 404); } $_var_38 = db("user")->where("in_userid", $_var_37["in_uid"])->value(($_var_37["in_private"] ? "prv_" : "") . "device_num"); if ($_var_38 < 1) { reJSON("APP_DOWNLOAD_TIMES_OVER", 404); } if ($_var_37["in_private"] && !db("super_cert")->where("user_id", $_var_37["in_uid"])->where("status", "<>", "-1")->count()) { reJSON("NOTCERT", 404); } $this->clear_sign_ipa($_var_36); $_var_39 = []; $_var_40 = db("ios_device")->where("udid", $_var_35)->order("id desc")->value("cert_iss"); if ($_var_40) { $_var_39["iss"] = $_var_40; } if ($_var_37["in_private"]) { $_var_39["user_id"] = $_var_37["in_uid"]; } else { $_var_39["user_id"] = 0; } $_var_41 = $this->updateCert($_var_39); if (!$_var_41 || $_var_41["type"] == 0 && !is_file(IN_CERT_PATH . getCert($_var_41["iss"], $_var_41["kid"]))) { reJSON("NOTCERT", 404); } $_var_42 = $_var_41["iss"]; $_var_43 = SafeRequest("authcode", "get") ?: db("super_code")->where("udid", $_var_35)->where("app_id", $_var_37["in_id"])->value("code"); if ($_var_43) { db("super_code")->where("code", $_var_43)->update(["cert_iss" => $_var_42]); } $_var_44 = IN_CERT_PATH . getCert($_var_41["iss"], $_var_41["kid"], "p12"); $_var_45 = IN_UPLOADS_PATH . "ios_mobileprovision/" . $_var_41["id"] . "_" . $_var_36 . ".mobileprovision"; creatdir(IN_UPLOADS_PATH . "ios_mobileprovision/"); $_var_46 = $_var_32 . "_" . $_var_37["in_app"]; creatdir(IN_UPLOADS_PATH . "super_sign_ipa"); $_var_47 = str_replace(IN_ROOT, "", IN_UPLOADS_PATH) . "super_sign_ipa/" . $_var_46; $_var_48 = IN_ROOT . $_var_47; if (is_file($_var_48)) { @unlink($_var_48); } creatdir(IN_TMP_PATH . "sign_log"); if ($_var_41["type"]) { if (empty($_var_41["username"]) || empty($_var_41["password"]) || empty($_var_41["fastlane_session"])) { reJSON($_var_41["id"] . "号证书错误"); } $_var_49 = $_var_37["in_bid"] . $_var_41["tid"]; $_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; file_put_contents(IN_TMP_PATH . "sign_log/" . $_var_32 . "_fastlane_command.log", $_var_50); exec($_var_50, $_var_51, $_var_52); file_put_contents(IN_TMP_PATH . "sign_log/" . $_var_32 . "_fastlane_output.log", print_R($_var_51, true)); if (isset($_var_51[0])) { $_var_51 = json_decode($_var_51[0], true); if (empty($_var_51) || !isset($_var_51["status"])) { reJSON("添加设备任务失败"); } if ($_var_51["status"] == 0) { reJSON("任务失败:" . $_var_51["msg"]); } } } else { $_var_53 = IN_CERT_PATH . getCert($_var_41["iss"], $_var_41["kid"]); $_var_54 = ["iss" => $_var_41["iss"], "kid" => $_var_41["kid"], "secret" => $_var_53]; $_var_55 = new Client($_var_54); $_var_55->setHeaders(["Authorization" => "Bearer " . $_var_55->getToken()]); $_var_56 = make_password(8); $_var_57 = "IOS_APP_ADHOC"; $_var_58 = []; $_var_59 = [$_var_41["tid"]]; $_var_49 = $_var_37["in_bid"] . $_var_41["tid"]; $_var_60 = $_var_55->api("bundleId")->all(["fields[bundleIds]" => "identifier", "filter[identifier]" => $_var_49]); if (empty($_var_60["data"])) { function bundleId_register($_var_61, $_var_62, $_var_63, $_var_64 = 3) { $_var_65 = $_var_61->api("bundleId")->register($_var_62, "IOS", $_var_63); if (empty($_var_65["data"])) { if ($_var_64 > 0) { $_var_64--; return bundleId_register($_var_61, $_var_62, $_var_63, $_var_64); } else { return null; } } $_var_61->api("bundleIdCapabilities")->enable($_var_65["data"]["id"], "PUSH_NOTIFICATIONS"); return $_var_65["data"]["id"]; } $_var_66 = bundleId_register($_var_55, $_var_56, $_var_49); if (!$_var_66) { reJSON("CREATE_BUNDLE_ERROR", 404); } } else { $_var_66 = $_var_60["data"][0]["id"]; } $_var_67 = $_var_55->api("device")->all(["filter[udid]" => $_var_35, "limit" => 1]); if (empty($_var_67["data"])) { function device_register($_var_68, $_var_69, $_var_70, $_var_71 = 3) { $_var_72 = $_var_68->api("device")->register($_var_69, "IOS", $_var_70); if (empty($_var_72["data"])) { if ($_var_71 > 0) { $_var_71--; return device_register($_var_68, $_var_69, $_var_70, $_var_71); } else { return null; } } return $_var_72["data"]["id"]; } $_var_58[] = $_var_73 = device_register($_var_55, $_var_56, $_var_35); if (!$_var_73) { reJSON("ADD_UDID_ERROR", 404); } } else { $_var_58[] = $_var_67["data"][0]["id"]; } $_var_74 = $_var_55->api("profiles")->query(["filter[name]" => $_var_49]); $_var_75 = false; if (!empty($_var_74["data"])) { $_var_76 = $_var_74["data"][0]["id"]; $_var_77 = $_var_55->api("profiles")->listDevices($_var_76); $_var_77 = array_column($_var_77["data"], "id"); if ($_var_74["data"][0]["attributes"]["profileState"] == "ACTIVE" && in_array($_var_58[0], $_var_77)) { $_var_75 = true; $_var_78 = base64_decode($_var_74["data"][0]["attributes"]["profileContent"]); } else { $_var_55->api("profiles")->drop($_var_76); $_var_75 = false; $_var_58 = array_merge($_var_58, $_var_77); } } if (!$_var_75) { function profiles_create($_var_79, $_var_80, $_var_81, $_var_82, $_var_83, $_var_84, $_var_85 = 3) { $_var_86 = $_var_79->api("profiles")->create($_var_80, $_var_81, $_var_82, $_var_83, $_var_84); if (empty($_var_86["data"]["attributes"]["profileContent"])) { if ($_var_85 > 0) { $_var_85--; return profiles_create($_var_79, $_var_80, $_var_81, $_var_82, $_var_83, $_var_84, $_var_85); } else { return null; } } return base64_decode($_var_86["data"]["attributes"]["profileContent"]); } $_var_78 = profiles_create($_var_55, $_var_49, $_var_66, $_var_57, $_var_58, $_var_59); if (!$_var_78) { reJSON("CERT_CONFIG_ERROR", 404); } } file_put_contents($_var_45, $_var_78); } $_var_87 = IN_ATTACHMENT_PATH . $_var_37["in_app"]; chmod(IN_STATIC_PATH . "sign_tools/zsign", 0755); function signing($p12_file, $super_cert, $mobileprovision_file, $outputIPA, $ipa, $ssid, $remote) { $_var_88 = $super_cert["expirationDate"] < strtotime("2022-01-28") ? "0" : ""; $_var_89 = IN_TMP_PATH . "sign_log/" . $ssid . "_output.log"; @file_put_contents($_var_89, ""); $_var_90 = "export LANG=\"zh_CN.UTF-8\";export LC_ALL=\"zh_CN.UTF-8\";"; $_var_91 = 0; $_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; $_var_93 = 0; if (IN_REMOTE && (IN_MANDATORY_REMOTE || $remote)) { $_var_92 .= " 2>&1"; $_var_93 = 1; } else { $_var_92 .= " >" . $_var_89 . " 2>&1 &"; } file_put_contents(IN_TMP_PATH . "sign_log/" . $ssid . "_command.log", $_var_92); exec($_var_92, $_var_94, $_var_95); if ($_var_93 == 1) { $_var_96 = IN_REMOTE == 1 ? new Qiniuoss() : new Aliyunoss(); $_var_97 = $_var_96->upload(basename($outputIPA), IN_ROOT . $outputIPA); if (isset($_var_97["domain_src"])) { $_var_98 = $_var_97["domain_src"]; @unlink(IN_ROOT . $_var_99["ipa_path"]); file_put_contents($_var_89, $_var_94); return $_var_98; } } else { return get_site_url("s") . "/" . $outputIPA; } } $_var_100 = signing($_var_44, $_var_41, $_var_45, $_var_47, $this->unzip($_var_87), $_var_32, $_var_37["remote"]); $_var_33["cert_iss"] = $_var_41["iss"]; $_var_33["ipa_path"] = $_var_100; $_var_101 = $_var_37["in_id"]; if (!db("ios_device")->where("app_id", $_var_101)->where("udid", $_var_35)->where("cert_iss", $_var_42)->count()) { 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()]); } $_var_102 = $this->make_plist($_var_33, $_var_37, $_var_32); if (IN_DEVICE_DEC_MODE) { $_var_103["app_id"] = $_var_37["in_id"]; } else { $_var_103 = []; } if (!db("super_sign")->where("user_id", $_var_37["in_uid"])->where($_var_103)->where("udid", $_var_35)->where("cert_iss", $_var_42)->count()) { $_var_33["type"] = 1; $_var_104 = db("user")->where("in_userid", $_var_37["in_uid"])->find(); $_var_105 = $_var_37["in_private"] ? "prv_device_num" : "device_num"; changeAc(-1, $_var_104, $_var_105, "[" . $_var_37["in_id"] . "]-" . $_var_37["in_name"] . "-超级签名扣除"); } else { $_var_33["type"] = 0; } $_var_33["plist_path"] = $_var_102; $_var_73 = db("super_sign")->where("id", $_var_32)->update($_var_33); $_var_106 = db("super_sign")->where("app_id", $_var_101)->where("cert_iss", "<>", "")->group("cert_iss,udid")->where("status", "5")->count(); $_var_107 = db("super_sign")->where("app_id", $_var_101)->count(); db("appid")->where("in_id", $_var_101)->update(["in_super_device_num" => $_var_106 ?: 1, "in_super_num" => $_var_107 ?: 1]); $_var_108 = "itms-services://?action=download-manifest&url=" . get_site_url("s") . "/" . $_var_102; @$this->steal($_var_37); reJSON(["plist_url" => $_var_108], 200); } function unzip($_var_109) { $_var_110 = str_replace("/attachment/", "/ipadir/", $_var_109); if (is_empty_dir($_var_110)) { creatdir($_var_110); $_var_111 = "export LANG=\"zh_CN.UTF-8\";export LC_ALL=\"zh_CN.UTF-8\";"; exec($_var_111 . " unzip -O CP936 -d " . $_var_110 . " " . $_var_109, $_var_112); } if (is_dir($_var_110 . "/__MACOSX/")) { destroyDir($_var_110 . "/__MACOSX/"); } if (file_exists($_var_110 . "/Payload/.DS_Store")) { @unlink($_var_110 . "/Payload/.DS_Store"); } $_var_113 = scandir($_var_110 . "/Payload/"); function clearbom($_var_114) { if (is_file($_var_114)) { $_var_115 = file_get_contents($_var_114); $_var_115 = trim($_var_115, "\xef\xbb\xbf"); file_put_contents($_var_114, $_var_115); } } foreach ($_var_113 as $_var_116) { if ($_var_116 != "." && $_var_116 != ".." && is_dir($_var_110 . "/Payload/" . $_var_116)) { clearbom($_var_110 . "/Payload/" . $_var_116 . "/Info.plist"); } } return is_empty_dir($_var_110) ? $_var_109 : $_var_110; } function resign() { $_var_117 = SafeRequest("ssid", "get"); $_var_118 = db("super_sign")->where("id", $_var_117)->find(); $_var_119 = db("appid")->where("in_id", $_var_118["app_id"])->find(); $this->create_logs($_var_119, $_var_118["udid"]); } function check_sign() { $_var_120 = SafeRequest("ssid", "get"); $_var_121 = IN_TMP_PATH . "sign_log/" . $_var_120 . "_output.log"; $_var_122 = IN_TMP_PATH . "sign_log/" . $_var_120 . "_time.log"; @file_put_contents($_var_122, time()); db("super_sign")->where("id", $_var_120)->update(["update_time" => time()]); db("super_sign")->where("status", "between", "2,4")->where("update_time", "<", time() - 5)->update(["status" => 0]); $_var_123 = db("super_sign")->where("id", $_var_120)->where("status", "between", "2,5")->find(); if ($_var_123) { if (is_file($_var_121)) { $_var_124 = file_get_contents($_var_121); if (strstr($_var_124, "Signed OK!")) { if (strstr($_var_124, "Archive OK!")) { db("super_sign")->where("id", $_var_120)->update(["status" => 5]); reJSON("DOWNLOAD_INSTALL", 5); } db("super_sign")->where("id", $_var_120)->update(["status" => 4]); reJSON(4); } if (strstr($_var_124, "Signed Failed!")) { db("super_sign")->where("id", $_var_120)->update(["status" => -1]); reJSON("SIGN_ERROR", -1); } if (strstr($_var_124, "Archive Failed!")) { db("super_sign")->where("id", $_var_120)->update(["status" => -2]); reJSON("SIGN_ERROR", -2); } } } else { @unlink($_var_121); if (IN_SIGN_MAX) { $_var_125 = db("super_sign")->where("status", "between", "2,4")->count(); if ($_var_125 < IN_SIGN_MAX) { db("super_sign")->where("id", $_var_120)->update(["status" => 2]); reJSON(2); } } else { db("super_sign")->where("id", $_var_120)->update(["status" => 2]); reJSON(2); } } reJSON(0); } function make_plist($data, $app, $ssid) { $_var_126 = $data["ipa_path"]; $_var_127 = " items assets kind software-package url kind display-image needs-shine 0 url kind full-size-image needs-shine url metadata bundle-identifier bundle-version kind software title "; $_var_128 = IN_UPLOADS_PATH . "super_sign_plist"; creatdir($_var_128); $_var_129 = str_replace(IN_ROOT, "", $_var_128) . "/" . $ssid . ".plist"; file_put_contents(IN_ROOT . $_var_129, $_var_127); return $_var_129; } function clear_sign_ipa($_var_130 = 0) { $_var_131 = !$_var_130; $_var_130 = $_var_130 ? $_var_130 : SafeRequest("app_id", "post"); $_var_132 = IN_SUPER_CLEAR_INTERVAL ?: 1; $_var_133 = []; $_var_134 = 0; if ($_var_130) { $_var_133["app_id"] = $_var_130; $_var_134 = db("appid")->where("in_id", $_var_130)->value("clear_time"); } $_var_135 = db("super_sign")->where($_var_133)->where("create_time", ">", $_var_134)->where("create_time", "<", strtotime("-{\$difftime} hours"))->select(); $_var_136 = false; foreach ($_var_135 as $_var_137) { if (is_file(IN_ROOT . $_var_137["ipa_path"])) { @unlink(IN_ROOT . $_var_137["ipa_path"]); $_var_136 = true; } @unlink(IN_ROOT . $_var_137["plist_path"]); if ($_var_137["remote"]) { $_var_138 = IN_REMOTE == 1 ? new Qiniuoss() : new Aliyunoss(); $_var_138->delete(basename($_var_137["ipa_path"])); } } if ($_var_130 && $_var_136) { db("appid")->where("in_id", $_var_130)->update(["clear_time" => strtotime("-{\$difftime} hours")]); } if ($_var_131) { reJSON("清理完成"); } } }