破解高德 sdk 实现免 key

   2016-09-11 0
核心提示:前言作为一个 Android 开发者,使用定位 SDK 越来越频繁,但是基本上所有的定位 SDK 都需要使用时申请 key ,而且这些 key 又根据签名和包名生成,作为程序员,怎么能忍受这么麻烦的事情,于是就着手想办法解决。至于为什么是高德呢,只是因为不喜欢百度。准

前言

作为一个 Android 开发者,使用定位 SDK 越来越频繁,但是基本上所有的定位 SDK 都需要使用时申请 key ,而且这些 key 又根据签名和包名生成,作为程序员,怎么能忍受这么麻烦的事情,于是就着手想办法解决。至于为什么是高德呢,只是因为不喜欢百度。

准备工具

  • 高德定位SDK最新版 AMap_Location_V2.9.0_20160906.jar
  • Android Studio
  • Java Decompiler

分析过程

高德的定位 SDK 在申请 key 的时候需要的信息包名和 SHA1 码,然后会给我们一个 key ,因此在校验的时候肯定也是这三个条件有:

  • 包名
  • 编译key的SHA1码
  • 申请得到的key

那么如果我们找到高德获取这些信息的入口,申请一个key,然后将这些信息写死在代码中试试能不能做到呢?

接下来我们就来尝试一下

高德的定位 SDK 是一个 jar 包,而jar包是很容易反编译的,首先我们使用 Java Decompiler 来看一下代码结构

破解高德 sdk 实现免 key

看到了什么— APSService ,就是高德让我们在 AndroidManifest.xml 中声明的那个 Service ,说明这个就是高德定位的入口,来看看里面的内容

破解高德 sdk 实现免 key

做过动态加载的人肯定一眼就看出来了,这是一个代理 Service ,真正运行的是实现了 APSServiceBase 的 Service ,那就需要去寻找实现了 APSServiceBase 的类,反正类不多就一个一个看,就找了到 b.class

破解高德 sdk 实现免 key

在 onBind 方法里面我们看到了关键信息

破解高德 sdk 实现免 key

这个 onBind 是代理 APSService 的 onBind ,那我们就在 APSService 的 onBind 方法里面打印这些参数,看看分别都是什么,那怎么修改 jar 包呢,其实非常简单, jar 包就是一个 zip 格式的压缩文件,我们只需要解压替换,然后重新压缩就可以了。

修改jar

使用 Android Studio 新建一个 Android Library 的 Module ,包名与  jar 包要修改的类包名相同,新建一个类,与要修改的类名相同

破解高德 sdk 实现免 key

复制反编译出来的 APSService 的内容到我们新建的类中,同时将 SDK 的 jar 包作为这个 Module 的依赖包,保证这个 Module 可以正常编译。其中 onBInd 方法我们修改为以下内容,其中修改后的内容为我们已经在高德官网申请过得 key 信息。

  • 注意:这里 sha1AndPackage 中 SHA1 码与包名中间的冒号为中文冒号,高德真是费尽心机…
   public IBinder onBind(Intent paramIntent) {        try {
            String str1 = paramIntent.getStringExtra("apiKey");
            String str2 = paramIntent.getStringExtra("packageName");
            String str3 = paramIntent.getStringExtra("sha1AndPackage");
            String str4 = paramIntent.getStringExtra("as");
            Log.i("修改前数据", "apiKey:" + str1 + "\npackageName:" + str2 + "\nsha1AndPackage:" + str3 + "\nas:" + str4);
            paramIntent.putExtra("apiKey", "93036c13932aba6eeaee2a02656f14d7");
            paramIntent.putExtra("packageName", "com.lge.clock");
            paramIntent.putExtra("sha1AndPackage", "FA:AB:F5:02:B2:17:AC:D3:DA:46:38:ED:FF:E3:0C:A3:E4:67:0A:50:com.lge.clock");
            str1 = paramIntent.getStringExtra("apiKey");
            str2 = paramIntent.getStringExtra("packageName");
            str3 = paramIntent.getStringExtra("sha1AndPackage");
            str4 = paramIntent.getStringExtra("as");
            Log.i("修改后数据", "apiKey:" + str1 + "\npackageName:" + str2 + "\nsha1AndPackage:" + str3 + "\nas:" + str4);            return this.a.onBind(paramIntent);
        } catch (Throwable localThrowable) {
            c.a(localThrowable, "APSService", "onBind");
        }        return null;
    }

接下来只需要打包这个 Module 为 jar 包,然后提取出这个类的 class 文件,替换高德 SDK 的 jar 包中对应的 class 文件即可。

Android Studio 如何打包 jar 呢?

我们在这个修改的用来修改的 Module 的 build.gradle 中添加以下代码

task makeJar(type: Copy) {

    delete 'build/libs/lib.jar'

    from('build/intermediates/bundles/release/')

    into('build/libs/')

    include('classes.jar')

    rename ('classes.jar', 'lib.jar')

}

makeJar.dependsOn(build)

在工程目录下执行

gradlew makeJar

破解高德 sdk 实现免 key

即可得到 jar 文件

破解高德 sdk 实现免 key

解压 lib.jar 和 高德 SDK 的 jar,使用 lib.jar 中的 APSService.class 替换高德 SDK 中的 APSService.class ,然后将这个文件夹重新 压缩成 zip格式 ,然后修改扩展名为 .jar 即可。

测试

使用修改后的 SDK jar 包替换原来的 jar 包进行定位测试,不要忘了在 AndroidManifest.xml 也加上申请好的 key 。

测试结果为可以正常定位,包名和签名可以随意换咯,再也不用麻烦的每次申请 key 啦!

国际惯例

奉上源代码

https://github.com/YiuChoi/CrackAmap
 
标签: Java 安卓开发
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • SDK热更之如何在SDK代码中自动插桩及如何生成补
    写在前面本文是SDKHotfix相关的SDK热更系列文章中的一篇,以下为项目及系列文章相关链接:SDKHotfix整体介绍:http://blog.bihe0832.com/sdk_hotfix_project.htmlSDKHotfix对应github地址:https://github.com/bihe0832/SDKHoxFix这篇文章主要介绍一下SDK热更
  • ASimpleCache
    ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架。轻量到只有一个java文件(由十几个类精简而来)。1、它可以缓存什么东西?普通的字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java对象,和 byte数据。2、它有什么特色?特色主要是
    02-05 Java开源
  • 原生App与javascript交互之JSBridge接口原理、
    前期调研调研对象:支付宝,微信,云之家调研文档:Android中JS与Java的极简交互库 SimpleJavaJsBridge设计需求阅读类型的业务功能页面需要由前端H5实现,需要做到服务端可控;页面界面更改减少重新发布新版本的频率;功能页面部分原型需求无法实现,需要原生
  • RxJava系列番外篇:一个RxJava解决复杂业务逻辑
    之前写过一系列RxJava1的文章,也承诺过会尽快有RxJava2的介绍。无奈实际项目中还未真正的使用RxJava2,不敢妄动笔墨。所以这次还是给大家分享一个使用RxJava1解决问题的案例,希望对大家在使用RxJava的时候有一点点启发。对RxJava还不了解的同学可以先去看看
  • 框架Robust原理解析(下)
    框架Robust原理解析(下)
    一、回顾框架原理本篇继续来看热修复框架Robust原理,在之前的一篇文章中已经详细讲解了:Robust框架原理,因为这个框架不是开源的,所以通过官方给出的原理介绍,咋们自己模拟了案例和框架逻辑的简单实践。最后在通过反编译美团app进行验证咋们的逻辑实现是
  • 使用Smalidea对无源码APK调试简介
    阅读:8最近正好也用了Smalidea,就ZZ的原贴做一些补充。可调试APP如果Android的系统属性ro.debuggable等于1(用getprop ro.debuggable验证),则所有APP都可调试。如果ro.debuggable等于0,某APP的AndroidManifest.xml中有android:debuggable=”true”,该APP
    01-06 JavaLinux
  • 年度盘点(四) | 2016 年十大 Java / Android 开发者必读好文
    年度盘点(四) | 2016 年十大 Java / Android
    2016 年已经过去,感谢大家支持开发者头条。 年度盘点第四篇: 2016 年十大 Java / Android 开发者必读好文 。 长按识别文章摘要下方二维码,即可进入文章评论页。0. 推荐几个自己写的 Java 后端相关的范例项目这里推荐几个自己写的范例项目,主要采用 SSM(S
  • 8个华丽而实用的Java图表类库
    8个华丽而实用的Java图表类库
    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码: 589809992 我们一起学Java! 前段时间我们为大家分享过一些最常用的Java图表应用和Android图表应用,无论是在PC平台上还是移动平台上,图表和报
  • 第151期:一个RxJava解决复杂业务逻辑的案例
    第151期:一个RxJava解决复杂业务逻辑的案例
    第151期:一个RxJava解决复杂业务逻辑的案例深度讨论 基本特效:饿了么丝滑无缝过度搜索栏的实现 diycode 帖子优先,就给上个头条吧。Android开发 一个RxJava解决复杂业务逻辑的案例 本文给大家分享一个使用RxJava解决问题的案例,希望对大家在使用RxJava的时
  • Eclipse 集成ijkplayer demo
    Eclipse 集成ijkplayer demo
    接着上一篇在Mac上编译ijkplayer的.so,现在将这些文件夹拷贝到windows上。(在mac和winds上集成到eclipse上是一样的,只是我这mac上没有安装eclipse)。现在开始说集成到Eclipse的步骤:1 更改目录结构 以 ijkplayer-armv7a 文件夹为例,删除选中的这四个文件
    12-23 EclipseJava
点击排行