diff --git a/FuckMFS.apk b/FuckMFS.apk index b5f92ec4aa7eb381d7e5510b8cbb7258e0d77f27..c5c830f5f87d62f868f09f3ce58e95c3bb05202f 100644 Binary files a/FuckMFS.apk and b/FuckMFS.apk differ diff --git a/README.md b/README.md index a790cd1540d675492cadb49f5f1fa9fc84d88f57..5d2d73c105bcf510da281279ecb27312eda2c3cd 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,45 @@ 是一个 Xposed æ¨¡å— -æœ€è¿‘å‡ºçŽ°äº†å…¬å…±åœºåˆæŸ¥æ‰‹æœºçš„äº‹æƒ…ã€æ”¶é›†åˆ°ä¸€ä¸ªå为 MFSocket çš„å–è¯è½¯ä»¶å®¢æˆ·ç«¯ã€‚ 副本 : [MFSocket.apk](MFSocket.apk?raw=true) +æœ€è¿‘å‡ºçŽ°äº†å…¬å…±åœºåˆæŸ¥æ‰‹æœºçš„äº‹æƒ…ã€æ”¶é›†åˆ°ä¸€ä¸ªå为 MFSocket çš„å–è¯è½¯ä»¶å®¢æˆ·ç«¯ã€‚ 功能 : 阻æ¢è¯»å–è”系人çŸä¿¡åª’体文件和应用信æ¯ç‰å¹¶éšæœºè®¾å¤‡å’Œç½‘ç»œä¿¡æ¯ã€‚ +## MFSocket 类型 / 版本 + +ç›®å‰æœ‰ä¸‰ç§ä¸åŒç±»åž‹çš„ MFSocket 应用 + +1. com.Android.MFSocket + +å›¾æ ‡ä¸ºæ—§ç‰ˆAndroidé»˜è®¤åº”ç”¨å›¾æ ‡ 默认安å“ç¾å + +[查看所有版本](./mfsocket/0) + +最新版本为 1.1 峿Ÿäººæœ€è¿‘被查手机安装的应用 (虽然没有混淆ã€çœ‹èµ·æ¥å¾ˆå‡ã€ä½†æ˜¯ç¡®å®žæ˜¯ä»Žè¢«æŸ¥çš„æ‰‹æœºé‡Œæå–出æ¥çš„) + +2. com.Android.MFSocket / com.android.mfsocket + +å›¾æ ‡ä¸ºæ”¾å¤§é•œã€æœ‰meiyaçš„ç¾å + +[查看所有版本](./mfsocket/1) + +早期版本包å为 com.Android.MFSocket åŽæœŸä¸º com.android.mfsocket + +有混淆 比第一版æå–äº†æ›´å¤šæ•°æ® : 日历ã€é€šè¯è®°å½•ç‰ç‰ è¿˜ä¼šè¯»å– Telegramçš„èŠå¤©è®°å½• + +3. com.Android.MFSocket + +å›¾æ ‡ä¸ºå°ç”µè„‘ + +[所有版本](./mfsocket/2) + +有混淆 比第二ç§å¤šäº†å››ä¸ªäºŒè¿›åˆ¶ç¨‹åºã€è²Œä¼¼è¿˜èƒ½root手机 + ## æ›´æ–° 06 / 23 : å¢žåŠ è”系人与SIMå¡å·éšæœºç”Ÿæˆã€çŸä¿¡è¿”回通知类ã€å›¾ç‰‡éŸ³é¢‘视频信æ¯éšæœºç”Ÿæˆã€åº”用列表返回国内白åå•应用。 06 / 23 : 更新国内应用白åå•列表 +06 / 26 : æ›´æ–°å¯¹å…¶ä»–ç‰ˆæœ¬çš„é€‚é… è¯·æ›´æ–° ## 感谢 diff --git a/app/src/main/java/io/kurumi/fuckmfs/FuckMFS.java b/app/src/main/java/io/kurumi/fuckmfs/FuckMFS.java index 2a6d4559eff80170830b482c4ff2c524aaeebb90..5c27997396876603e4063449db669c04cf6cb484 100644 --- a/app/src/main/java/io/kurumi/fuckmfs/FuckMFS.java +++ b/app/src/main/java/io/kurumi/fuckmfs/FuckMFS.java @@ -1,10 +1,12 @@ package io.kurumi.fuckmfs; +import android.bluetooth.BluetoothAdapter; import android.content.ContentResolver; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.database.Cursor; +import android.location.LocationManager; import android.net.Uri; import android.util.Log; import com.sollyu.android.appenv.helper.PhoneHelper; @@ -12,6 +14,7 @@ import com.sollyu.android.appenv.helper.RandomHelper; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; +import de.robv.android.xposed.XposedBridge; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; import java.io.BufferedOutputStream; @@ -22,738 +25,1004 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.LinkedList; import java.util.List; import org.json.JSONObject; +import android.telephony.TelephonyManager; +import de.robv.android.xposed.XC_MethodHook.MethodHookParam; +import java.net.NetworkInterface; +import android.net.wifi.WifiManager; +import java.io.IOException; public class FuckMFS implements IXposedHookLoadPackage { public static ClassLoader loader; + XC_MethodReplacement METHOD_EMPTY = new XC_MethodReplacement() { + + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + + return null; + + } + + }; + + final String[] whitePrefix = new String[] { + + "com.android", + "com.xiaomi", + "com.tencent", + "com.sina", + "com.baidu", + "com.zhihu", + "com.alibaba", + "com.xunlei", + "com.uc", + "com.douban", + "com.renren", + "com.coolapk", + "com.microsoft", + "cn.wps", + "tv.danmaku", + "com.sohu", + "com.cainiao", + "com.qualcomm" + + }; + @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam pkg) throws Throwable { - if (!"com.Android.MFSocket".equals(pkg.packageName)) { + loader = pkg.classLoader; - return; + if ("com.Android.MFSocket".equals(pkg.packageName)) { - } + try { - loader = pkg.classLoader; + Class.forName("com.Android.MFSocket.SystemMsg",false,pkg.classLoader); - // 阻æ¢SHELL执行 + // 阻æ¢SHELL执行 - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.ShellUtils", false, pkg.classLoader), - "execCommand", - String[].class, boolean.class, boolean.class, - new XC_MethodReplacement() { + try { - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.ShellUtils",false,pkg.classLoader), + "execCommand", + String[].class,boolean.class,boolean.class, + new XC_MethodReplacement() { - return Class - .forName("com.Android.MFSocket.ShellUtils$CommandResult") - .getConstructor(int.class, String.class, String.class) - .newInstance(-1, null, null); + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { - } + return Class + .forName("com.Android.MFSocket.ShellUtils$CommandResult") + .getConstructor(int.class,String.class,String.class) + .newInstance(-1,null,null); - }); + } - XC_MethodReplacement METHOD_EMPTY = new XC_MethodReplacement() { + }); - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + } catch (ClassNotFoundException e) {} - return null; - } - }; + // 阻æ¢è¯»å–è”系人 - // 阻æ¢è¯»å–è”系人 + try { - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.ContactsMsgOS20", false, pkg.classLoader), - "getContactOS20", - BufferedOutputStream.class, StringBuffer.class, int.class, - new XC_MethodReplacement() { + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.ContactsMsgOS20",false,pkg.classLoader), + "getContactOS20", + BufferedOutputStream.class,StringBuffer.class,int.class, + new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { - BufferedOutputStream out = (BufferedOutputStream) params.args[0]; - StringBuffer contatMsg = (StringBuffer) params.args[1]; - int oneTimeCount = (int)params.args[2]; + BufferedOutputStream out = (BufferedOutputStream) params.args[0]; + StringBuffer contatMsg = (StringBuffer) params.args[1]; + int oneTimeCount = (int)params.args[2]; - int contactConts = RandomHelper.getInstance().randomInt(1, 11); + int contactConts = RandomHelper.getInstance().randomInt(1,11); - StringBuffer count = new StringBuffer(); + StringBuffer count = new StringBuffer(); - count.append(contactConts); + count.append(contactConts); - sendData(out, count.toString()); + sendData(out,count.toString()); - int nSendCount = 0; + int nSendCount = 0; - for (int index = 1;index < contactConts;index ++) { + for (int index = 1;index < contactConts;index ++) { - RecordPackage.AppendItem(RandomHelper.getInstance().randomString(2, false, false, true), contatMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomTelephonyGetLine1Number(), contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendItem("", contatMsg); - RecordPackage.AppendRecord(contatMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomString(2,false,false,true),contatMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomTelephonyGetLine1Number(),contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendItem("",contatMsg); + RecordPackage.AppendRecord(contatMsg); - if (nSendCount % oneTimeCount == 0) { + if (nSendCount % oneTimeCount == 0) { - sendData(out, contatMsg.toString()); - contatMsg.setLength(0); + sendData(out,contatMsg.toString()); + contatMsg.setLength(0); - } + } - } + } - sendData(out, contatMsg.toString()); - contatMsg.setLength(0); + sendData(out,contatMsg.toString()); + contatMsg.setLength(0); - return null; - } + return null; + } - }); + }); - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.ContactsSIM", false, pkg.classLoader), - "getContact", - BufferedOutputStream.class, StringBuffer.class, int.class, - new XC_MethodReplacement() { + } catch (ClassNotFoundException e) {} - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { + try { - BufferedOutputStream out = (BufferedOutputStream) params.args[0]; - StringBuffer contatMsg = (StringBuffer) params.args[1]; - int oneTimeCount = (int)params.args[2]; + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.ContactsSIM",false,pkg.classLoader), + "getContact", + BufferedOutputStream.class,StringBuffer.class,int.class, + new XC_MethodReplacement() { - int simCount = RandomHelper.getInstance().randomInt(1, 3); + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { - int nSendCount = 0; + BufferedOutputStream out = (BufferedOutputStream) params.args[0]; + StringBuffer contatMsg = (StringBuffer) params.args[1]; + int oneTimeCount = (int)params.args[2]; - StringBuffer count = new StringBuffer(); + int simCount = RandomHelper.getInstance().randomInt(1,3); - count.append(simCount); + int nSendCount = 0; - sendData(out, count.toString()); + StringBuffer count = new StringBuffer(); + count.append(simCount); - String phonename = RandomHelper.getInstance().randomString(2, true, true, true); - String phoneNo = RandomHelper.getInstance().randomTelephonyGetLine1Number(); + sendData(out,count.toString()); - Log.i("PhoneContact", "name: " + phonename + " phone: " + phoneNo); - RecordPackage.AppendItem(phonename, contatMsg); - RecordPackage.AppendItem(phoneNo, contatMsg); - RecordPackage.AppendRecord(contatMsg); + String phonename = RandomHelper.getInstance().randomString(2,true,true,true); + String phoneNo = RandomHelper.getInstance().randomTelephonyGetLine1Number(); - nSendCount++; + Log.i("PhoneContact","name: " + phonename + " phone: " + phoneNo); - if (nSendCount % oneTimeCount == 0) { + RecordPackage.AppendItem(phonename,contatMsg); + RecordPackage.AppendItem(phoneNo,contatMsg); + RecordPackage.AppendRecord(contatMsg); - sendData(out, contatMsg.toString()); + nSendCount++; - contatMsg.setLength(0); + if (nSendCount % oneTimeCount == 0) { - } + sendData(out,contatMsg.toString()); + contatMsg.setLength(0); - sendData(out, contatMsg.toString()); - contatMsg.setLength(0); + } - return null; - } - }); + sendData(out,contatMsg.toString()); + contatMsg.setLength(0); - // åº”ç”¨ä¿¡æ¯ + return null; - final String[] whitePrefix = new String[] { + } + }); - "com.android", - "com.xiaomi", - "com.tencent", - "com.sina", - "com.baidu", - "com.zhihu", - "com.alibaba", - "com.xunlei", - "com.uc", - "com.douban", - "com.renren", - "com.coolapk", - "com.microsoft", - "cn.wps", - "tv.danmaku", - "com.sohu", - "com.cainiao", - "com.qualcomm" + } catch (ClassNotFoundException e) {} - }; + // åº”ç”¨ä¿¡æ¯ + try { - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.AppMsg", false, pkg.classLoader), - "GetAppMsg", - StringBuffer.class, - new XC_MethodReplacement() { + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.AppMsg",false,pkg.classLoader), + "GetAppMsg", + StringBuffer.class, + new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { - StringBuffer appMsg = (StringBuffer) params.args[0]; + StringBuffer appMsg = (StringBuffer) params.args[0]; - Context mContext = (Context) XposedHelpers.getObjectField(params.thisObject, "mContext"); + Context mContext = (Context) XposedHelpers.getObjectField(params.thisObject,"mContext"); - PackageManager pm = mContext.getPackageManager(); - List<PackageInfo> packages = pm.getInstalledPackages(12288); - int packageSize = packages.size(); + PackageManager pm = mContext.getPackageManager(); + List<PackageInfo> packages = pm.getInstalledPackages(12288); + int packageSize = packages.size(); - next : for (int i = 0; i < packageSize; i++) { + next : for (int i = 0; i < packageSize; i++) { - PackageInfo packageInfo = (PackageInfo) packages.get(i); + PackageInfo packageInfo = (PackageInfo) packages.get(i); - String appType = "system"; + String appType = "system"; - if ((packageInfo.applicationInfo.flags & 1) == 0) { + if ((packageInfo.applicationInfo.flags & 1) == 0) { - appType = "user"; + appType = "user"; - } + } - String appName = packageInfo.applicationInfo.loadLabel(pm).toString(); - String packageName = packageInfo.packageName; + String appName = packageInfo.applicationInfo.loadLabel(pm).toString(); + String packageName = packageInfo.packageName; - loop : while (true) { + loop : while (true) { - for (String prefix : whitePrefix) { + for (String prefix : whitePrefix) { - if (packageName.startsWith(prefix)) { + if (packageName.startsWith(prefix)) { - break loop; + break loop; - } + } - } + } - continue next; + continue next; - } + } - String versionName = packageInfo.versionName; - String appDir = packageInfo.applicationInfo.publicSourceDir; - String strDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis() - ((long)RandomHelper.getInstance().randomInt(30, 2000) * 24 * 60 * 1000))); - String sig = ""; - String md5 = ""; - - StringBuffer strPermissionsBuffer = new StringBuffer(); - try { - String[] sharedPkgList = pm.getPackageInfo(packageName, 4096).requestedPermissions; - if (sharedPkgList != null) { - for (String append : sharedPkgList) { - strPermissionsBuffer.append(append); - strPermissionsBuffer.append(","); - } - } - } catch (Exception e2) { - } + String versionName = packageInfo.versionName; + String appDir = packageInfo.applicationInfo.publicSourceDir; + String strDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(System.currentTimeMillis() - ((long)RandomHelper.getInstance().randomInt(30,2000) * 24 * 60 * 1000))); + String sig = ""; + String md5 = ""; + StringBuffer strPermissionsBuffer = new StringBuffer(); + try { + String[] sharedPkgList = pm.getPackageInfo(packageName,4096).requestedPermissions; + if (sharedPkgList != null) { + for (String append : sharedPkgList) { + strPermissionsBuffer.append(append); + strPermissionsBuffer.append(","); + } + } + } catch (Exception e2) { + } - RecordPackage.AppendItem(appName, appMsg); - RecordPackage.AppendItem(packageName, appMsg); - RecordPackage.AppendItem(versionName, appMsg); - RecordPackage.AppendItem(appType, appMsg); - RecordPackage.AppendItem(0, appMsg); - RecordPackage.AppendItem(strDate, appMsg); - RecordPackage.AppendItem(appDir, appMsg); - RecordPackage.AppendItem(strPermissionsBuffer.toString(), appMsg); - RecordPackage.AppendItem(sig, appMsg); - RecordPackage.AppendItem(md5, appMsg); - RecordPackage.AppendRecord(appMsg); - - } - - return null; - } - }); + RecordPackage.AppendItem(appName,appMsg); + RecordPackage.AppendItem(packageName,appMsg); + RecordPackage.AppendItem(versionName,appMsg); + RecordPackage.AppendItem(appType,appMsg); + RecordPackage.AppendItem(0,appMsg); + RecordPackage.AppendItem(strDate,appMsg); + RecordPackage.AppendItem(appDir,appMsg); + RecordPackage.AppendItem(strPermissionsBuffer.toString(),appMsg); + RecordPackage.AppendItem(sig,appMsg); + RecordPackage.AppendItem(md5,appMsg); + RecordPackage.AppendRecord(appMsg); - // 音频 / 视频 + } - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.AudioMsg", false, pkg.classLoader), - "getAudio", - BufferedOutputStream.class, StringBuffer.class, int.class, - new XC_MethodReplacement() { - - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { - - BufferedOutputStream out = (BufferedOutputStream) params.args[0]; - StringBuffer audioMsg = (StringBuffer) params.args[1]; - int nConfig = (int)params.args[2]; - - boolean bNeedMD5 = false; + return null; + } - switch (nConfig) { - case 0: - bNeedMD5 = false; - break; - case 1: - bNeedMD5 = true; - break; - case 2: - bNeedMD5 = false; - break; - case 3: - bNeedMD5 = true; - break; - } + }); - int count = RandomHelper.getInstance().randomInt(9, 114); + } catch (ClassNotFoundException e) {} - sendData(out, ((Integer)count).toString()); + // 音频 / 视频 + try { - for (int index = 0;index < count;index ++) { + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.AudioMsg",false,pkg.classLoader), + "getAudio", + BufferedOutputStream.class,StringBuffer.class,int.class, + new XC_MethodReplacement() { - RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(11, 45), true, true, true) + ".mp3", audioMsg); - RecordPackage.AppendItem("", audioMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(2, 5), true, true, false), audioMsg); - RecordPackage.AppendItem("file:///dev/null", audioMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 100, 30 * 60 * 1000), audioMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 1024, 30 * 1024), audioMsg); - RecordPackage.AppendItem("audio/mp3", audioMsg); - RecordPackage.AppendItem(((Long)System.currentTimeMillis() - ((long)RandomHelper.getInstance().randomInt(10, 30 * 24) * 24 * 60 * 1000)), audioMsg); - RecordPackage.AppendItem(bNeedMD5 ? RandomHelper.getInstance().randomString(16, true, false, true) : "", audioMsg); - RecordPackage.AppendRecord(audioMsg); + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { - sendData(out, audioMsg.toString()); - audioMsg.setLength(0); + BufferedOutputStream out = (BufferedOutputStream) params.args[0]; + StringBuffer audioMsg = (StringBuffer) params.args[1]; + int nConfig = (int)params.args[2]; - } + boolean bNeedMD5 = false; - sendData(out, audioMsg.toString()); - audioMsg.setLength(0); + switch (nConfig) { + case 0: + bNeedMD5 = false; + break; + case 1: + bNeedMD5 = true; + break; + case 2: + bNeedMD5 = false; + break; + case 3: + bNeedMD5 = true; + break; + } - return null; - } + int count = RandomHelper.getInstance().randomInt(9,114); - }); + sendData(out,((Integer)count).toString()); - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.VideoMsg", false, pkg.classLoader), - "getVideo", - BufferedOutputStream.class, StringBuffer.class, int.class, - new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { + for (int index = 0;index < count;index ++) { - BufferedOutputStream out = (BufferedOutputStream) params.args[0]; - StringBuffer videoMsg = (StringBuffer) params.args[1]; - int nConfig = (int)params.args[2]; + RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(11,45),true,true,true) + ".mp3",audioMsg); + RecordPackage.AppendItem("",audioMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(2,5),true,true,false),audioMsg); + RecordPackage.AppendItem("file:///dev/null",audioMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 100,30 * 60 * 1000),audioMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 1024,30 * 1024),audioMsg); + RecordPackage.AppendItem("audio/mp3",audioMsg); + RecordPackage.AppendItem(((Long)System.currentTimeMillis() - ((long)RandomHelper.getInstance().randomInt(10,30 * 24) * 24 * 60 * 1000)),audioMsg); + RecordPackage.AppendItem(bNeedMD5 ? RandomHelper.getInstance().randomString(16,true,false,true) : "",audioMsg); + RecordPackage.AppendRecord(audioMsg); - boolean bNeedMD5 = false; + sendData(out,audioMsg.toString()); + audioMsg.setLength(0); - switch (nConfig) { - case 0: - bNeedMD5 = false; - break; - case 1: - bNeedMD5 = true; - break; - case 2: - bNeedMD5 = false; - break; - case 3: - bNeedMD5 = true; - break; - } + } - int count = RandomHelper.getInstance().randomInt(9, 114); + sendData(out,audioMsg.toString()); + audioMsg.setLength(0); - sendData(out, ((Integer)count).toString()); + return null; + } + }); - for (int index = 0;index < count;index ++) { + } catch (ClassNotFoundException e) {} - RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(11, 45), true, true, true) + ".mp4", videoMsg); - RecordPackage.AppendItem("", videoMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(2, 5), true, true, false), videoMsg); - RecordPackage.AppendItem("file:///dev/null", videoMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 100, 30 * 60 * 1000), videoMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 1024, 30 * 1024), videoMsg); - RecordPackage.AppendItem("video/mp4", videoMsg); - RecordPackage.AppendItem(((Long)System.currentTimeMillis() - ((long)RandomHelper.getInstance().randomInt(10, 30 * 24) * 24 * 60 * 1000)), videoMsg); - RecordPackage.AppendItem(bNeedMD5 ? RandomHelper.getInstance().randomString(16, true, false, true) : "", videoMsg); - RecordPackage.AppendRecord(videoMsg); + try { - sendData(out, videoMsg.toString()); - videoMsg.setLength(0); + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.VideoMsg",false,pkg.classLoader), + "getVideo", + BufferedOutputStream.class,StringBuffer.class,int.class, + new XC_MethodReplacement() { - } + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { - sendData(out, videoMsg.toString()); - videoMsg.setLength(0); + BufferedOutputStream out = (BufferedOutputStream) params.args[0]; + StringBuffer videoMsg = (StringBuffer) params.args[1]; + int nConfig = (int)params.args[2]; - return null; - } + boolean bNeedMD5 = false; - }); + switch (nConfig) { + case 0: + bNeedMD5 = false; + break; + case 1: + bNeedMD5 = true; + break; + case 2: + bNeedMD5 = false; + break; + case 3: + bNeedMD5 = true; + break; + } + int count = RandomHelper.getInstance().randomInt(9,114); - // è“牙 + sendData(out,((Integer)count).toString()); - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.BtMsg", false, pkg.classLoader), - "getBtInfo", - StringBuffer.class, - METHOD_EMPTY); - // æ¤å¤„是å–å¾—å·²é…对设备 MACç‰åœ¨ä¸‹æ–¹systeminfo å¯å¿½ç•¥ + for (int index = 0;index < count;index ++) { - // å®šä½ + RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(11,45),true,true,true) + ".mp4",videoMsg); + RecordPackage.AppendItem("",videoMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(2,5),true,true,false),videoMsg); + RecordPackage.AppendItem("file:///dev/null",videoMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 100,30 * 60 * 1000),videoMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 1024,30 * 1024),videoMsg); + RecordPackage.AppendItem("video/mp4",videoMsg); + RecordPackage.AppendItem(((Long)System.currentTimeMillis() - ((long)RandomHelper.getInstance().randomInt(10,30 * 24) * 24 * 60 * 1000)),videoMsg); + RecordPackage.AppendItem(bNeedMD5 ? RandomHelper.getInstance().randomString(16,true,false,true) : "",videoMsg); + RecordPackage.AppendRecord(videoMsg); - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.GpsMsg", false, pkg.classLoader), - "getGpsInfo", - StringBuffer.class, - METHOD_EMPTY); + sendData(out,videoMsg.toString()); + videoMsg.setLength(0); - // ä½ç½®ä¿¡æ¯ å¯å¿½ç•¥ + } - // 相册 + sendData(out,videoMsg.toString()); + videoMsg.setLength(0); - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.ImageMsg", false, pkg.classLoader), - "getImage", - BufferedOutputStream.class, StringBuffer.class, int.class, - new XC_MethodReplacement() { + return null; + } - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { + }); - BufferedOutputStream out = (BufferedOutputStream) params.args[0]; - StringBuffer imageMsg = (StringBuffer) params.args[1]; - int nConfig = (int)params.args[2]; + } catch (ClassNotFoundException e) {} - boolean bNeedMD5 = false; - switch (nConfig) { - case 0: - bNeedMD5 = false; - break; - case 1: - bNeedMD5 = true; - break; - case 2: - bNeedMD5 = false; - break; - case 3: - bNeedMD5 = true; - break; - } + // è“牙 - int count = RandomHelper.getInstance().randomInt(9, 114); + try { - sendData(out, ((Integer)count).toString()); + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.BtMsg",false,pkg.classLoader), + "getBtInfo", + StringBuffer.class, + METHOD_EMPTY); - for (int index = 0;index < count;index ++) { + } catch (ClassNotFoundException e) {} - RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(11, 45), true, true, true) + ".png", imageMsg); - RecordPackage.AppendItem("", imageMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(2, 5), true, true, false), imageMsg); - RecordPackage.AppendItem("file:///dev/null", imageMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 100, 30 * 60 * 1000), imageMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 1024, 30 * 1024), imageMsg); - RecordPackage.AppendItem("image/png", imageMsg); - RecordPackage.AppendItem(((Long)System.currentTimeMillis() - ((long)RandomHelper.getInstance().randomInt(10, 30 * 24) * 24 * 60 * 1000)), imageMsg); - RecordPackage.AppendItem(bNeedMD5 ? RandomHelper.getInstance().randomString(16, true, false, true) : "", imageMsg); - RecordPackage.AppendRecord(imageMsg); + // æ¤å¤„是å–å¾—å·²é…对设备 MACç‰åœ¨ä¸‹æ–¹systeminfo å¯å¿½ç•¥ - sendData(out, imageMsg.toString()); - imageMsg.setLength(0); + // å®šä½ - } + try { - sendData(out, imageMsg.toString()); - imageMsg.setLength(0); + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.GpsMsg",false,pkg.classLoader), + "getGpsInfo", + StringBuffer.class, + METHOD_EMPTY); - return null; - } + } catch (ClassNotFoundException e) {} - }); + // ä½ç½®ä¿¡æ¯ å¯å¿½ç•¥ + // 相册 - // çŸä¿¡ + try { - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.SmsMsg", false, pkg.classLoader), - "getSms", - BufferedOutputStream.class, StringBuffer.class, int.class, - new XC_MethodReplacement() { + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.ImageMsg",false,pkg.classLoader), + "getImage", + BufferedOutputStream.class,StringBuffer.class,int.class, + new XC_MethodReplacement() { - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { - BufferedOutputStream out = (BufferedOutputStream) params.args[0]; - StringBuffer smsMsg = (StringBuffer) params.args[1]; - int oneTimeCount = (int)params.args[2]; + BufferedOutputStream out = (BufferedOutputStream) params.args[0]; + StringBuffer imageMsg = (StringBuffer) params.args[1]; + int nConfig = (int)params.args[2]; - ContentResolver mResolver = (ContentResolver) XposedHelpers.getObjectField(params.thisObject, "mResolver"); + boolean bNeedMD5 = false; - if (mResolver != null) { - Cursor cur; - String[] smsBox = new String[]{"content://sms/inbox", "content://sms/sent", "content://sms/draft", "content://sms/outbox", "content://sms/failed", "content://sms/queued"}; - String[] projection = new String[]{"address", "person", "date", "protocol", "read", "type", "subject", "body"}; - int smsCount = 0; - for (int i = 0; i < 6; i++) { - cur = mResolver.query(Uri.parse(smsBox[i]), projection, null, null, "date desc"); - smsCount += cur.getCount(); - cur.close(); - } - StringBuffer count = new StringBuffer(); - - - count.append(smsCount); - - sendData(out, count.toString()); - - for (int j = 0; j < 6; j++) { - Uri uri = Uri.parse(smsBox[j]); - cur = mResolver.query(uri, projection, null, null, "date desc"); - - if (cur.moveToFirst()) { - int nameIdx = cur.getColumnIndexOrThrow("person"); - int addressIdx = cur.getColumnIndexOrThrow("address"); - int dateIdx = cur.getColumnIndexOrThrow("date"); - int prtclIdx = cur.getColumnIndexOrThrow("protocol"); - int readIdx = cur.getColumnIndexOrThrow("read"); - int subjectIdx = cur.getColumnIndexOrThrow("subject"); - int bodyIdx = cur.getColumnIndexOrThrow("body"); - int typeIdx = cur.getColumnIndexOrThrow("type"); - do { - String person = cur.getString(nameIdx); - String address = cur.getString(addressIdx); - long date = cur.getLong(dateIdx); - String subject = cur.getString(subjectIdx); - String body = cur.getString(bodyIdx); - int type = cur.getInt(typeIdx); - int read = cur.getInt(readIdx); - int protocol = cur.getInt(prtclIdx); - - if (!address.startsWith("1069")) { - - address = RandomHelper.getInstance().randomTelephonyGetLine1Number(); - - body = RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(9, 114), true, true, true); - - } - - RecordPackage.AppendItem(person, smsMsg); - RecordPackage.AppendItem(address, smsMsg); - RecordPackage.AppendItem(date, smsMsg); - RecordPackage.AppendItem(subject, smsMsg); - RecordPackage.AppendItem(body, smsMsg); - RecordPackage.AppendItem(type, smsMsg); - RecordPackage.AppendItem(read, smsMsg); - RecordPackage.AppendItem(protocol, smsMsg); - RecordPackage.AppendRecord(smsMsg); - if (0 % oneTimeCount == 0) { - sendData(out, smsMsg.toString()); - smsMsg.setLength(0); - } - } while (cur.moveToNext()); - } - sendData(out, smsMsg.toString()); - smsMsg.setLength(0); - cur.close(); + switch (nConfig) { + case 0: + bNeedMD5 = false; + break; + case 1: + bNeedMD5 = true; + break; + case 2: + bNeedMD5 = false; + break; + case 3: + bNeedMD5 = true; + break; + } + + int count = RandomHelper.getInstance().randomInt(9,114); + + sendData(out,((Integer)count).toString()); + + for (int index = 0;index < count;index ++) { + + RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(11,45),true,true,true) + ".png",imageMsg); + RecordPackage.AppendItem("",imageMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(2,5),true,true,false),imageMsg); + RecordPackage.AppendItem("file:///dev/null",imageMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 100,30 * 60 * 1000),imageMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomInt(1 * 1024,30 * 1024),imageMsg); + RecordPackage.AppendItem("image/png",imageMsg); + RecordPackage.AppendItem(((Long)System.currentTimeMillis() - ((long)RandomHelper.getInstance().randomInt(10,30 * 24) * 24 * 60 * 1000)),imageMsg); + RecordPackage.AppendItem(bNeedMD5 ? RandomHelper.getInstance().randomString(16,true,false,true) : "",imageMsg); + RecordPackage.AppendRecord(imageMsg); + + sendData(out,imageMsg.toString()); + imageMsg.setLength(0); + + } + + sendData(out,imageMsg.toString()); + imageMsg.setLength(0); + + return null; + } + + }); + + } catch (ClassNotFoundException e) {} + + + // çŸä¿¡ + + try { + + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.SmsMsg",false,pkg.classLoader), + "getSms", + BufferedOutputStream.class,StringBuffer.class,int.class, + new XC_MethodReplacement() { + + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { + + BufferedOutputStream out = (BufferedOutputStream) params.args[0]; + StringBuffer smsMsg = (StringBuffer) params.args[1]; + int oneTimeCount = (int)params.args[2]; + + ContentResolver mResolver = (ContentResolver) XposedHelpers.getObjectField(params.thisObject,"mResolver"); + + if (mResolver != null) { + Cursor cur; + String[] smsBox = new String[]{"content://sms/inbox", "content://sms/sent", "content://sms/draft", "content://sms/outbox", "content://sms/failed", "content://sms/queued"}; + String[] projection = new String[]{"address", "person", "date", "protocol", "read", "type", "subject", "body"}; + int smsCount = 0; + for (int i = 0; i < 6; i++) { + cur = mResolver.query(Uri.parse(smsBox[i]),projection,null,null,"date desc"); + smsCount += cur.getCount(); + cur.close(); + } + StringBuffer count = new StringBuffer(); + + + count.append(smsCount); + + sendData(out,count.toString()); + + for (int j = 0; j < 6; j++) { + Uri uri = Uri.parse(smsBox[j]); + cur = mResolver.query(uri,projection,null,null,"date desc"); + + if (cur.moveToFirst()) { + int nameIdx = cur.getColumnIndexOrThrow("person"); + int addressIdx = cur.getColumnIndexOrThrow("address"); + int dateIdx = cur.getColumnIndexOrThrow("date"); + int prtclIdx = cur.getColumnIndexOrThrow("protocol"); + int readIdx = cur.getColumnIndexOrThrow("read"); + int subjectIdx = cur.getColumnIndexOrThrow("subject"); + int bodyIdx = cur.getColumnIndexOrThrow("body"); + int typeIdx = cur.getColumnIndexOrThrow("type"); + do { + String person = cur.getString(nameIdx); + String address = cur.getString(addressIdx); + long date = cur.getLong(dateIdx); + String subject = cur.getString(subjectIdx); + String body = cur.getString(bodyIdx); + int type = cur.getInt(typeIdx); + int read = cur.getInt(readIdx); + int protocol = cur.getInt(prtclIdx); + + if (!address.startsWith("1069")) { + + address = RandomHelper.getInstance().randomTelephonyGetLine1Number(); + + body = RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(9,114),true,true,true); + + } + + RecordPackage.AppendItem(person,smsMsg); + RecordPackage.AppendItem(address,smsMsg); + RecordPackage.AppendItem(date,smsMsg); + RecordPackage.AppendItem(subject,smsMsg); + RecordPackage.AppendItem(body,smsMsg); + RecordPackage.AppendItem(type,smsMsg); + RecordPackage.AppendItem(read,smsMsg); + RecordPackage.AppendItem(protocol,smsMsg); + RecordPackage.AppendRecord(smsMsg); + if (0 % oneTimeCount == 0) { + sendData(out,smsMsg.toString()); + smsMsg.setLength(0); + } + } while (cur.moveToNext()); + } + sendData(out,smsMsg.toString()); + smsMsg.setLength(0); + cur.close(); + + + cur.close(); + } + + } + + return null; + } + }); + + } catch (ClassNotFoundException e) {} + + // 文件Hash + + try { + + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.MD5Msg",false,pkg.classLoader), + "fileMD5", + String.class, + new XC_MethodReplacement() { + + @Override + protected String replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + + return "1145141919810FDB1471EF51EC3A32CD"; + + } + }); + + } catch (ClassNotFoundException e) {} + + + + String[] networkOperator = new String[] { + + "46000","46002", // 移动 + "46001", // è”通 + "46003" , // 电信 + + }; + + final String no = networkOperator[RandomHelper.getInstance().randomInt(0,4)]; + + try { + + StringBuilder json = new StringBuilder(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(pkg.classLoader.getResourceAsStream("assets/phone.json"))); + + String line; + + while ((line = reader.readLine()) != null) { + + json.append(line + "\n"); + + } + PhoneHelper.getInstance().setPhoneJsonObject(new JSONObject(json.toString())); + + } catch (Exception ex) {} + + try { + + XposedHelpers.findAndHookMethod( + Class.forName("com.Android.MFSocket.SystemMsg",false,pkg.classLoader), + "getSystemMsg", + StringBuffer.class, + new XC_MethodReplacement() { + + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { + + StringBuffer sysMsg = (StringBuffer) params.args[0]; + + RecordPackage.AppendItem("STAT",sysMsg); + RecordPackage.AppendItem(114514,sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("IMEI",sysMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomTelephonyGetDeviceId(),sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("IMSI",sysMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomSimSubscriberId(),sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("IMOS",sysMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomBuildVersionName(),sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("INET",sysMsg); + RecordPackage.AppendItem(no,sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("ISIM",sysMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomTelephonySimSerialNumber(),sysMsg); + RecordPackage.AppendRecord(sysMsg); + try { + RecordPackage.AppendItem("WIFIMAC",sysMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomWifiInfoMacAddress(),sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("BTMAC",sysMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomWifiInfoMacAddress(),sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("OWNER",sysMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(1,11),true,true,true),sysMsg); + RecordPackage.AppendRecord(sysMsg); + } catch (Exception e) { + e.printStackTrace(); + } + + String mf = "HUAWEI"; + String name = "P10"; + String model = "VTR-AL00"; + + + try { + + + ArrayList<String> mfList = PhoneHelper.getInstance().getManufacturerList(); + + mf = mfList.get(RandomHelper.getInstance().randomInt(0,mfList.size())); + + HashMap<String, String> modelList = PhoneHelper.getInstance().getModelList(mf); + + + name = (String) modelList.keySet().toArray()[RandomHelper.getInstance().randomInt(0,modelList.size())]; + model = modelList.get(name); + + } catch (Exception ex) {} + + RecordPackage.AppendItem("MODEL",sysMsg); + RecordPackage.AppendItem(model,sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("MANUFACTURE",sysMsg); + RecordPackage.AppendItem(mf,sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("RELEASE",sysMsg); + RecordPackage.AppendItem(RandomHelper.getInstance().randomBuildVersionName(),sysMsg); + RecordPackage.AppendRecord(sysMsg); + RecordPackage.AppendItem("NAME",sysMsg); + RecordPackage.AppendItem(name,sysMsg); + RecordPackage.AppendRecord(sysMsg); + + return null; + + } + }); + + return; + + } catch (ClassNotFoundException e) {} + + } catch (ClassNotFoundException ex) {} + + } + + if (!"com.android.mfsocket".equals(pkg.packageName)) { + + return; + + } else { + + // åº”ç”¨ä¿¡æ¯ + + XposedHelpers.findAndHookMethod( + PackageManager.class, + "getInstalledPackages", + int.class, + new XC_MethodHook() { + + @Override + protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws java.lang.Throwable { + + List<PackageInfo> installedPackages = (List<PackageInfo>) param.getResult(); + + List<PackageInfo> result = new LinkedList<>(); + + for (PackageInfo app : installedPackages) { + + for (String prefix : whitePrefix) { + + if (app.packageName.startsWith(prefix)) { + + result.add(app); + + } + + } - cur.close(); } - } + param.setResult(result); + + + } + + + }); + + // SHELL + + XposedBridge.hookAllMethods(Runtime.class,"exec",new XC_MethodReplacement() { + + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { + + param.setThrowable(new IOException()); + + return null; + } + }); + + // è“牙Mac与设备 + + XposedHelpers.findAndHookMethod(BluetoothAdapter.class, + "getAddress", + new XC_MethodReplacement() { + + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + + return RandomHelper.getInstance().randomWifiInfoMacAddress(); + + } + + + }); + + // WIFI MAC 与 å…¶ä»–ç½‘ç»œä¿¡æ¯ + + XposedHelpers.findAndHookMethod(WifiManager.class,"getConnectionInfo",METHOD_EMPTY); + + XposedHelpers.findAndHookMethod(NetworkInterface.class,"getNetworkInterfaces",new XC_MethodReplacement() { + + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + return new LinkedList<>(); + } + + }); + + XposedHelpers.findAndHookMethod(WifiManager.class,"getConfiguredNetworks",new XC_MethodReplacement() { + + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + return new LinkedList(); + } + }); + + XposedHelpers.findAndHookMethod(BluetoothAdapter.class, + "getBondedDevices", + new XC_MethodReplacement() { + + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + + return new LinkedHashSet(); + + } + + + }); + + // å› ä¸ºä»£ç æ··æ·†ä»¥åŠå†…容夿‚ 且咱没什么时间 这里直接打掉好了 (çŸä¿¡ã€åª’ä½“æ–‡ä»¶ã€æ—¥åކã€é€šè¯è®°å½•ç‰ç‰ç‰...) + + XposedBridge.hookAllMethods(ContentResolver.class, + "query", + new XC_MethodHook() { + + @Override + protected void beforeHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable { - return null; - } - }); + param.args[0] = Uri.parse("content://null"); - // 文件Hash + } - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.MD5Msg", false, pkg.classLoader), - "fileMD5", - String.class, - new XC_MethodReplacement() { + }); - @Override - protected String replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + // å®šä½ - return "1145141919810FDB1471EF51EC3A32CD"; + XposedHelpers.findAndHookMethod(LocationManager.class,"getLastKnownLocation",METHOD_EMPTY); - } - }); + // è®¾å¤‡ä¿¡æ¯ + XposedBridge.hookAllMethods(TelephonyManager.class,"getDeviceId",new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { - String[] networkOperator = new String[] { + return RandomHelper.getInstance().randomTelephonyGetDeviceId(); - "46000","46002", // 移动 - "46001", // è”通 - "46003" , // 电信 + } + }); - }; + XposedBridge.hookAllMethods(TelephonyManager.class,"getImei",new XC_MethodReplacement() { - final String no = networkOperator[RandomHelper.getInstance().randomInt(0, 4)]; + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { - try { + return RandomHelper.getInstance().randomTelephonyGetDeviceId(); - StringBuilder json = new StringBuilder(); + } + }); - BufferedReader reader = new BufferedReader(new InputStreamReader(pkg.classLoader.getResourceAsStream("assets/phone.json"))); + XposedBridge.hookAllMethods(TelephonyManager.class,"getMeid",new XC_MethodReplacement() { - String line; + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { - while ((line = reader.readLine()) != null) { + return RandomHelper.getInstance().randomTelephonyGetDeviceId(); - json.append(line + "\n"); + } + }); - } + XposedBridge.hookAllMethods(TelephonyManager.class,"getSubscriberId",new XC_MethodReplacement() { - PhoneHelper.getInstance().setPhoneJsonObject(new JSONObject(json.toString())); + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { - } catch (Exception ex) {} + return RandomHelper.getInstance().randomTelephonyGetDeviceId(); - XposedHelpers.findAndHookMethod( - Class.forName("com.Android.MFSocket.SystemMsg", false, pkg.classLoader), - "getSystemMsg", - StringBuffer.class, - new XC_MethodReplacement() { + } + }); - @Override - protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam params) throws Throwable { + XposedBridge.hookAllMethods(TelephonyManager.class,"getLine1Number",new XC_MethodReplacement() { - StringBuffer sysMsg = (StringBuffer) params.args[0]; + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { - RecordPackage.AppendItem("STAT", sysMsg); - RecordPackage.AppendItem(114514, sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("IMEI", sysMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomTelephonyGetDeviceId(), sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("IMSI", sysMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomSimSubscriberId(), sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("IMOS", sysMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomBuildVersionName(), sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("INET", sysMsg); - RecordPackage.AppendItem(no, sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("ISIM", sysMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomTelephonySimSerialNumber(), sysMsg); - RecordPackage.AppendRecord(sysMsg); - try { - RecordPackage.AppendItem("WIFIMAC", sysMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomWifiInfoMacAddress(), sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("BTMAC", sysMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomWifiInfoMacAddress(), sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("OWNER", sysMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomString(RandomHelper.getInstance().randomInt(1, 11), true, true, true), sysMsg); - RecordPackage.AppendRecord(sysMsg); - } catch (Exception e) { - e.printStackTrace(); - } + return RandomHelper.getInstance().randomTelephonyGetLine1Number(); - String mf = "HUAWEI"; - String name = "P10"; - String model = "VTR-AL00"; + } + }); - try { + XposedBridge.hookAllMethods(TelephonyManager.class,"getSimSerialNumber",new XC_MethodReplacement() { + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { - ArrayList<String> mfList = PhoneHelper.getInstance().getManufacturerList(); + return RandomHelper.getInstance().randomTelephonySimSerialNumber(); - mf = mfList.get(RandomHelper.getInstance().randomInt(0, mfList.size())); + } + }); - HashMap<String, String> modelList = PhoneHelper.getInstance().getModelList(mf); + // è®¾å¤‡ä¿¡æ¯ - name = (String) modelList.keySet().toArray()[RandomHelper.getInstance().randomInt(0, modelList.size())]; - model = modelList.get(name); + XposedBridge.hookAllMethods(Class.forName("com.android.mfsocket.b",false,pkg.classLoader),"a",new XC_MethodReplacement() { - } catch (Exception ex) {} + @Override + protected Object replaceHookedMethod(XC_MethodHook.MethodHookParam p1) throws Throwable { + return true; + } + }); - RecordPackage.AppendItem("MODEL", sysMsg); - RecordPackage.AppendItem(model, sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("MANUFACTURE", sysMsg); - RecordPackage.AppendItem(mf, sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("RELEASE", sysMsg); - RecordPackage.AppendItem(RandomHelper.getInstance().randomBuildVersionName(), sysMsg); - RecordPackage.AppendRecord(sysMsg); - RecordPackage.AppendItem("NAME", sysMsg); - RecordPackage.AppendItem(name, sysMsg); - RecordPackage.AppendRecord(sysMsg); + } - return null; - } - }); } - public static void sendData(BufferedOutputStream out, String data) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, NoSuchMethodException { + public static void sendData(BufferedOutputStream out,String data) throws ClassNotFoundException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, NoSuchMethodException { - Class.forName("com.Android.MFSocket.SocketTrans", true, loader) - .getMethod("sendData", BufferedOutputStream.class, String.class) - .invoke(null, out, data); + Class.forName("com.Android.MFSocket.SocketTrans",true,loader) + .getMethod("sendData",BufferedOutputStream.class,String.class) + .invoke(null,out,data); } public static class RecordPackage { - public static void AppendItem(double paramDouble, StringBuffer paramStringBuffer) { + public static void AppendItem(double paramDouble,StringBuffer paramStringBuffer) { paramStringBuffer.append(paramDouble); paramStringBuffer.append("#/}.[*#"); } - public static void AppendItem(int paramInt, StringBuffer paramStringBuffer) { + public static void AppendItem(int paramInt,StringBuffer paramStringBuffer) { paramStringBuffer.append(paramInt); paramStringBuffer.append("#/}.[*#"); } - public static void AppendItem(long paramLong, StringBuffer paramStringBuffer) { + public static void AppendItem(long paramLong,StringBuffer paramStringBuffer) { paramStringBuffer.append(paramLong); paramStringBuffer.append("#/}.[*#"); } - public static void AppendItem(String paramString, StringBuffer paramStringBuffer) { + public static void AppendItem(String paramString,StringBuffer paramStringBuffer) { paramStringBuffer.append(paramString); paramStringBuffer.append("#/}.[*#"); } diff --git a/mfsocket/0/1.0-1.apk b/mfsocket/0/1.0-1.apk new file mode 100644 index 0000000000000000000000000000000000000000..0f436423135685488f82aaa241aefb43dea1d27a Binary files /dev/null and b/mfsocket/0/1.0-1.apk differ diff --git a/mfsocket/0/1.0-2.apk b/mfsocket/0/1.0-2.apk new file mode 100644 index 0000000000000000000000000000000000000000..5614817b8608a8d6ee053d0a06d01b17970d9bbd Binary files /dev/null and b/mfsocket/0/1.0-2.apk differ diff --git a/mfsocket/0/1.0.apk b/mfsocket/0/1.0.apk new file mode 100644 index 0000000000000000000000000000000000000000..6477d95428993ea2bc048d2d61597e4b20a492fe Binary files /dev/null and b/mfsocket/0/1.0.apk differ diff --git a/MFSocket.apk b/mfsocket/0/1.1.apk similarity index 100% rename from MFSocket.apk rename to mfsocket/0/1.1.apk diff --git a/mfsocket/1/1.0.apk b/mfsocket/1/1.0.apk new file mode 100644 index 0000000000000000000000000000000000000000..582ed571c5e4ad818476fce521f537af438655ca Binary files /dev/null and b/mfsocket/1/1.0.apk differ diff --git a/mfsocket/1/2.0.apk b/mfsocket/1/2.0.apk new file mode 100644 index 0000000000000000000000000000000000000000..c3a5b54d8aaaefa45b8df1e6b64c86bfaad55583 Binary files /dev/null and b/mfsocket/1/2.0.apk differ diff --git a/mfsocket/1/2.1.1.4.apk b/mfsocket/1/2.1.1.4.apk new file mode 100644 index 0000000000000000000000000000000000000000..7ac70d1170b9a3034801991862ec6beab2a2472a Binary files /dev/null and b/mfsocket/1/2.1.1.4.apk differ diff --git a/mfsocket/1/2.1.34.apk b/mfsocket/1/2.1.34.apk new file mode 100644 index 0000000000000000000000000000000000000000..1f044d80a8181e3eed19d57c0cc32d52c81284b3 Binary files /dev/null and b/mfsocket/1/2.1.34.apk differ diff --git a/mfsocket/1/3.0-2.apk b/mfsocket/1/3.0-2.apk new file mode 100644 index 0000000000000000000000000000000000000000..6d688562d52685de42e1f16f1e4fdd6b960dae21 Binary files /dev/null and b/mfsocket/1/3.0-2.apk differ diff --git a/mfsocket/1/3.0-3.apk b/mfsocket/1/3.0-3.apk new file mode 100644 index 0000000000000000000000000000000000000000..978eb149e838750154baa1f3fed13821f8481255 Binary files /dev/null and b/mfsocket/1/3.0-3.apk differ diff --git a/mfsocket/1/3.0.apk b/mfsocket/1/3.0.apk new file mode 100644 index 0000000000000000000000000000000000000000..056b9d6795cdcd7ad84c47b50e452b048d0631a6 Binary files /dev/null and b/mfsocket/1/3.0.apk differ diff --git a/mfsocket/1/4.0.apk b/mfsocket/1/4.0.apk new file mode 100644 index 0000000000000000000000000000000000000000..b029f8259f2f8aebb9bb9c4d7a90fc93058dd420 Binary files /dev/null and b/mfsocket/1/4.0.apk differ diff --git a/mfsocket/1/5.0.apk b/mfsocket/1/5.0.apk new file mode 100644 index 0000000000000000000000000000000000000000..4a9e313d1c19c32fff159bdc2d4a8609d0d0af66 Binary files /dev/null and b/mfsocket/1/5.0.apk differ diff --git a/mfsocket/2/3cdd4e1829ee273a4b72f3a455fbb2e3f0a543c60c09daaffdbaac6204a8fd8b.apk b/mfsocket/2/3cdd4e1829ee273a4b72f3a455fbb2e3f0a543c60c09daaffdbaac6204a8fd8b.apk new file mode 100644 index 0000000000000000000000000000000000000000..1f044d80a8181e3eed19d57c0cc32d52c81284b3 Binary files /dev/null and b/mfsocket/2/3cdd4e1829ee273a4b72f3a455fbb2e3f0a543c60c09daaffdbaac6204a8fd8b.apk differ