• 技术文章 >php教程 >php手册

    php脚本生成google play url的下载链接,下载apk并自动反编译后

    2016-06-06 19:48:08原创3888

    需求: get the offer tracking link follow the redirect to get google play url Go to http://apps.evozi.com/apk-downloader/ Enter google play url Download APK file Decompile APK file using https://code.google.com/p/android-apktool/wiki/Apktoo

    需求:

    get the offer tracking link
    follow the redirect to get google play url
    Go to http://apps.evozi.com/apk-downloader/
    Enter google play url
    Download APK file
    Decompile APK file using https://code.google.com/p/android-apktool/wiki/ApktoolOptions#Decompile_Options
    Extract this file
    [app name]/smali/com/kochava/android/tracker/Global.smali
    Extract this line
    .field public static final SDK_VERSION:Ljava/lang/String; = "Android20141023"
    This output the Kochava SDK version numbe

    脚本的目的就是将上面的操作步骤自动化

    运行脚本之前必须在linux里安装apktool和java环境

    操作演示:

    上面输入的是应用的包名字,你也可以输入对应的google play url: https://play.google.com/store/apps/details?hl=en&id=com.priceline.android.negotiator

    以下是代码:

      1 php
      2    fwrite(STDOUT, "please enter the google play url or app package name: ");
      3    $url = trim(fgets(STDIN));
      4    $name_reg="/id=([^&]+)/";
      5    preg_match($name_reg,$url,$name);
      6    if(empty($name)){
      7           $packagename=$url;
      8    }else{
      9           $packagename=$name[1];
     10    }
     11    function getParameter(){
     12       $url="http://apps.evozi.com/apk-downloader";
     13          $context=file_get_contents($url);
     14          preg_match("/var evoziJsData = {(.+)};/",$context,$json);
     15          $t=explode(",",$json[1]);
     16          foreach($t as $key=>$value){
     17              $value=str_replace(' ','',$value);
     18              $t[$key]=$value;
     19          }
     20          $token_value=explode(":",$t[1]);
     21          $t_value=$token_value[1];
     22          $dtrken=explode(":",$t[2]);
     23          $patten="/var ".$dtrken[1]." = '(.+)';/";         
     24          preg_match($patten,$context,$daw);
     25          $dtrken[1]=$daw[1];
     26          return array("t"=>$t_value,"dtrken"=>$dtrken);
     27    }
     28    function ajaxPost($packagename) {
     29          $tk=getParameter();
     30          $t=$tk['t'];
     31          $dtrken_key=$tk['dtrken'][0];
     32          $dtrken_value=$tk['dtrken'][1];
     33             $post_url='http://api.evozi.com/apk-downloader/download';
     34           $data = 'packagename='.$packagename.'&t='.$t.'&'.$dtrken_key.'='.$dtrken_value.'&fetch=false';
     35             $ch = curl_init();
     36             $headers = array('content-type: application/x-www-form-urlencoded;charset=UTF-8');
     37             curl_setopt($ch, CURLOPT_URL, $post_url);
     38             curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
     39             curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
     40             curl_setopt($ch, CURLOPT_POST, 1);
     41             curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
     42             $results = curl_exec($ch);
     43             curl_close($ch);
     44             $results = json_decode($results);
     45             return $results;
     46         }
     47         function getVersion($packagename){
     48               $version="/Android[0-9]+/";
     49               $path=$packagename."/smali/com/kochava/android/tracker";
     50               $filename1="Global.smali";
     51               $filename2="a.smali";
     52               if(is_dir($path)){
     53                     $file=scandir($path);
     54                     foreach($file as $key=>$value){
     55                           $filename=$value;
     56                           if(isset($filename)&file_exists($path."//m.sbmmt.com/m/".$filename)){
     57                                     $context=file_get_contents($path."//m.sbmmt.com/m/".$filename);
     58                                     preg_match($version,$context,$v);
     59                                     if(!empty($v)){
     60                                        $vs=$v[0];    
     61                                        break;
     62                                     }
     63                         }
     64                     }
     65                     if(isset($vs)){
     66                           $info=array("status"=>200,"description"=>"success detection in the file:".$filename,"version"=>$vs);
     67                      }else{
     68                           $info=array("status"=>203,"description"=>"failure detection in all the .smal file:(".$file."),we can't find the android version number");
     69                      }
     70               }else{
     71                    $info=array("status"=>201,"description"=>"there is no such directory:".$path);
     72               }
     73               $info=json_encode($info);
     74               return $info;
     75         }
     76         function getFile($file_path,$file_name){
     77             exec("sudo wget -O $file_name $file_path");
     78         }
     79         function deCompileApk($file_name){
     80                   print_r("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++start decompile apk,this may need a long time,please wait...++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++".PHP_EOL);
     81                   exec("sudo apktool d $file_name");
     82                   print_r("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++decompile end++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++".PHP_EOL);
     83         }
     84         function delFile($packagename,$file_name){
     85                   exec("sudo rm -f $file_name");
     86                   exec("sudo rm -rf $packagename");
     87         }
     88         $result=ajaxPost($packagename);
     89         if($result->status=="success"){
     90              $file_name=$packagename."."."apk";
     91            $downloadUrl=$result->url;
     92            $downloadUrl=preg_replace("/&/i", "\&", $downloadUrl);
     93        getFile($downloadUrl,$file_name);
     94        deCompileApk($file_name);
     95        $info=getVersion($packagename);
     96        delFile($packagename,$file_name);
     97         }else{
     98              $tinfo=array("status"=>204,"description"=>"we can't generate Download Link from http://apps.evozi.com/apk-downloader/,please check your input of google play url or app package name!");
     99              $info=json_encode($tinfo);
    100         }
    101         print_r($info.PHP_EOL);
    102 ?>

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:小技巧找出一个php的cron脚本出问题的代码行 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释• 优化使用mysql存储session的php代码• 用PHP+MySql编写聊天室• php根据用户语言跳转相应网页• 推荐10个非常实用的PHP代码片段
    1/1

    PHP中文网