最近、プログラムがいくつかのデータをどのように解読しているかを特定するために、アセンブリ全体を巡って自分の道を巡ってきました。これまでのところ、私はIVがどのように抽出され、IVは16バイトであり、復号化方法は暗号ブロック連鎖を使用するのかを特定した。その結果、私は使用されている暗号化方式がAES-128-CBCであると信じています。難読化されたAES解読アセンブリ
次の手順では、解読に使用されているキーを特定しようとしていますが、個々のブロック暗号化暗号化のアセンブリが約2.5MBのサイズであるという問題があります。しかし、私が観察したことは、それは非常によく似た形の全てであるということです、例えば、スニペット:
を:add.w r0, r12, #0x13
str.w r0, [lr, #0x44]
tst.w r0, #0xff
mov r0, r12
it eq
eoreq r0, r12, #0x75
add.w r1, r12, #0x5d
str.w r1, [sp, #0xf00]
tst.w r1, #0xff
it eq
addeq r0, #0x3b
r12
は、次のように引数(r0
)に渡されたからロードされ、暗号化されたデータが含まれていますサブルーチンで
mov r4, r0
add.w lr, sp, #0x1000
ldrb.w r12, [r4]
アセンブリの全ては、オフセット一部は、暗号化されたデータに付加された格納され、0xff
に対して試験され、標本形式である(常に0xff
)といくつかのOPERその結果、XOR、OR、ADDまたはMOVのいずれかが別のレジスタ(例ではr0
)に影響します。
これはAES-128に見えますが、鍵を隠すために意図的に難読化されていることに同意しますか?そうであれば、どのように難読化されており、鍵を見つけることが可能でしょうか?
ブロック暗号の暗号化サブルーチンのための完全なASMファイルへの追加情報
this is a link CBCを使用し、メインの質問で参照されている上記のサブルーチンを呼び出すサブルーチンに。
私は[タグ:リバースエンジニアリング]は[タグ:セキュリティ]以上を適用しますが、これを元に戻してください。しかし、実際にはarchitectureタグが必要です。 PS:私は通常downvoteに速いですが、今回は私ではありませんでした;) – Jester
@Jester私には良い音です。あなたはあなたの名前をクリアしました:Pそれが話題から外れている/広いので、私はいつもそれをリバースエンジニアリングまたはセキュリティSEに移すことができました。 – Joshua
私はこのことがCBC-AESとどのように結論づけられたのか理解できません。しかし、AESの全ポイントは、方法がわかっていても鍵が壊れないということです。 AESは難読化を必要としません。 –