3- Insecure Data Storage - Part 1

InsecureDataStorage1Activity.java
java
package jakhar.aseem.diva;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class InsecureDataStorage1Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_insecure_data_storage1);
}
public void saveCredentials(View view) {
SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor spedit = spref.edit();
EditText usr = (EditText) findViewById(R.id.ids1Usr);
EditText pwd = (EditText) findViewById(R.id.ids1Pwd);
spedit.putString("user", usr.getText().toString());
spedit.putString("password", pwd.getText().toString());
spedit.commit();
Toast.makeText(this,"3rd party credentials saved successfully!", Toast.LENGTH_SHORT).show();
}
}Introducimos unas credenciales de prueba para ver como se están guardando
Listamos los paquetes para ver el nombre de diva
bash
adb shell pm list packages | grep divaSe habrá creado una carpeta llamada shared_prefs
adb shell
su
ls /data/data/jakhar.aseem.diva/shared_prefs/Y hay un xml con las creds en texto plano
jakhar.aseem.diva_preferences.xml
xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="password">ggttt</string>
<string name="user">test</string>
</map>El problema es de nuevo la forma de guardar credenciales (sobretodo si son de terceros como se menciona) Cualquiera con acceso root puede acceder o si la app está en android:allowBackup="true" y leer las creds de terceros en texto plano