|
5 | 5 | import android.content.pm.PackageManager;
|
6 | 6 | import android.content.pm.Signature;
|
7 | 7 | import android.os.Build;
|
| 8 | +import android.util.Log; |
8 | 9 |
|
9 | 10 | // import com.lody.whale.WhaleRuntime;
|
10 | 11 | import com.wind.xposed.entry.XposedModuleEntry;
|
@@ -146,32 +147,44 @@ public MyInvocationHandler(Object base, String currentPackageName, String origin
|
146 | 147 | @Override
|
147 | 148 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
148 | 149 | if ("getPackageInfo".equals(method.getName())) {
|
149 |
| - if (args[0] != null && args[0] instanceof String) { |
150 |
| - String packageName = (String) args[0]; |
151 |
| - if (!packageName.equals(currentPackageName)) { |
152 |
| - return method.invoke(pmBase, args); |
| 150 | + try { |
| 151 | + if (args[0] != null && args[0] instanceof String) { |
| 152 | + String packageName = (String) args[0]; |
| 153 | + if (!packageName.equals(currentPackageName)) { |
| 154 | + return method.invoke(pmBase, args); |
| 155 | + } |
153 | 156 | }
|
154 |
| - } |
155 |
| - |
156 |
| - Integer flag = (Integer) args[1]; |
157 |
| - if (PackageManager.GET_SIGNATURES == flag) { |
158 |
| - PackageInfo packageInfo = (PackageInfo) method.invoke(pmBase, args); |
159 | 157 |
|
160 |
| - // 先获取这个方法返回的结果 |
161 |
| - if (packageInfo.signatures != null && packageInfo.signatures.length > 0) { |
162 |
| - // 替换结果里的签名信息 |
163 |
| - packageInfo.signatures[0] = new Signature(originalSignature); |
| 158 | + int flag = 0; |
| 159 | + if (args[1] instanceof Long) { |
| 160 | + flag = ((Long) args[1]).intValue(); |
| 161 | + } else if (args[1] instanceof Integer) { |
| 162 | + flag = ((Integer) args[1]); |
| 163 | + } else { |
| 164 | + flag = (int) args[1]; |
164 | 165 | }
|
165 |
| - return packageInfo; |
166 |
| - } else if (Build.VERSION.SDK_INT >= 28 && PackageManager.GET_SIGNING_CERTIFICATES == flag) { |
167 |
| - PackageInfo packageInfo = (PackageInfo) method.invoke(pmBase, args); |
168 |
| - if (packageInfo.signingInfo != null) { |
169 |
| - Signature[] signaturesArray = packageInfo.signingInfo.getApkContentsSigners(); |
170 |
| - if (signaturesArray != null && signaturesArray.length > 0) { |
171 |
| - signaturesArray[0] = new Signature(originalSignature); |
| 166 | + if (PackageManager.GET_SIGNATURES == flag) { |
| 167 | + PackageInfo packageInfo = (PackageInfo) method.invoke(pmBase, args); |
| 168 | + |
| 169 | + // 先获取这个方法返回的结果 |
| 170 | + if (packageInfo.signatures != null && packageInfo.signatures.length > 0) { |
| 171 | + // 替换结果里的签名信息 |
| 172 | + packageInfo.signatures[0] = new Signature(originalSignature); |
| 173 | + } |
| 174 | + return packageInfo; |
| 175 | + } else if (Build.VERSION.SDK_INT >= 28 && PackageManager.GET_SIGNING_CERTIFICATES == flag) { |
| 176 | + PackageInfo packageInfo = (PackageInfo) method.invoke(pmBase, args); |
| 177 | + if (packageInfo.signingInfo != null) { |
| 178 | + Signature[] signaturesArray = packageInfo.signingInfo.getApkContentsSigners(); |
| 179 | + if (signaturesArray != null && signaturesArray.length > 0) { |
| 180 | + signaturesArray[0] = new Signature(originalSignature); |
| 181 | + } |
172 | 182 | }
|
| 183 | + return packageInfo; |
173 | 184 | }
|
174 |
| - return packageInfo; |
| 185 | + } catch (Exception e) { |
| 186 | + android.util.Log.e("PackageSignatureHooker", " invoke PackageManager getPackageInfo failed !!", e); |
| 187 | + e.printStackTrace(); |
175 | 188 | }
|
176 | 189 | }
|
177 | 190 | return method.invoke(pmBase, args);
|
|
0 commit comments