-
-
未解决 [求助]安卓使用XPOSED hook Google Advertising ID (广告ID) 50.00雪花
-
发表于: 2021-4-19 22:08 3823
-
最近在研究xposed 手机常规硬件信息都能HOOK到,谷歌广告ID一直不知道怎么HOOK,有懂的大佬吗,请指点一下,下面给出获取
谷歌广告ID的代码,方便大家查看
public class AdvertisingIdClient {
/**
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | * 这个方法是耗时的,不能在主线程调用 * / public static String getGoogleAdId(Context context) throws Exception { if (Looper.getMainLooper() = = Looper.myLooper()) { return "Cannot call in the main thread, You must call in the other thread" ; } PackageManager pm = context.getPackageManager(); pm.getPackageInfo( "com.android.vending" , 0 ); AdvertisingConnection connection = new AdvertisingConnection(); Intent intent = new Intent( "com.google.android.gms.ads.identifier.service.START" ); intent.setPackage( "com.google.android.gms" ); if (context.bindService(intent, connection, Context.BIND_AUTO_CREATE)) { try { AdvertisingInterface adInterface = new AdvertisingInterface( connection.getBinder()); return adInterface.getId(); } finally { context.unbindService(connection); } } return ""; } private static final class AdvertisingConnection implements ServiceConnection { boolean retrieved = false; private final LinkedBlockingQueue<IBinder> queue = new LinkedBlockingQueue<>( 1 ); public void onServiceConnected(ComponentName name, IBinder service) { try { this.queue.put(service); } catch (InterruptedException localInterruptedException) { } } public void onServiceDisconnected(ComponentName name) { } public IBinder getBinder() throws InterruptedException { if (this.retrieved) throw new IllegalStateException(); this.retrieved = true; return this.queue.take(); } } private static final class AdvertisingInterface implements IInterface { private IBinder binder; public AdvertisingInterface(IBinder pBinder) { binder = pBinder; } public IBinder asBinder() { return binder; } public String getId() throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); String id ; try { data.writeInterfaceToken( "com.google.android.gms.ads.identifier.internal.IAdvertisingIdService" ); binder.transact( 1 , data, reply, 0 ); reply.readException(); id = reply.readString(); } finally { reply.recycle(); data.recycle(); } return id ; } public boolean isLimitAdTrackingEnabled(boolean paramBoolean) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); boolean limitAdTracking; try { data.writeInterfaceToken( "com.google.android.gms.ads.identifier.internal.IAdvertisingIdService" ); data.writeInt(paramBoolean ? 1 : 0 ); binder.transact( 2 , data, reply, 0 ); reply.readException(); limitAdTracking = 0 ! = reply.readInt(); } finally { reply.recycle(); data.recycle(); } return limitAdTracking; } } |
}
调用
public class MainActivity extends AppCompatActivity {
public TextView tv;
@SuppressLint("ResourceType")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
try {
String adid = AdvertisingIdClient.getGoogleAdId(getApplicationContext());
Log.e("MainActivity", "adid: " + adid);
tv=(TextView)findViewById(R.id.textview_hw);
tv.setText(adid);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
以下是hook IMEI的代码,请问换成HOOK 谷歌广告ID的应该怎么改
hook_method("android.telephony.TelephonyManager", lpp.classLoader, "getDeviceId", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Log.i(SHARK, "开始HOOK IMEI...");
Object obj = param.getResult();
Log.i(SHARK, "IMEI 参数是:" + obj);
param.setResult("shark chilli");
}
});
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!