私は現在、smali / "code obfuscator"について調査を行っており、現在、逆コンパイルされたソースコードに慣れようとしています。このために、私は簡単なアプリを作成し、smaliで逆コンパイルしました。
後でコード難読化ツールを使用した後、セキュリティを改善して(逆コンパイルに対して)比較するために、逆コンパイルされたソースコードを理解しようとしています。ほとんどのsmaliソースコードはそれほど難しくはありませんが、それでも図のフォーマット変換で問題が発生することがあります。
次の行など、私に説明してもらえますか。値は5になるはずですが、これがどの種類のバイナリ形式かはわかりません。それを計算する方法0x4014=5 ???
const-wide/high16 v0, 0x4014 // 100000000010100 (5 = 101)
添付されているのは、このテスト関数の完全なjavaおよびsmaliコードソースです。
Javaソース:
boolean test(int a, double d) {
if (a < 5 && d < 5)
return true;
else
return false;
}
Smaliソース:
.method test(ID)Z
.locals 2
.parameter "a"
.parameter "d"
.prologue
.line 28
const/4 v0, 0x5
if-ge p1, v0, :cond_0
const-wide/high16 v0, 0x4014
cmpg-double v0, p2, v0
if-gez v0, :cond_0
.line 29
const/4 v0, 0x1
.line 31
:goto_0
return v0
:cond_0
const/4 v0, 0x0
goto :goto_0
.end method