【发布时间】:2019-01-05 19:54:02
【问题描述】:
我正在阅读一些关于在保护 Android 应用程序免受逆向工程方面混淆的不同方法的文章。我想到的一件事是,是否可以混淆 android API?假设我有一个这样的 android 代码:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Base64;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Hello", "World");
}
}
有什么方法可以混淆代码以获得这样的东西:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import x.y.z;
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
z.w("Hello", "World");
}
}
我想出了两种方法:
- 创建一个包
x,有一个子包y,有一个类z。类z必须有一个名为w的方法,该方法调用Log.d。实际上,这里使用了一个间接层,逆向工程稍微困难了一点。 - 创建一个包
x,有一个子包y,有一个类z。从here 获取android.util.Log的源代码并将整个代码粘贴到类z中(记得将方法d重命名为w)。这肯定会增加代码大小,但会使逆向工程变得更加困难。
这些方法正确吗?有更简单的方法吗?
更新:
一篇提到android API的文章可以被混淆:
ViewDroid: Towards Obfuscation-Resilient Mobile Application Repackaging Detection,第 5.2.1 节
【问题讨论】:
标签: android obfuscation