为了账号安全,请及时绑定邮箱和手机立即绑定

Android 安全逆向:篡改你的位置信息

标签:
Android

前言

前几天,一个哥们向我提了一个需求,怎么能改变当前应用的位置信息。当时工作比较忙,就说有时间研究下。想了下,这个可以有三种方式来解决。

  • 1.找个虚拟机,因为虚拟机可以进行模拟定位,可以实现

  • 2.写一个应用Hook调当前设备的位置,不过这个好像要求有Root权限

    关于Hook原理可以自己去查,推荐几个Hook框架,Xposed/Legend。这个原理就是对定位返回值进行一个替换。

  • 3.反编译App,修改结果,这个需要做如下几个步骤

    • 反编译 找到需要修改定位结果的地方做出相应修改

    • 重新打包

      优点: 无需root,稳定性强(前提是找准入口)。 缺点: 技术水平要求高。根据应用复杂程度、混淆、安全策略等不同,难度差异较大。难易程度包括很多内容,包括混淆部分、入口寻找、签名验证等。

      本文采用第三种方法来进行修改,上面说的混淆,签名校验也都遇到了,下面会详细分析。

准备工作

  • 要反编译的app包,这个是必须的

  • 反编译工具等。

    反编译工具有很多,但是底层基本上都是差不多,本文采用AndroidKiller,Jadx-gui

  • 由于是直接修改smali代码,所以需要对这个smali比较熟悉,之前写过几篇文章,可以移步链接Android逆向分析:Smali 指令集及文件详解

逆向分析

准备工作OK。下面开始反编译修改流程

  • 反编译,查找需要修改的页面

    我在反编译的时候,发现该App居然用了两家的定位SDK,(百度、高德),这就比较头痛了,不过,别慌,我们来缕下思路,用了两家定位SDK,有与我们只是去改某个界面的定位信息,我们应该去找这个界面,然后去看它的定位是用的哪一个,手机上打开需要操作的页面,cmd 中输入已下命令。

     adb shell dumpsys activity top

    会看到该页面的类详细信息

  • 我们再用jadx-gui打开反编译之后的源码,全局搜索。找到该Activity,可以看到该页面用的是高德的定位模块,不熟悉的同学可以去移步高德地图官网,简单的看一下。

    找到其定位模块

  • 简单分析下逻辑,该页面收到高德地图回调以后,将AMapLocation对象中的信息拿出来,然后赋值给成员变量,并且该对象中的位置信息设置到TextView中去。下面看一下对应的smali文件

  • 对于JAVA代码就没有必要多说了,下面分析下对应Smali文件

  • 可以看到,先从AMapLocation 对象中拿到Address信息,然后判断下是否为0,如果不为真的话,跳转到cond_2偏移处,稍后再看下cond_2 偏移处的代码

  • 下面再看下cond_2处的代码

  • 修改Smali

    下面我们在对应位置,给相应的寄存器赋值,在这我们把位置个经纬度信息写死,在smali里面不能直接去写字符串,需要将字符串转为ASCII,再写进去。关于这个经纬度信息,也不能直接写进去,也是有一定的规则。

  • 相应的也要对cond_2 进行修改

  • OK,至此我们已经修改完了对应的smali,接下来就是二次打包了。

回编译,二次打包

  • 二次打包

    二次打包成功,现在我们安装到手机上,进行测试,WTF???,可以看到弹出一个Dialog,显示如下信息。

  • 辛苦改了那么久,结果发现该应用做了签名校验,我们再来看一下,它的签名校验怎么做的。

    • 签名校验

      手机停留在该页面,在命令行中输入,

        adb shell dumpsys activity top

      可以找到对应的Activity信息,可以发现该Dialog 是在 WelcomeActivity 弹出的


  • OK 很明显的可以看到isTwickPack方法,我们猜测这就是校验签名的地方,也可以反过来验证下,全局搜索关键字,“该应用被二次打包,程序将关闭”


    可以看到引用String name为"keystore_error",然后再全局搜索该关键字,找到该name 在R文件中的引用。


    全局搜索引用的地址“0x7f080200”,可以看到引用的地方是在,WelcomeActivity中。


  • 具体看下是onAnimationEnd() 这个方法里面,这个方法一上来就做一次二次打包校验,可以先看下Java代码。


  • 对应smali如下,代码校验,截取部分看下。


  • 其实我们要做的很简单,在这个smali里面直接return 一个false,这样就绕过了,二次打包校验。对应smali


  • OK 至此已经改动完毕,简单验证一下

一些建议

  • 通过本文案例,其实对于现在应用防护有这些建议:首先关于应用签名校验这块逻辑,可以做的更安全点,就是在native层用反射调用系统获取签名的方法,然后直接在native层进行比较,如果发现签名不正确,就退出程序,全部放在native层做,这样安全系数会高点

  • 再者就是推荐一些企业级别的加固方案,第三方的有很多。

声明

本文的目的只有一个,通过一个案例来分析如何去修改位置,以及如何去破解,如果有人利用本文内容进行任何商业目的和非法牟利,带来的任何法律责任将由操作者本人承担,和本文作者没有任何关系,所以还是由衷的希望大家秉着技术学习的目的阅读此文,非常感谢!

原文链接:http://www.apkbus.com/blog-822717-68416.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消