用frida 修改陌陌定位 fake momo gps (知乎同标题为本作者发)

首先用 AndroidCrackTool 反编译apk,查看得到的AndroidManifest.xml,在里面寻找Loca关键字,发现有com.immomo.momo.map.activity.MyLocationAMapActivity类,

然后用AndroidCrackTool提前dex,发现只能提取一个,手工把apk改成zip,把里面所有的dex文件复制出来,然后逐个转换成jar文件。

把所有的jar文件用 jd-gui.jar 打开查看,在classes13.dex.jar中找到com.immomo.momo.map.activity.MyLocationAMapActivity类,发现是继承自 BaseAMapActivity,看了看反编译代码 (此处注意,不同版本的jd-gui对同一个jar文件反编译的结果不同,同一个类的方法,有的版本可以正确反编译,有的还是字节码,不分高低版本,都有可能出现)发现好像不是想要的类。

从AndroidManifest.xml中查找 service,发现一个com.amap.api.location.APSService,根据定位代码实现原理,定位本身应该是作为一个服务出现。于是在classes.dex.jar中找到此类,根据代码找到里面的定位信息都通过com.amap.api.location.AMapLocation类来传递。在此类中找到getLatitude,setLatitude,getLongitude,setLongitude方法。写frida脚本hook.

setTimeout(function(){
    Java.perform(function () {
        var hook = Java.use("com.amap.api.location.AMapLocation");
        var JSONObject = Java.use("org.json.JSONObject");
        
        hook.setLatitude.implementation = function () {
            
            console.log("setLatitude: " + arguments[0]);
            this.setLatitude(39.92284);
        };
        hook.setLongitude.implementation = function () {
            console.log("setLongitude: " + arguments[0]);
            this.setLongitude(116.51930);
        };
        hook.getLatitude.implementation = function () {
            
            console.log("getLatitude: " +this.getLatitude());
            return 39.92284;
        };
        hook.getLongitude.implementation = function () {

            console.log("getLongitude: " +this.getLongitude());
            return 116.51930;
        };

    });
    },0);

启动momo,然后 frida -U -l hookmmgps.js -F,刷新我的附近就可以了。

你可能感兴趣的:(技术笔记,frida,android,gps,定位,momo)