DxShield 猫の巻【第4回】ソースコード暗号化

はじめに

おはようございます、yyokotaです!

次第に暖かくなり、花粉が猛烈な勢いで舞ってきております。。。

自分もそうなのですが、花粉症の方々にはとても辛いですね。

薬を飲んで、マスクを着用しなんとか乗り切りましょう!

さてさてそんな中ですが、今週もDxShield猫の巻いってみましょう!

前回はソースコード難読化について扱いました。
そして、今回はもう一つの要素の「暗号化」についてまとめます。

 


暗号化って?

前回取り扱った「難読化」は、読んで字のごとく「読むのを難しくすること」でした。
ソースコードを読みづらくして、解析を面倒にするのがメインの目的ですね。
それに対してDxShieldの暗号化の機能は、大きく分けて以下の2つになります。

  • ファイル暗号化
  • ソースコード部分暗号化

このそれぞれについて調べていきましょう!

 


ファイル暗号化

「ファイル暗号化」は、DexファイルやDLL全体をまるごと暗号化する仕組みです。
ファイル暗号化を行うことで、静的な解析からファイルを守ることができます。
また、暗号化されたファイルはアプリケーションが実行される時に復号されて実行されます。

例として、Dexファイルのバイナリを見てみましょう。
ファイル暗号化を施す前の状態は以下の通りです。

 

そしてDxShieldによって暗号化を行うと、次の図のようになります。

バイナリが暗号化され、内容が読み取れなくなっていることがわかりますね。

 


ソースコード部分暗号化

 

つぎにソースコード部分暗号化です。
「ソースコード部分暗号化」は、ソースコードの特定の部分を暗号化し、アプリケーションが必要としたタイミングでメモリ内で復号し実行できるようにする技術です。
具体的には、ソースコードの以下の部分を暗号化します。

  • リソースID
  • 文字列
  • メソッドコール

この技術は、DxShield独自の技術です!

これについても実際にその様子をみてみましょう。
左が暗号化を行う前、右が行なった後です。


文字列が暗号化されており、全く異なった数値になっていることが分かります。
これなら、元の文字列が何だったのかが全く分かりませんね。

 


まとめ

以上が「暗号化」についてのまとめでした。
DxShieldでは、この暗号化の技術と、前回扱った難読化の技術の2つを併用することでソースコードを保護しています!
これによって、アプリケーション実行後のメモリダンプ攻撃などから保護しているのです!