需求:

    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

  以下是代码:

 

 <?php
fwrite(STDOUT, "please enter the google play url or app package name: ");
$url = trim(fgets(STDIN));
$name_reg="/id=([^&]+)/";
preg_match($name_reg,$url,$name);
if(empty($name)){
$packagename=$url;
}else{
$packagename=$name[1];
}
function getParameter(){
$url="http://apps.evozi.com/apk-downloader";
$context=file_get_contents($url);
preg_match("/var evoziJsData = {(.+)};/",$context,$json);
$t=explode(",",$json[1]);
foreach($t as $key=>$value){
$value=str_replace(' ','',$value);
$t[$key]=$value;
}
$token_value=explode(":",$t[1]);
$t_value=$token_value[1];
$dtrken=explode(":",$t[2]);
$patten="/var ".$dtrken[1]." = '(.+)';/";
preg_match($patten,$context,$daw);
$dtrken[1]=$daw[1];
return array("t"=>$t_value,"dtrken"=>$dtrken);
}
function ajaxPost($packagename) {
$tk=getParameter();
$t=$tk['t'];
$dtrken_key=$tk['dtrken'][0];
$dtrken_value=$tk['dtrken'][1];
$post_url='http://api.evozi.com/apk-downloader/download';
$data = 'packagename='.$packagename.'&t='.$t.'&'.$dtrken_key.'='.$dtrken_value.'&fetch=false';
$ch = curl_init();
$headers = array('content-type: application/x-www-form-urlencoded;charset=UTF-8');
curl_setopt($ch, CURLOPT_URL, $post_url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$results = curl_exec($ch);
curl_close($ch);
$results = json_decode($results);
return $results;
}
function getVersion($packagename){
$version="/Android[0-9]+/";
$path=$packagename."/smali/com/kochava/android/tracker";
$filename1="Global.smali";
$filename2="a.smali";
if(is_dir($path)){
$file=scandir($path);
foreach($file as $key=>$value){
$filename=$value;
if(isset($filename)&file_exists($path."/".$filename)){
$context=file_get_contents($path."/".$filename);
preg_match($version,$context,$v);
if(!empty($v)){
$vs=$v[0];
break;
}
}
}
if(isset($vs)){
$info=array("status"=>200,"description"=>"success detection in the file:".$filename,"version"=>$vs);
}else{
$info=array("status"=>203,"description"=>"failure detection in all the .smal file:(".$file."),we can't find the android version number");
}
}else{
$info=array("status"=>201,"description"=>"there is no such directory:".$path);
}
$info=json_encode($info);
return $info;
}
function getFile($file_path,$file_name){
exec("sudo wget -O $file_name $file_path");
}
function deCompileApk($file_name){
print_r("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++start decompile apk,this may need a long time,please wait...++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++".PHP_EOL);
exec("sudo apktool d $file_name");
print_r("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++decompile end++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++".PHP_EOL);
}
function delFile($packagename,$file_name){
exec("sudo rm -f $file_name");
exec("sudo rm -rf $packagename");
}
$result=ajaxPost($packagename);
if($result->status=="success"){
$file_name=$packagename."."."apk";
$downloadUrl=$result->url;
$downloadUrl=preg_replace("/&/i", "\&", $downloadUrl);
getFile($downloadUrl,$file_name);
deCompileApk($file_name);
$info=getVersion($packagename);
delFile($packagename,$file_name);
}else{
$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!");
$info=json_encode($tinfo);
}
print_r($info.PHP_EOL);
?>

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

  1. (Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译

    Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译. 1.打开VS,博主所用版本是Visual Studio 2013. 2.新建一个VC项目 ...

  2. apk应用的反编译和源代码的生成

    对于反编译一直持有无所谓有或无的态度.经过昨天一下午的尝试,也有了点心得和体会: 先给大家看看编译的过程和我们反编译的过程概图吧: 例如以下是反编译工具的根文件夹结构: 三个目录也实际上是下面三个步骤 ...

  3. 反编译 轻松调频 Android APP 下载“飞鱼秀”录音

    经常听“飞鱼秀”,但是由于时间的原因,只能听回放,但是轻松调频的APP做的有点儿... 听回放的时候经常会中断,还不能拖动进度条,就决定把录音下载下来听. 1.反编译apk(Android反编译过程见 ...

  4. 转:介绍几个著名的实用的Java反编译工具,提供下载

    from :http://www.glorze.com/219.html 反编译 众所周知,我们将源代码进行编译,生成可执行的程序或者容器发布包,这个将代码转换的过程就是编译的过程,而反编译就是将这些 ...

  5. apktool的下载,安装,反编译和重新打包

    一.环境要求 安装java 1.8 以上 命令行运行 java -version 返回版本大于1.8 如果没有,请安装java 1.8 二.下载与安装 下载apktool_x.x.x.jar到本地 官 ...

  6. Telerik JustDecompile 2014.1.255.0 开发版(.NET反编译神器,免费下载)

    Telerik JustDecompile是Telerik公司推出一个免费的.NET反编译工具,支持插件与Visual Studio 2015~2013集成,还能够创建Visual Studio Pr ...

  7. eclipse安装反编译插件(附jad下载)

    eclipse安装反编译插件(附jad下载) 博客分类: eclipse   一.eclipse反编译插件Jadclipse jadclips插件网站:    http://jadclipse.sou ...

  8. vc++ 6.0编译后生成的文件

    程序在编译后,在目标路径下会生成多个文件    Debug文件夹(*.exe,*.ilk,*.obj,*.pch,*.pdb,*.idb,*,pdb),*.cpp,*.dsp,*.ncb,*.plg  ...

  9. asp动态生成google的sitemap地图的代码

    本来使用那些网站生成google网站地图,时间久了,感觉太麻烦了:先打开他们的网站,输入我的网址,然后点击生成,等待一段时间后,下载生成后的文件,再将它通过ftp上传到空间上了.实在太麻烦了,还不如自 ...

随机推荐

  1. sgu 286. Ancient decoration(最小环覆盖)

    给你一个n个点,每个点度为k(k为偶数)的无向图,问是否能将图中的n条边染色,使得每个点都拥有两条被染色的边.也就是说,是否存在拥有原图中n条边的子图,使得每个点的度为2?仔细想想,每个点的度为2,实 ...

  2. 通过openssh远程登录时的延迟问题解决

    Linux下的ssh 服务器一般用的都是open-ssh,可是发现有些时候通过ssh连接服务器时总会有大概10秒钟左右的延迟. 一开始以为是openssh的安全策略,防止端口扫描,后来发现自己想多了. ...

  3. Eclipse4.4.2手动安装Veloeclipse-2.0.8

    引言:     新安装了Eclipse最新版本 4.4.2 Luna(月神),由于项目中使用到了模板引擎Velocity,所以想安装一个Velocity插件, 在网上找了一下,看到Google的vel ...

  4. 找出二叉树中和为n的路径

    题目描述: 输入一个整数和一棵二元树.从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径.打印出和 与输入整数相等的所有路径. 二叉树中的路径 从二叉树的根节点出发,至二叉树的叶子节点的 ...

  5. C,C++中的static

    在C和C++中,static都有两种基本的含义,并且这两种含义经常是互相有冲突的: 1) 在固定的地址上分配,也就是说对象是在一个特殊的静态数据区上创建的,而不是每次 函数调用时在堆栈上产生的.这也是 ...

  6. ContentProvider的使用

    这方面的资料应该网上已经很多了,我在这里只是做简单的总结就行了. 如题:ContentProvider是android的内容提供器,可以为应用程序提供各种的数据,例如数据表,txt文件,xml文件等等 ...

  7. 栈实现java

    栈是一种“先去后出”的抽象的数据结构.例如:我们在洗盘子的时候,洗完一个盘子,将其放在一摞盘子的最上面,但我们全部洗完后,要是有盘子时,我们会先从最上面的盘子开始使用,这种例子就像栈的数据结构一样,先 ...

  8. SpringMVC单文件上传、多文件上传、文件列表显示、文件下载(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文详细讲解了SpringMVC实例单文件上传.多文件上传.文件列表显示.文件下载. 本文工程 ...

  9. li排序

    html <ul id="ul1"> <li>9</li> <li>2</li> <li>7</li& ...

  10. ZOJ3827 ACM-ICPC 2014 亚洲区域赛的比赛现场牡丹江I称号 Information Entropy 水的问题

    Information Entropy Time Limit: 2 Seconds      Memory Limit: 131072 KB      Special Judge Informatio ...