またprintf()をし忘れたプログラムが見つかった。
とある暗号を解くプログラムらしい…
reversing200
ghidraのでコンパイル結果
undefined4 main(void)
{
int iVar1;
uint *puVar2;
int j;
uint before [14];
uint after [14];
before[0] = 0x7a;
before[1] = 0x69;
before[2] = 0x78;
before[3] = 0x6e;
before[4] = 0x62;
before[5] = 0x6f;
before[6] = 0x7c;
before[7] = 0x6b;
before[8] = 0x77;
before[9] = 0x78;
before[10] = 0x74;
before[11] = 0x38;
before[12] = 0x38;
before[13] = 100;
puVar2 = after;
for (iVar1 = 0xe; iVar1 != 0; iVar1 = iVar1 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + 1;
}
for (j = 0; j < 0xe; j = j + 1) {
after[j] = before[j] ^ 0x19;
}
return 0;
}
上から、zixnbo|kwxt88d となり、次の処理が、 0x19とのビット排他的論理和をかけると
0x7a XOR 0x19 = 0x63 -> c
0x69 XOR 0x19 = 0x70 -> p
0x78 XOR 0x19 = 0x61 -> a
0x6e XOR 0x19 = 0x77 -> w
0x62 XOR 0x19 = 0x7b -> {
0x6f XOR 0x19 = 0x76 -> v
0x7c XOR 0x19 = 0x65 -> e
0x6b XOR 0x19 = 0x72 -> r
0x77 XOR 0x19 = 0x6e -> n
0x78 XOR 0x19 = 0x61 -> a
0x74 XOR 0x19 = 0x6d -> m
0x38 XOR 0x19 = 0x21 -> !
0x38 XOR 0x19 = 0x21 -> !
100 XOR 0x19 = 0x85 -> … (この文字は制御文字であり、ASCIIの可視文字としては表現できません)
コメント