需求:

    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. ?>

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. C++转让Lua

    转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/39756423 我使用的cocos2d-x版本号是2.3.3.先在一个C++projec ...

  2. mongodb实现简单的增删改查

    package mongoDB; import java.net.UnknownHostException; import java.util.ArrayList; import java.util. ...

  3. 【译】使用微软企业库5.0进行WCF服务边界上的异常保护

    在Windows Communication Foundation (WCF)中,为了阻止服务的实现细节从服务的安全边界泄露,未知的异常不应该被发送至客服端.在WCF配置中将<serviceDe ...

  4. 【设计优化】-使用缓冲(Buffer)提高程序性能

    缓冲区是一块特定的内存区域.开辟缓冲区的目的是通过缓解应用程序上下层之间的性能差异,提高系统性能. 缓冲能够协调上层组件和下层组件的性能差异.当上层组件性能因为下层组件时,能够有效地降低上层组件对下层 ...

  5. 【Java基础】异常的简单分类与处理

    Java中所有的异常都继承自Throwable类,Throwable类的已知子类有Error和Exception. Error是指系统出现的错误,这种错误出现的时候,我们的程序无能为力,所以不需要进行 ...

  6. 配置jndi服务,javax.naming.NamingException的四种情况

    1.当jndi服务没有启动,或者jndi服务的属性没有设置正确,抛出如下异常: javax.naming.CommunicationException: Can't find SerialContex ...

  7. 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 ...

  8. Linux 下卸载MySQL 5

    对于在Linux下通过rpm方式的mysql,我们能够通过移除这些rpm包以及删除项目的文件夹来达到卸载的目的.本文演示了在SUSE Linux 10下下载MySQL 5.5.37.详细见下文. 1. ...

  9. ubuntu中KDE与GNOME安装切换

    转载:http://apps.hi.baidu.com/share/detail/18919303 1.在Ubuntu中安装KDE桌面命令 sudo apt-get install kUbuntu-d ...

  10. OTG驱动分析(二)

    上回介绍了OTG功能的 OTG部分驱动,本片分析OTG功能的从设备部分驱动.从设备的注冊过程和OTG的一样,首先注冊设备. 流程是: 1.定义platform_device结构. 2.定义platfo ...