首页
社区
课程
招聘
[原创]Java虚拟机拦截之GPS信息伪造
发表于: 2013-11-16 10:25 10338

[原创]Java虚拟机拦截之GPS信息伪造

2013-11-16 10:25
10338
标 题: Java虚拟机拦截之GPS信息伪造
作 者: 蟑螂一号
时 间: 2013-11-16 10:40:00
原文链接:http://www.sanwho.com/373.html
   android中java层拦截涉及so注入,动态加载jar技术。相关技术实现细节可以参考古河大哥的libinject.so以及相关动态加载技术的文章。由于java层拦截是修改服务代理达到目的,服务代理中的关键函数如下:

transact(int arg0, Parcel arg1, Parcel arg2, int arg3)

函数中arg0表示函数调用编号,arg1表示请求数据包容器,arg2表示应答数据包容器,arg3不用管。

以下是gps经纬度伪造的关键修改处,仅供学习交流。

@Override
public boolean transact(int arg0, Parcel arg1, Parcel arg2, int arg3)
throws RemoteException {
// TODO Auto-generated method stub

Log.i(“hooklocation”, “transact**********:” + arg0);
// if(true)
// {
// Log.i(“hooklocation”,”transact**********return true”);
// return true;
// }
int getLastKnowLocation = HookUtil.getStaticFiled(
“android.location.ILocationManager$Stub”,
“TRANSACTION_getLastKnownLocation”);
Log.i(“hooklocation”, “********transact arg0:” + arg0);
if (arg0 == getLastKnowLocation) {
// Parcel data=arg1;
// Parcel reply=arg2;
Log.i(“hooklocation”, “getLastKnowLocation**********:” + arg0);
arg2.setDataPosition(0);
arg1.setDataPosition(0);
arg1.enforceInterface(“android.location.ILocationManager”);
java.lang.String _arg0;
_arg0 = arg1.readString();
Log.i(“hooklocation”, “_arg0:” + _arg0);
android.location.Location _result = new Location(_arg0);
_result.setLatitude(1111111111111111.12);
_result.setAltitude(2222222222222222.12);
arg2.writeNoException();
if (_result != null) {
arg2.writeInt(1);
_result.writeToParcel(arg2,
android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
Log.i(“hooklocation”, “_result:” + _result);
} else {
Log.i(“hooklocation”, “_result:null”);
arg2.writeInt(0);
}
//Log.i(“hooklocation”, “arg2:” + arg);
arg2.setDataPosition(0);
return true;
/*
* Log.i(“hooklocation”, “getLastKnowLocation**********:” + arg0);
* arg2.writeNoException(); arg2.writeInt(0); return true;
*/
}

return this.binder.transact(arg0, arg1, arg2, arg3);
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 243
活跃值: (247)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
java不懂
2013-11-16 11:07
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
where's 'HookUtil.java' ?
arg0 应该是修改过的吧,自己编码的,肯定不是原始的binder tranaction code
2013-11-17 15:48
0
雪    币: 181
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
蟑螂你好 我觉得咱俩可以聊聊。

从你发的帖子来看,我估计你也是在做android加固(这是我自己的叫法)。目前我也是在做这一方面的东西。

我也做gps拦截,但是我的思路与你不一样。我是注入到了system_server进程中拦截了Location服务,拦截requestLocatoinPrivider这个接口,从而做到了定位拦截(永远也获取不到定位信息)。
2013-11-18 13:37
0
雪    币: 259
活跃值: (3623)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
      你直接搞服务哇,那有点难度。
2013-11-18 18:02
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢lz提供的思路,结合金山的反编译后的代码,的确成功了,十分感谢!
2013-12-24 18:27
0
游客
登录 | 注册 方可回帖
返回
//