我读了一些文章,内容是用不同的方式混淆android应用程序,以保护它们免受逆向工程的影响。我脑海中浮现的一件事是,有可能混淆android吗?假设我有这样的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。从android.util.Log获取这里源代码,并将整个代码粘贴到类z中(记住将方法d重命名为w)。这肯定会增加代码大小,但也会使逆向工程变得更加困难。这些方法正确吗?有更简单的方法吗?
更新:
一篇提到android的文章可能会被混淆:
ViewDroid:面向模糊弹性移动应用程序重包装检测,5.2.1节
发布于 2019-01-05 20:05:42
创建一个包x,有一个子包y,有一个类z,类z必须有一个调用Log.d的方法。实际上,这里使用了一层间接的方法,而逆向工程就变得更加困难了。
创建一个工具来撤销这种间接影响并不是特别困难。
创建一个包x,有一个子包y,有一个类z。从这里获取android.util.Log的源代码,并在类z中粘贴整个代码(记住将方法d重命名为w)。这肯定会增加代码大小,但也会使逆向工程变得更加困难。
它也不会编译,因为您的应用程序无法访问com.android.internal.*符号、各种native方法等。
这些方法正确吗?
如果你所说的“正确”是指“将编译和运行”,那么第一个就会。
https://stackoverflow.com/questions/54055694
复制相似问题