I have been trying to reverse engineer an Android application and was wondering how I would go about logging a certain string. Here is the method I am trying to log the String from:
.method private getValue(Ljava/lang/String;)[B
.locals 2
.param p1, "parameter" # Ljava/lang/String;
.prologue
.line 216
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
iget-object v1, p0, Lcom/directory/theseSettings;->newSettings:Lcom/directory/NewSettings;
iget-object v1, v1, Lcom/directory/NewSettings;->newValue:Ljava/lang/String;
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
const-string v1, "UTF-8"
invoke-static {v0, v1}, Lorg/apache/http/util/EncodingUtils;->getBytes(Ljava/lang/String;Ljava/lang/String;)[B
move-result-object v0
return-object v0
.end method
For reference, here is that method again when decompiled with jadx.
private byte[] getValue(String parameter) {
return EncodingUtils.getBytes(this.newSettings.newValue + parameter, "UTF-8");
}
I was hoping to log “this.newSettings.newValue” as seen in the jadx method, and I’m guessing it would be:
iget-object v1, v1, Lcom/directory/NewSettings;->newValue:Ljava/lang/String;
In the smali.
The only problem is I don’t know how to log it, I am able to log “parameter” by using
const-string v0, “PARAMETER:”
invoke-static {v0, p1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
But I’m not sure how to go about it if its referenced within the method, rather than being "passed" to it.