Skip to content

12- Harcoding Issues - Part 2

Pasted image 20260827214205

En este código parece ser que se crea una instancia de DivaJni y ejecuta el método access, se trata de un método nativo, no está en en este java, está en la librería nativa dentro del apk

java
public class Hardcode2Activity extends AppCompatActivity {
    private DivaJni djni;

    @Override // android.support.v7.app.AppCompatActivity, android.support.v4.app.FragmentActivity, android.support.v4.app.BaseFragmentActivityDonut, android.app.Activity
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hardcode2);
        this.djni = new DivaJni();
    }

    public void access(View view) {
        EditText hckey = (EditText) findViewById(R.id.hc2Key);
        if (this.djni.access(hckey.getText().toString()) != 0) {
            Toast.makeText(this, "Access granted! See you on the other side :)", 0).show();
        } else {
            Toast.makeText(this, "Access denied! See you in hell :D", 0).show();
        }
    }
}

El código de la clase DivaJni es el siguiente

java
public class DivaJni {
    private static final String soName = "divajni";

    public native int access(String str);

    public native int initiateLaunchSequence(String str);

    static {
        System.loadLibrary(soName);
    }
}

Es una clase puente hacia una librería nativa .so en C/C++

El .so está en DIVA/Resources/lib/arm64-v8a/libdivajni.so

Lo subimos a dogbolt.org

Pasted image 20260828104934

La función que nos interesa es Java_jakhar_aseem_diva_DivaJni_access que contiene el vendor key en texto plano:

c
bool Java_jakhar_aseem_diva_DivaJni_access(long *param_1,undefined8 param_2,undefined8 param_3)

{
  int iVar1;
  char *__s2;
  
  __s2 = (char *)(**(code **)(*param_1 + 0x548))(param_1,param_3,0);
  iVar1 = strncmp("olsdfgad;lh",__s2,0xb);
  return iVar1 == 0;
}
Pasted image 20260828104645

Notas personales de seguridad ofensiva.