Android位置模拟并实现 —— 逆向钉钉打卡Xposed Plugin

为什么80%的码农都做不了架构师?>>>   hot3.png

背景

钉钉打卡类App原理都是通过位置模拟骗过钉钉的定位代码。懒得去分析钉钉的定位功能,所以逆向了一款成熟的Xposed Plugin*钉钉打卡(dingPass)*看看它是如何做到的。

这个Xposed Plugin可以在Xposed官网上搜到。

准备

必不可少的工具:

  • jadx
  • apktool
  • 一台已经Root并且安装了Xposed的手机
  • 将钉钉打卡(dingPass)下载下来

逆向

通过jadx将钉钉打卡(dingPass)反编译为Java源码。通过Xposed Wiki可知Xposed Plugin如何编写,那么我们也就知道通过哪些关键字快速定位到关键Call,如:IXposedHookLoadPackage,handleLoadPackage,de.robv.android.xposed等。

通过IXposedHookLoadPackage搜索到了这个插件的的Hook代码: Android位置模拟并实现 —— 逆向钉钉打卡Xposed Plugin_第1张图片

这段Hook代码中有一部分还未成功反编译为Java代码: Android位置模拟并实现 —— 逆向钉钉打卡Xposed Plugin_第2张图片

通常jadx不可能完美的将dex全部反编译为Java源码,所以才会有这样的问题。这个时候就需要通过apktool将apk反编译为smali汇编,然后还原成Java代码。

找到反编译后的.smali,可以看到代码可读性非常差,这个时候需要缩窄一下查找范围,找到关键代码,搜索Java代码中出现的关键字:requestLocationUpdates,找到下面的代码: Android位置模拟并实现 —— 逆向钉钉打卡Xposed Plugin_第3张图片

经过分析上面的代码发现实际代码在d$14.smali文件中,进入这个文件,通过 关键字再次定位关键代码: Android位置模拟并实现 —— 逆向钉钉打卡Xposed Plugin_第4张图片Android位置模拟并实现 —— 逆向钉钉打卡Xposed Plugin_第5张图片

经过分析,r0的值来源于**d.a()**方法的返回值。

使用上面分析结果修复Java代码。

实现

新建一个新的Andorid项目,通过Xposed教程编写插件,然后将上文中还原好的Hook代码拷贝到项目中,编写完成后运行即可。

转载于:https://my.oschina.net/ibuwai/blog/3026370

你可能感兴趣的:(Android位置模拟并实现 —— 逆向钉钉打卡Xposed Plugin)