为什么80%的码农都做不了架构师?>>>
背景
钉钉打卡类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代码:
通常jadx不可能完美的将dex全部反编译为Java源码,所以才会有这样的问题。这个时候就需要通过apktool将apk反编译为smali汇编,然后还原成Java代码。
找到反编译后的.smali,可以看到代码可读性非常差,这个时候需要缩窄一下查找范围,找到关键代码,搜索Java代码中出现的关键字:requestLocationUpdates,找到下面的代码:
经过分析上面的代码发现实际代码在d$14.smali文件中,进入这个文件,通过 关键字再次定位关键代码:
使用上面分析结果修复Java代码。
实现
新建一个新的Andorid项目,通过Xposed教程编写插件,然后将上文中还原好的Hook代码拷贝到项目中,编写完成后运行即可。