Heim  >  Artikel  >  Backend-Entwicklung  >  php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号

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

WBOY
WBOYOriginal
2016-06-23 13:39:152553Durchsuche

    需求:

    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."/".$filename)){ 57                                     $context=file_get_contents($path."/".$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 ?>

 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn