/*
** DroidPlugin Project
**
** Copyright(c) 2015 Andy Zhang <zhangyong232@gmail.com>
**
** This file is part of DroidPlugin.
**
** DroidPlugin is free software: you can redistribute it and/or
** modify it under the terms of the GNU Lesser General Public
** License as published by the Free Software Foundation, either
** version 3 of the License, or (at your option) any later version.
**
** DroidPlugin is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
** Lesser General Public License for more details.
**
** You should have received a copy of the GNU Lesser General Public
** License along with DroidPlugin. If not, see <http://www.gnu.org/licenses/lgpl.txt>
**
**/
package com.morgoo.droidplugin.hook.handle;
import android.content.Context;
import com.morgoo.droidplugin.hook.BaseHookHandle;
import com.morgoo.droidplugin.hook.HookedMethodHandler;
import com.morgoo.helper.compat.ISmsCompat;
/**
* Created by Andy Zhang(zhangyong232@gmail.com) on 2016/5/9.
*/
public class ISmsHookHandle extends BaseHookHandle{
private static final String TAG = ISmsHookHandle.class.getSimpleName();
public ISmsHookHandle(Context hostContext) {
super(hostContext);
}
@Override
protected void init() {
// interface ISms {
// List<SmsRawData> getAllMessagesFromIccEfForSubscriber(in int subId, String callingPkg);
// boolean updateMessageOnIccEfForSubscriber(in int subId, String callingPkg,
// int messageIndex, int newStatus, in byte[] pdu);
// boolean copyMessageToIccEfForSubscriber(in int subId, String callingPkg, int status,
// in byte[] pdu, in byte[] smsc);
// void sendDataForSubscriber(int subId, String callingPkg, in String destAddr,
// in String scAddr, in int destPort, in byte[] data, in PendingIntent sentIntent,
// in PendingIntent deliveryIntent);
// void sendDataForSubscriberWithSelfPermissions(int subId, String callingPkg, in String destAddr,
// in String scAddr, in int destPort, in byte[] data, in PendingIntent sentIntent,
// in PendingIntent deliveryIntent);
// void sendTextForSubscriber(in int subId, String callingPkg, in String destAddr,
// in String scAddr, in String text, in PendingIntent sentIntent,
// in PendingIntent deliveryIntent, in boolean persistMessageForNonDefaultSmsApp);
// void sendTextForSubscriberWithSelfPermissions(in int subId, String callingPkg,
// in String destAddr, in String scAddr, in String text, in PendingIntent sentIntent,
// in PendingIntent deliveryIntent);
// void injectSmsPduForSubscriber(
// int subId, in byte[] pdu, String format, in PendingIntent receivedIntent);
// void sendMultipartTextForSubscriber(in int subId, String callingPkg,
// in String destinationAddress, in String scAddress,
// in List<String> parts, in List<PendingIntent> sentIntents,
// in List<PendingIntent> deliveryIntents, in boolean persistMessageForNonDefaultSmsApp);
// boolean enableCellBroadcastForSubscriber(int subId, int messageIdentifier, int ranType);
// boolean disableCellBroadcastForSubscriber(int subId, int messageIdentifier, int ranType);
// boolean enableCellBroadcastRangeForSubscriber(int subId, int startMessageId, int endMessageId,
// int ranType);
// boolean disableCellBroadcastRangeForSubscriber(int subId, int startMessageId,
// int endMessageId, int ranType);
// int getPremiumSmsPermission(String packageName);
// int getPremiumSmsPermissionForSubscriber(int subId, String packageName);
// void setPremiumSmsPermission(String packageName, int permission);
// void setPremiumSmsPermissionForSubscriber(int subId, String packageName, int permission);
// boolean isImsSmsSupportedForSubscriber(int subId);
// boolean isSmsSimPickActivityNeeded(int subId);
// int getPreferredSmsSubscription();
// String getImsSmsFormatForSubscriber(int subId);
// boolean isSMSPromptEnabled();
// void sendStoredText(int subId, String callingPkg, in Uri messageUri, String scAddress,
// in PendingIntent sentIntent, in PendingIntent deliveryIntent);
// void sendStoredMultipartText(int subId, String callingPkg, in Uri messageUri,
// String scAddress, in List<PendingIntent> sentIntents,
// in List<PendingIntent> deliveryIntents);
sHookedMethodHandlers.put("getAllMessagesFromIccEfForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("updateMessageOnIccEfForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("copyMessageToIccEfForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("sendDataForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("sendDataForSubscriberWithSelfPermissions",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("sendTextForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("sendTextForSubscriberWithSelfPermissions",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("injectSmsPduForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("sendMultipartTextForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("enableCellBroadcastForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("disableCellBroadcastForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("enableCellBroadcastRangeForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("disableCellBroadcastRangeForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("getPremiumSmsPermission",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("getPremiumSmsPermissionForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("setPremiumSmsPermission",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("setPremiumSmsPermissionForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("isImsSmsSupportedForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("isSmsSimPickActivityNeeded",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("getPreferredSmsSubscription",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("getImsSmsFormatForSubscriber",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("isSMSPromptEnabled",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("sendStoredText",new MyBaseHandler(mHostContext));
sHookedMethodHandlers.put("sendStoredMultipartText",new MyBaseHandler(mHostContext));
addAllMethodFromHookedClass();
}
@Override
protected Class<?> getHookedClass() throws ClassNotFoundException {
return ISmsCompat.Class();
}
@Override
protected HookedMethodHandler newBaseHandler() throws ClassNotFoundException {
return new MyBaseHandler(mHostContext);
}
private static class MyBaseHandler extends ReplaceCallingPackageHookedMethodHandler {
public MyBaseHandler(Context context) {
super(context);
}
}
}