admin.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. <?php
  2. // by 请勿倒卖,已申请软著,否则追究法律责任
  3. namespace app\upload;
  4. use CFPropertyList\CFPropertyList;
  5. use PclZip;
  6. use PngFile\PngFile;
  7. class admin
  8. {
  9. function apk()
  10. {
  11. include "deapk/examples/autoload.php";
  12. error_reporting(0);
  13. if (empty($_COOKIE["in_adminid"]) || empty($_COOKIE["in_adminname"]) || empty($_COOKIE["in_adminpassword"]) || empty($_COOKIE["in_permission"]) || empty($_COOKIE["in_adminexpire"]) || !db("admin")->where("in_adminid", intval($_COOKIE["in_adminid"]))->value("in_adminid") || md5(db("admin")->where("in_adminid", intval($_COOKIE["in_adminid"]))->value("in_adminpassword")) !== $_COOKIE["in_adminpassword"]) {
  14. exit("-1");
  15. }
  16. $time = $_GET["time"];
  17. $xml_size = $_GET["size"];
  18. $tmp = IN_TMP_PATH . $time . ".apk";
  19. $explode = explode("_", $time);
  20. $icontime = md5($explode[0] . "_" . $explode[1] . "_" . rand(2, pow(2, 24))) . ".png";
  21. $apptime = md5($explode[1] . "_" . $explode[0] . "_" . rand(2, pow(2, 24))) . ".apk";
  22. $apk = new \ApkParser\Parser($tmp);
  23. $xml_mnvs = $apk->getManifest()->getMinSdkLevel();
  24. $xml_bid = $apk->getManifest()->getPackageName();
  25. $xml_bsvs = $apk->getManifest()->getVersionName();
  26. $xml_bvs = $apk->getManifest()->getVersionCode();
  27. $labelResourceId = $apk->getManifest()->getApplication()->getLabel();
  28. $appLabel = $apk->getResources($labelResourceId);
  29. $xml_name = detect_encoding($appLabel[0]);
  30. $resourceId = $apk->getManifest()->getApplication()->getIcon();
  31. $resources = $apk->getResources($resourceId);
  32. foreach ($resources as $resource) {
  33. fwrite(fopen(IN_ATTACHMENT_PATH . $icontime, "w"), stream_get_contents($apk->getStream($resource)));
  34. }
  35. $function = PHP_OS == "Linux" ? "rename" : "copy";
  36. $function($tmp, IN_ATTACHMENT_PATH . $apptime);
  37. echo "{'name':'" . $xml_name . "','mnvs':'" . $xml_mnvs . "','bid':'" . $xml_bid . "','bsvs':'" . $xml_bsvs . "','bvs':'" . $xml_bvs . "','form':'Android','nick':'*','type':'0','team':'*','icon':'" . $icontime . "','app':'" . $apptime . "','size':'" . $xml_size . "'}";
  38. }
  39. function ipa()
  40. {
  41. require_once "depng/pngCompote.php";
  42. require_once "deplist/CFPropertyList.php";
  43. error_reporting(0);
  44. if (empty($_COOKIE["in_adminid"]) || empty($_COOKIE["in_adminname"]) || empty($_COOKIE["in_adminpassword"]) || empty($_COOKIE["in_permission"]) || empty($_COOKIE["in_adminexpire"]) || !db("admin")->where("in_adminid", intval($_COOKIE["in_adminid"]))->value("in_adminid") || md5(db("admin")->where("in_adminid", intval($_COOKIE["in_adminid"]))->value("in_adminpassword")) !== $_COOKIE["in_adminpassword"]) {
  45. exit("-1");
  46. }
  47. $time = $_GET["time"];
  48. $tmp = IN_TMP_PATH . $time . ".ipa";
  49. $explode = explode("_", $time);
  50. $icontime = md5($explode[0] . "_" . $explode[1] . "_" . rand(2, pow(2, 24))) . ".png";
  51. $apptime = md5($explode[1] . "_" . $explode[0] . "_" . rand(2, pow(2, 24))) . ".ipa";
  52. $dir = IN_TMP_PATH . $time . "/Payload";
  53. if (is_dir($dir)) {
  54. rename($tmp, IN_ATTACHMENT_PATH . $apptime);
  55. $d = NULL;
  56. $h = opendir($dir);
  57. while ($f = readdir($h)) {
  58. if ($f != "." && $f != ".." && is_dir($dir . "/" . $f)) {
  59. $d = $dir . "/" . $f;
  60. }
  61. }
  62. closedir($h);
  63. $info = file_get_contents($d . "/Info.plist");
  64. $plist = new CFPropertyList();
  65. $plist->parse($info);
  66. $plist = $plist->toArray();
  67. $xml_size = $_GET["size"];
  68. $xml_name = detect_encoding(isset($plist["CFBundleDisplayName"]) ? $plist["CFBundleDisplayName"] : $plist["CFBundleName"]);
  69. $xml_mnvs = $plist["MinimumOSVersion"];
  70. $xml_bid = $plist["CFBundleIdentifier"];
  71. $xml_bsvs = $plist["CFBundleShortVersionString"];
  72. $xml_bvs = $plist["CFBundleVersion"];
  73. $newfile = IN_ATTACHMENT_PATH . $icontime;
  74. $icon = $plist["CFBundleIcons"]["CFBundlePrimaryIcon"]["CFBundleIconFiles"];
  75. if (!$icon) {
  76. $icon = $plist["CFBundleIconFiles"];
  77. if (!$icon) {
  78. $icon = $plist["CFBundleIconFiles~ipad"];
  79. }
  80. }
  81. if (preg_match("/\\./", $icon[0])) {
  82. $cvt = is_file($d . "/" . $icon[0]) ? "trim" : "strtolower";
  83. for ($i = 0; $i < count($icon); $i++) {
  84. if (is_file($d . "/" . $cvt($icon[$i]))) {
  85. $big[] = filesize($d . "/" . $cvt($icon[$i]));
  86. $small[] = filesize($d . "/" . $cvt($icon[$i]));
  87. }
  88. }
  89. rsort($big);
  90. sort($small);
  91. for ($p = 0; $p < count($icon); $p++) {
  92. if ($big[0] == filesize($d . "/" . $cvt($icon[$p]))) {
  93. $bigfile = $d . "/" . $cvt($icon[$p]);
  94. }
  95. if ($small[0] == filesize($d . "/" . $cvt($icon[$p]))) {
  96. $smallfile = $d . "/" . $cvt($icon[$p]);
  97. }
  98. }
  99. } else {
  100. $ext = is_file($d . "/" . $icon[0] . ".png") ? ".png" : "@2x.png";
  101. for ($i = 0; $i < count($icon); $i++) {
  102. if (is_file($d . "/" . $icon[$i] . $ext)) {
  103. $big[] = filesize($d . "/" . $icon[$i] . $ext);
  104. $small[] = filesize($d . "/" . $icon[$i] . $ext);
  105. }
  106. }
  107. rsort($big);
  108. sort($small);
  109. for ($p = 0; $p < count($icon); $p++) {
  110. if ($big[0] == filesize($d . "/" . $icon[$p] . $ext)) {
  111. $bigfile = is_file($d . "/" . $icon[$p] . "@3x.png") ? $d . "/" . $icon[$p] . "@3x.png" : $d . "/" . $icon[$p] . $ext;
  112. }
  113. if ($small[0] == filesize($d . "/" . $icon[$p] . $ext)) {
  114. $smallfile = preg_match("/AppIcon20x20/", $icon[$p]) ? $d . "/" . $icon[$p] . "@3x.png" : $d . "/" . $icon[$p] . $ext;
  115. }
  116. }
  117. }
  118. $png = new PngFile($smallfile);
  119. if (!$png->revertIphone($newfile)) {
  120. if (!rename($bigfile, $newfile)) {
  121. if ($plist["CFBundleIconFile"]) {
  122. if (preg_match("/\\./", $plist["CFBundleIconFile"])) {
  123. rename($d . "/" . $plist["CFBundleIconFile"], $newfile);
  124. } else {
  125. rename($d . "/" . $plist["CFBundleIconFile"] . ".png", $newfile);
  126. }
  127. } else {
  128. copy(IN_ROOT . "static/index/image/iOS.png", $newfile);
  129. }
  130. }
  131. }
  132. $em = file_get_contents($d . "/embedded.mobileprovision");
  133. rename($d . "/embedded.mobileprovision", str_replace(".png", ".mobileprovision", $newfile));
  134. $xml_nick = preg_match("/<key>Name<\\/key>\r\n([\\s\\S]+?)<string>([\\s\\S]+?)<\\/string>/", $em, $m) ? mb_convert_encoding($m[2], set_chars(), "HTML-ENTITIES") : "*";
  135. $xml_type = preg_match("/^iOS Team Provisioning Profile:/", $xml_nick) ? 0 : 1;
  136. $xml_team = preg_match("/<key>TeamName<\\/key>\r\n([\\s\\S]+?)<string>([\\s\\S]+?)<\\/string>/", $em, $m) ? mb_convert_encoding($m[2], set_chars(), "HTML-ENTITIES") : "*";
  137. echo "{'name':'" . $xml_name . "','mnvs':'" . $xml_mnvs . "','bid':'" . $xml_bid . "','bsvs':'" . $xml_bsvs . "','bvs':'" . $xml_bvs . "','form':'iOS','nick':'" . $xml_nick . "','type':'" . $xml_type . "','team':'" . $xml_team . "','icon':'" . $icontime . "','app':'" . $apptime . "','size':'" . $xml_size . "'}";
  138. }
  139. }
  140. function open()
  141. {
  142. if (!isAdminLogin()) {
  143. exit(iframe_message("请先登录管理中心!"));
  144. }
  145. ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  146. <html lang="">
  147. <head>
  148. <meta http-equiv="Content-Type" content="text/html; charset=<?php echo IN_CHARSET;?>" />
  149. <title>上传应用</title>
  150. <link href="<?php echo IN_PATH;?>static/pack/upload/uploadify.css" rel="stylesheet" type="text/css" />
  151. <script src="<?php echo IN_PATH;?>static/pack/layer/jquery.js"></script>
  152. <script src="<?php echo IN_PATH;?>static/pack/upload/uploadify.js"></script>
  153. <script>
  154. var in_php = '/upload/admin/uplog';
  155. var in_post = '<?php echo $_COOKIE["in_adminid"];?>_<?php echo time();?>';
  156. var in_size = <?php echo intval(ini_get("upload_max_filesize"));?>;
  157. function return_response(response){
  158. if (response == -1) {
  159. $(".uploadifySuccess").hide();
  160. $(".uploadifyError").show().text("文件不规范,请重新选择!");
  161. } else {
  162. ReturnValue(eval('(' + response + ')'));
  163. }
  164. }
  165. function ReturnValue(response){
  166. $("#fileQueue").html('<div class="uploadifyQueueItem">正在解析应用,请稍等...</div>');
  167. var xhr = new XMLHttpRequest();
  168. xhr.onreadystatechange = function() {
  169. processAJAX();
  170. };
  171. xhr.open("GET", "<?php echo IN_PATH;?>source/pack/upload/admin-" + response.extension + ".php?time=" + response.time + "&size=" + response.size, true);
  172. xhr.send(null);
  173. function processAJAX() {
  174. if (xhr.readyState == 4) {
  175. if (xhr.status == 200) {
  176. if (xhr.responseText == -1) {
  177. $("#fileQueue").html('<div class="uploadifyQueueItem">Access denied</div>');
  178. return false;
  179. }
  180. var data = eval('(' + xhr.responseText + ')');
  181. parent.$("#in_name").val(data.name);
  182. parent.$("#in_mnvs").val(data.mnvs);
  183. parent.$("#in_bid").val(data.bid);
  184. parent.$("#in_bsvs").val(data.bsvs);
  185. parent.$("#in_bvs").val(data.bvs);
  186. parent.$("#in_form").val(data.form);
  187. parent.$("#in_nick").val(data.nick);
  188. parent.$("#in_type").val(data.type);
  189. parent.$("#in_team").val(data.team);
  190. parent.$("#in_icon").val(data.icon);
  191. parent.$("#in_app").val(data.app);
  192. parent.$("#in_size").val(data.size);
  193. parent.$("#btnsave").click();
  194. }
  195. }
  196. }
  197. }
  198. </script>
  199. </head>
  200. <body>
  201. <div id="fileQueue">
  202. <div class="uploadifyQueueItem uploadifySuccess" style="display:none">
  203. <div class="cancel">
  204. <a href="javascript:cancle()"><img src="<?php echo IN_PATH;?>static/pack/upload/cancel.png" border="0"></a>
  205. </div>
  206. <span class="fileName"></span><span class="percentage"></span>
  207. <div class="uploadifyProgress">
  208. <div class="uploadifyProgressBar"></div>
  209. </div>
  210. </div>
  211. <div class="uploadifyQueueItem uploadifyError" style="display:none"></div>
  212. </div>
  213. <input type="file" id="uploadify" onchange="uploadify()" style="display:none">
  214. <img src="<?php echo IN_PATH;?>static/pack/upload/up.png" style="cursor:pointer" onclick="$('#uploadify').click()">
  215. </body>
  216. </html><?php
  217. }
  218. function open_icon()
  219. {
  220. if (!isAdminLogin()) {
  221. exit(iframe_message("请先登录管理中心!"));
  222. }
  223. $_var_0 = SafeRequest("id", "get");
  224. ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  225. <html lang="">
  226. <meta http-equiv="Content-Type" content="text/html; charset=<?php echo IN_CHARSET;?>" />
  227. <title>上传图标</title>
  228. <link href="<?php echo IN_PATH;?>static/pack/upload/uploadify.css" rel="stylesheet" type="text/css" />
  229. <script src="<?php echo IN_PATH;?>static/pack/layer/jquery.js"></script>
  230. <script src="<?php echo IN_PATH;?>static/pack/upload/uploadify.js"></script>
  231. <script>
  232. var in_php = '/upload/admin/up_icon';
  233. var in_post = '{"_id":"<?php echo $_GET["id"];?>","_aid":"<?php echo $_COOKIE["in_adminid"];?>","_apw":"<?php echo $_COOKIE["in_adminpassword"];?>"}';
  234. var in_size = 2;
  235. var id= "<?php echo $_var_0;?>";
  236. function return_response(response){
  237. if (response == -1) {
  238. $(".uploadifySuccess").hide();
  239. $(".uploadifyError").show().text("文件不规范,请重新选择!");
  240. } else {
  241. if(response){
  242. if(id=="IN_WXQRCODE"||id=="IN_LOGO"){
  243. parent.setImageVal(id,response);
  244. }else {
  245. parent.$("#in_icon").val(response);
  246. parent.$("#btnsave").click();
  247. }
  248. }
  249. }
  250. }
  251. </script>
  252. </head>
  253. <body>
  254. <div id="fileQueue">
  255. <div class="uploadifyQueueItem uploadifySuccess" style="display:none">
  256. <div class="cancel">
  257. <a href="javascript:cancle()"><img src="<?php echo IN_PATH;?>static/pack/upload/cancel.png" border="0"></a>
  258. </div>
  259. <span class="fileName"></span><span class="percentage"></span>
  260. <div class="uploadifyProgress">
  261. <div class="uploadifyProgressBar"></div>
  262. </div>
  263. </div>
  264. <div class="uploadifyQueueItem uploadifyError" style="display:none"></div>
  265. </div>
  266. <input type="file" id="uploadify" onchange="uploadify()" style="display:none">
  267. <img src="<?php echo IN_PATH;?>static/pack/upload/up.png" style="cursor:pointer" onclick="$('#uploadify').click()">
  268. </body>
  269. </html><?php
  270. }
  271. function up_icon()
  272. {
  273. $_var_1 = json_decode(stripslashes($_POST["post"]), true);
  274. if ($_var_1["_id"] == "IN_WXQRCODE" || $_var_1["_id"] == "IN_LOGO") {
  275. $_var_2 = pathinfo($_FILES["file"]["name"]);
  276. if (in_array(strtolower($_var_2["extension"]), array("jpg", "jpeg", "gif", "png"))) {
  277. $_var_3 = "data/image/" . $_var_1["_id"] . ".png";
  278. @move_uploaded_file($_FILES["file"]["tmp_name"], IN_ROOT . $_var_3);
  279. echo $_var_3;
  280. } else {
  281. echo "-1";
  282. }
  283. } else {
  284. $_var_4 = intval($_var_1["_id"]);
  285. $_var_5 = intval($_var_1["_aid"]);
  286. $_var_6 = $_var_1["_apw"];
  287. $_var_7 = db("app")->where("in_id", $_var_4)->value("in_icon");
  288. if (!db("admin")->where("in_adminid", $_var_5)->value("in_adminid") || md5(db("admin")->where("in_adminid", $_var_5)->value("in_adminpassword")) !== $_var_6) {
  289. exit("Access denied");
  290. }
  291. if (!empty($_FILES)) {
  292. $_var_8 = stristr($_var_7, "/") ? substr(strrchr($_var_7, "/"), 1) : $_var_7;
  293. $_var_2 = pathinfo($_FILES["file"]["name"]);
  294. if (in_array(strtolower($_var_2["extension"]), array("jpg", "jpeg", "gif", "png"))) {
  295. $_var_3 = IN_ATTACHMENT_PATH . $_var_8;
  296. @move_uploaded_file($_FILES["file"]["tmp_name"], $_var_3);
  297. echo $_var_8;
  298. } else {
  299. echo "-1";
  300. }
  301. }
  302. }
  303. }
  304. function uplog()
  305. {
  306. if (!empty($_FILES)) {
  307. $_var_9 = pathinfo($_FILES["file"]["name"]);
  308. $_var_10 = strtolower($_var_9["extension"]);
  309. if (in_array($_var_10, array("ipa", "apk"))) {
  310. $_var_11 = $_POST["post"];
  311. preg_match("/^(\\d+\\_\\d+)\$/", $_var_11) or exit("-1");
  312. $_var_12 = IN_TMP_PATH . $_var_11 . "/";
  313. if (!is_dir($_var_12)) {
  314. @mkdir($_var_12, 0777, true);
  315. }
  316. $_var_13 = IN_TMP_PATH . $_var_11 . "." . $_var_10;
  317. @move_uploaded_file($_FILES["file"]["tmp_name"], $_var_13);
  318. if ($_var_10 == "ipa") {
  319. $_var_14 = new PclZip($_var_13);
  320. $_var_14->extract(PCLZIP_OPT_PATH, $_var_12, PCLZIP_OPT_BY_PREG, "/^Payload\\/.*.app\\/Info.plist\$/");
  321. $_var_14->extract(PCLZIP_OPT_PATH, $_var_12, PCLZIP_OPT_BY_PREG, "/^Payload\\/.*.app\\/embedded.mobileprovision\$/");
  322. $_var_14->extract(PCLZIP_OPT_PATH, $_var_12, PCLZIP_OPT_BY_PREG, "/^Payload\\/.*.app\\/(?!.*\\/).*.png\$/");
  323. }
  324. echo "{'extension':'" . $_var_10 . "','time':'" . $_var_11 . "','size':'" . $_FILES["file"]["size"] . "'}";
  325. } else {
  326. echo "-1";
  327. }
  328. }
  329. }
  330. }