php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号
需求:
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版本号的更多相关文章
- (Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译
Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译. 1.打开VS,博主所用版本是Visual Studio 2013. 2.新建一个VC项目 ...
- apk应用的反编译和源代码的生成
对于反编译一直持有无所谓有或无的态度.经过昨天一下午的尝试,也有了点心得和体会: 先给大家看看编译的过程和我们反编译的过程概图吧: 例如以下是反编译工具的根文件夹结构: 三个目录也实际上是下面三个步骤 ...
- 反编译 轻松调频 Android APP 下载“飞鱼秀”录音
经常听“飞鱼秀”,但是由于时间的原因,只能听回放,但是轻松调频的APP做的有点儿... 听回放的时候经常会中断,还不能拖动进度条,就决定把录音下载下来听. 1.反编译apk(Android反编译过程见 ...
- 转:介绍几个著名的实用的Java反编译工具,提供下载
from :http://www.glorze.com/219.html 反编译 众所周知,我们将源代码进行编译,生成可执行的程序或者容器发布包,这个将代码转换的过程就是编译的过程,而反编译就是将这些 ...
- apktool的下载,安装,反编译和重新打包
一.环境要求 安装java 1.8 以上 命令行运行 java -version 返回版本大于1.8 如果没有,请安装java 1.8 二.下载与安装 下载apktool_x.x.x.jar到本地 官 ...
- Telerik JustDecompile 2014.1.255.0 开发版(.NET反编译神器,免费下载)
Telerik JustDecompile是Telerik公司推出一个免费的.NET反编译工具,支持插件与Visual Studio 2015~2013集成,还能够创建Visual Studio Pr ...
- eclipse安装反编译插件(附jad下载)
eclipse安装反编译插件(附jad下载) 博客分类: eclipse 一.eclipse反编译插件Jadclipse jadclips插件网站: http://jadclipse.sou ...
- vc++ 6.0编译后生成的文件
程序在编译后,在目标路径下会生成多个文件 Debug文件夹(*.exe,*.ilk,*.obj,*.pch,*.pdb,*.idb,*,pdb),*.cpp,*.dsp,*.ncb,*.plg ...
- asp动态生成google的sitemap地图的代码
本来使用那些网站生成google网站地图,时间久了,感觉太麻烦了:先打开他们的网站,输入我的网址,然后点击生成,等待一段时间后,下载生成后的文件,再将它通过ftp上传到空间上了.实在太麻烦了,还不如自 ...
随机推荐
- C++转让Lua
转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/39756423 我使用的cocos2d-x版本号是2.3.3.先在一个C++projec ...
- mongodb实现简单的增删改查
package mongoDB; import java.net.UnknownHostException; import java.util.ArrayList; import java.util. ...
- 【译】使用微软企业库5.0进行WCF服务边界上的异常保护
在Windows Communication Foundation (WCF)中,为了阻止服务的实现细节从服务的安全边界泄露,未知的异常不应该被发送至客服端.在WCF配置中将<serviceDe ...
- 【设计优化】-使用缓冲(Buffer)提高程序性能
缓冲区是一块特定的内存区域.开辟缓冲区的目的是通过缓解应用程序上下层之间的性能差异,提高系统性能. 缓冲能够协调上层组件和下层组件的性能差异.当上层组件性能因为下层组件时,能够有效地降低上层组件对下层 ...
- 【Java基础】异常的简单分类与处理
Java中所有的异常都继承自Throwable类,Throwable类的已知子类有Error和Exception. Error是指系统出现的错误,这种错误出现的时候,我们的程序无能为力,所以不需要进行 ...
- 配置jndi服务,javax.naming.NamingException的四种情况
1.当jndi服务没有启动,或者jndi服务的属性没有设置正确,抛出如下异常: javax.naming.CommunicationException: Can't find SerialContex ...
- HDU 4951 Multiplication table 阅读题
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4951 题意:给一个P进制的乘法表.行和列分别代表0~p-1,第i行第j*2+1和第j*2+2列代表的是第i ...
- Linux 下卸载MySQL 5
对于在Linux下通过rpm方式的mysql,我们能够通过移除这些rpm包以及删除项目的文件夹来达到卸载的目的.本文演示了在SUSE Linux 10下下载MySQL 5.5.37.详细见下文. 1. ...
- ubuntu中KDE与GNOME安装切换
转载:http://apps.hi.baidu.com/share/detail/18919303 1.在Ubuntu中安装KDE桌面命令 sudo apt-get install kUbuntu-d ...
- OTG驱动分析(二)
上回介绍了OTG功能的 OTG部分驱动,本片分析OTG功能的从设备部分驱动.从设备的注冊过程和OTG的一样,首先注冊设备. 流程是: 1.定义platform_device结构. 2.定义platfo ...