需求:

    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. 提高SQL执行效率

    原文地址:http://www.cnblogs.com/hlxs/archive/2012/05/07/2487082.html 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ...

  2. asp.net Login控件基本属性及事件说明

    原文:asp.net Login控件基本属性及事件说明 Login系列控件是微软为了简化我们的开发过程,为我们进行常规的安全开发提供块捷途径. Login系列控件包含下列控件: Login 登录控件 ...

  3. 学了Java 你未必知道这些

    作为一个正奔跑向编程完美天堂的朝圣者,本人觉得在平常的编程中,应该要做到以下几点: 一:汝应注释,这样做既方便别人,也方便自己去读懂代码的逻辑 二:注重细节,为自己写的每行代码负责,比如,在并发编程的 ...

  4. http协议知识整理(转)

    HTTP 协议 作为web开发人员,了解一些http协议的知识很有必要.本文简单介绍了HTTP协议的知识,若有错误的地方,望大家指正. 1.HTTP协议是什么? http协议是一个应用层的协议.规定了 ...

  5. HDU-2647拓扑排序

    这道题不能用矩阵表示,因为1w*1w绝对超内存,分析数据,前一个a的钱要多于后一个b,所以我们要把b作为出度,a为入度,如果不明白这个地方,举例:b——>a——>c——>d ,b为8 ...

  6. struts2集成fckeditor(来自大型门户网站是这样练成的一书)

  7. 部署 Redis 群集

    Windows 部署 Redis 群集   1,下载Redis for windows 的最新版本,解压到 c:\Redis 目录下备用https://github.com/MSOpenTech/re ...

  8. WPF换肤之二:可拉动的窗体

    原文:WPF换肤之二:可拉动的窗体 让我们接着上一章: WPF换肤之一:创建圆角窗体 来继续. 在这一章,我主要是实现对圆角窗体的拖动,改变大小功能. 拖动自绘窗体的步骤 首先,通过上节的设计,我们知 ...

  9. cocos2d-x 3.0游戏实例学习笔记 《跑酷》第一步--- 开始界面

    说明:这里是平局:晓风残月前辈的博客.他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写,并做相关笔记 ...

  10. Android学习路径(23)应用Fragment建立动态UI——Fragment之间的通信

    为了要重用Fragment的UI组件.你应该为它们每个都构建一个完整独立的,模块化的组件来定义他自身的布局和行为. 一旦你定义了这些可重用的Fragments.你能够通过activity关联它们同一时 ...