There is an android app that does something and print logs to display.
I need to change it by adding log to file function.
app.apk => dex2jar => app.jar
app.jar => javadec => readable java code.
I found function, that prints logs to display:
where is obj is string to print
there is a function to write a file
Ok, in java it should be easy:
writeDateFile("logDir/log.txt", obj.getBytes(), 0);
But how to paste it into smali file?
I need to change it by adding log to file function.
app.apk => dex2jar => app.jar
app.jar => javadec => readable java code.
I found function, that prints logs to display:
Code:
private void T10ShowResult(final int[] array, final boolean b) {
String obj = "";
[S]bla bla bla
and[/S]
[COLOR="#FF0000"]this.SendMessage(obj, array, -1, 1, GetResultService.stateFlag);[/COLOR]
}
where is obj is string to print
there is a function to write a file
Code:
public void writeDateFile(final String s, final byte[] b, final int n) throws Exception {
final FileOutputStream openFileOutput = this.context.openFileOutput(new String(s.getBytes("iso8859-1"), "utf-8"), n);
if (b != null && b.length > 0) {
openFileOutput.write(b);
}
openFileOutput.close();
}
writeDateFile("logDir/log.txt", obj.getBytes(), 0);
But how to paste it into smali file?
Code:
.method private T10ShowResult([IZ)V
.locals 13
.parameter "result"
.parameter "bRemoteKey"
.prologue
.line 1319
sget v0, Lcom/example/Service/GetResultService;->stateFlag:I
const/4 v3, 0x2
if-ne v0, v3, :cond_0
.line 1388
:goto_0
return-void
.line 1324
:cond_0
const/4 v9, 0x0
.line 1325
.local v9, bEnd:Z
const-string v12, ""
.line 1326
.local v12, str:Ljava/lang/String;
const-string v1, ""
.line 1327
.local v1, strFather:Ljava/lang/String;
const/16 v0, 0xa
new-array v2, v0, [I
.line 1328
.local v2, tempFatherNum:[I
const/4 v10, 0x0
.line 1330
.local v10, bFather:Z
const/4 v0, 0x0
const/4 v3, 0x0
aput v3, v2, v0
.line 1332
const/4 v0, 0x1
aget v11, p1, v0
.local v11, i:I
:goto_1
const/4 v0, 0x0
aget v0, p1, v0
if-lt v11, v0, :cond_2
.line 1383
if-eqz v10, :cond_1
.line 1385
const/4 v3, -0x1
const/4 v4, 0x4
sget v5, Lcom/example/Service/GetResultService;->stateFlag:I
move-object v0, p0
invoke-direct/range {v0 .. v5}, Lcom/example/Service/GetResultService;->SendMessage(Ljava/lang/String;[IIII)V
.line 1387
:cond_1
const/4 v6, -0x1
const/4 v7, 0x1
sget v8, Lcom/example/Service/GetResultService;->stateFlag:I
move-object v3, p0
move-object v4, v12
move-object v5, p1
[SIZE=5][COLOR="#FF0000"] invoke-direct/range {v3 .. v8}, Lcom/example/Service/GetResultService;->SendMessage(Ljava/lang/String;[IIII)V[/COLOR][/SIZE]
goto :goto_0
.line 1334
:cond_2
aget v0, p1, v11
const v3, 0x186a1
if-ne v0, v3, :cond_4
.line 1332
:cond_3
:goto_2
add-int/lit8 v11, v11, 0x1
goto :goto_1
.line 1339
:cond_4
aget v0, p1, v11
const v3, 0x989680
if-ge v0, v3, :cond_7
.line 1341
aget v0, p1, v11
const/4 v3, -0x1
if-eq v0, v3, :cond_3
.line 1345
aget v0, p1, v11
invoke-static {v0}, Lcom/example/Service/GetResultService;->IsFatherNumber(I)Z
move-result v0
if-eqz v0, :cond_6
.line 1347
const/4 v0, 0x0
aget v0, v2, v0
add-int/lit8 v0, v0, 0x1
aget v3, p1, v11
aput v3, v2, v0
.line 1348
const/4 v0, 0x0
aget v3, v2, v0
add-int/lit8 v3, v3, 0x1
aput v3, v2, v0
.line 1350
if-eqz v10, :cond_5
.line 1352
new-instance v0, Ljava/lang/StringBuilder;
invoke-static {v1}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;
move-result-object v3
invoke-direct {v0, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
const-string v3, ",,,, "
invoke-virtual {v0, v3}, 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 v1
.line 1354
:cond_5
new-instance v0, Ljava/lang/StringBuilder;
invoke-static {v1}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;
move-result-object v3
invoke-direct {v0, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
aget v3, p1, v11
invoke-virtual {p0, v3}, Lcom/example/Service/GetResultService;->GetSpeakCardStr(I)Ljava/lang/String;
move-result-object v3
invoke-virtual {v0, v3}, 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 v1
.line 1355
const/4 v10, 0x1
.line 1356
goto :goto_2
.line 1359
:cond_6
if-nez v9, :cond_3
.line 1363
new-instance v0, Ljava/lang/StringBuilder;
invoke-static {v12}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;
move-result-object v3
invoke-direct {v0, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
aget v3, p1, v11
invoke-virtual {p0, v3}, Lcom/example/Service/GetResultService;->T10GetSpeakStr(I)Ljava/lang/String;
move-result-object v3
invoke-virtual {v0, v3}, 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 v12
.line 1364
add-int/lit8 v0, v11, 0x1
aget v0, p1, v0
const v3, 0x989680
if-ge v0, v3, :cond_3
.line 1366
new-instance v0, Ljava/lang/StringBuilder;
invoke-static {v12}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;
move-result-object v3
invoke-direct {v0, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
const-string v3, ",,,,, "
invoke-virtual {v0, v3}, 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 v12
.line 1369
goto/16 :goto_2
.line 1372
:cond_7
sget v0, Lcom/example/Service/GetResultService;->speakMode:I
if-eqz v0, :cond_8
const/4 v0, 0x1
aget v0, p1, v0
const/4 v3, 0x2
if-ne v0, v3, :cond_8
if-eqz p2, :cond_9
.line 1374
:cond_8
const/4 v9, 0x1
.line 1375
goto/16 :goto_2
.line 1378
:cond_9
new-instance v0, Ljava/lang/StringBuilder;
invoke-static {v12}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;
move-result-object v3
invoke-direct {v0, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V
const-string v3, "\n"
invoke-virtual {v0, v3}, 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 v12
goto/16 :goto_2
.end method