Skip to content

Commit 10efbeb

Browse files
committed
Refactor GroupCheckAdmin unobfuscator and fix crash
1 parent 291616d commit 10efbeb

File tree

2 files changed

+21
-22
lines changed

2 files changed

+21
-22
lines changed

app/src/main/java/com/wmods/wppenhacer/xposed/core/devkit/Unobfuscator.java

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import android.hardware.SensorEventListener;
99
import android.net.Uri;
1010
import android.util.Log;
11+
import android.view.ContextMenu;
1112
import android.view.LayoutInflater;
1213
import android.view.Menu;
1314
import android.view.MenuInflater;
@@ -311,7 +312,7 @@ public synchronized static Class<?> loadForwardClassMethod(ClassLoader classLoad
311312
// TODO: Classes and Methods for HideView
312313
public synchronized static Method loadHideViewSendReadJob(ClassLoader classLoader) throws Exception {
313314
return UnobfuscatorCache.getInstance().getMethod(classLoader, () -> {
314-
var classData = dexkit.getClassData(findFirstClassUsingName(classLoader, StringMatchType.EndsWith,"SendReadReceiptJob"));
315+
var classData = dexkit.getClassData(findFirstClassUsingName(classLoader, StringMatchType.EndsWith, "SendReadReceiptJob"));
315316
var methodResult = classData.findMethod(new FindMethod().matcher(new MethodMatcher().addUsingString("receipt", StringMatchType.Equals)));
316317
if (methodResult.isEmpty()) {
317318
methodResult = classData.getSuperClass().findMethod(new FindMethod().matcher(new MethodMatcher().addUsingString("receipt", StringMatchType.Equals)));
@@ -1364,25 +1365,23 @@ public synchronized static Method loadJidFactory(ClassLoader loader) throws Exce
13641365

13651366
public synchronized static Method loadGroupCheckAdminMethod(ClassLoader loader) throws Exception {
13661367
return UnobfuscatorCache.getInstance().getMethod(loader, () -> {
1367-
var classData = dexkit.findClass(FindClass.create().matcher(ClassMatcher.create().addUsingString("saveGroupParticipants/INSERT_GROUP_PARTICIPANT_USER")));
1368-
var resultMethod = classData.findMethod(
1369-
FindMethod.create().matcher(MethodMatcher.create().paramCount(2).paramTypes(null, "com.whatsapp.jid.UserJid")
1370-
.opNames(List.of(
1371-
"const/4",
1372-
"invoke-static",
1373-
"const/4",
1374-
"invoke-static",
1375-
"invoke-virtual",
1376-
"move-result-object",
1377-
"const/4",
1378-
"invoke-virtual",
1379-
"move-result-object",
1380-
"if-nez"
1381-
), OpCodeMatchType.StartsWith)
1382-
)).singleOrNull();
1383-
if (resultMethod == null)
1384-
throw new RuntimeException("GroupCheckAdmin method not found");
1385-
return resultMethod.getMethodInstance(loader);
1368+
1369+
var classData = dexkit.findClass(FindClass.create().matcher(ClassMatcher.create().addUsingString("saveGroupParticipants/INSERT_GROUP_PARTICIPANT_USER"))).singleOrNull();
1370+
var GroupChatClass = findFirstClassUsingName(loader, StringMatchType.EndsWith, "GroupChatInfoActivity");
1371+
var onCreateMenu = ReflectionUtils.findMethodUsingFilter(GroupChatClass, method -> method.getName().equals("onCreateContextMenu"));
1372+
var onCreateMenuData = dexkit.getMethodData(onCreateMenu);
1373+
var invokes = onCreateMenuData.getInvokes().stream().filter(m -> Objects.equals(m.getDeclaredClassName(), classData.getName())).collect(Collectors.toList());
1374+
for (var invoke : invokes) {
1375+
var invokeMethod = invoke.getMethodInstance(loader);
1376+
if (invokeMethod.getParameterCount() != 2 || invokeMethod.getReturnType() != boolean.class)
1377+
continue;
1378+
if (invokeMethod.getParameterTypes()[1].getName().equals("com.whatsapp.jid.UserJid")) {
1379+
XposedBridge.log("FIND: " + invokeMethod);
1380+
return invokeMethod;
1381+
}
1382+
1383+
}
1384+
throw new RuntimeException("GroupCheckAdmin method not found");
13861385
});
13871386
}
13881387

@@ -2039,6 +2038,6 @@ public static Method loadConvertJidToLid(ClassLoader loader) throws Exception {
20392038
}
20402039

20412040
public static Class loadWaContactData(ClassLoader classLoader) throws Exception {
2042-
return UnobfuscatorCache.getInstance().getClass(classLoader, () -> findFirstClassUsingStrings(classLoader,StringMatchType.EndsWith,"WaContactData"));
2041+
return UnobfuscatorCache.getInstance().getClass(classLoader, () -> findFirstClassUsingStrings(classLoader, StringMatchType.EndsWith, "WaContactData"));
20432042
}
20442043
}

app/src/main/java/com/wmods/wppenhacer/xposed/features/others/GroupAdmin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
4646
var field = ReflectionUtils.getFieldByType(targetObj.getClass(), grpcheckAdmin.getDeclaringClass());
4747
var grpParticipants = field.get(targetObj);
4848
var jidGrp = jidFactory.invoke(null, chatCurrentJid.getUserRawString());
49-
var result = grpcheckAdmin.invoke(grpParticipants, jidGrp, userJid.phoneJid);
49+
var result = grpcheckAdmin.invoke(grpParticipants, jidGrp, userJid.userJid);
5050
var view = (View) targetObj;
5151
var context = view.getContext();
5252
ImageView iconAdmin;

0 commit comments

Comments
 (0)