混淆前后的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了混淆前后的区别相关的知识,希望对你有一定的参考价值。

如果不混淆,反编译后清单文件、png文件、xml文件及JAVA代码几乎和你的源码完全一样!
虽说现在的android工程都是混淆过的,但是我们希望借鉴的如drawable下的图片、XML布局文件基本还是可以完好无缺的破解出来
即使JAVA代码破解后阅读起来比较吃力,但是某个具体的方法逻辑还是基本完好的。

混淆前后的区别--实例

源码

public class PhoneActivity extends Activity {

    private EditText dt_number = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);//加载指定的布局
        Button bt_dail = (Button) findViewById(R.id.bt_dail);
        dt_number = (EditText) findViewById(R.id.et_number);
        bt_dail.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String number = dt_number.getText().toString().trim();//获取号码
                if (TextUtils.isEmpty(number)) {//如果号码为空
                    Toast.makeText(PhoneActivity.this"号码不能为空!", Toast.LENGTH_SHORT).show();//土司
                    return;//结束方法
                }
                Intent intent = new Intent();//意图
                intent.setAction(Intent.ACTION_CALL);//为意图设置事件,注意要在清单文件中注册权限
                intent.setData(Uri.parse("tel:" + number));//事件的数据
                startActivity(intent);//执行
            }
        });
    }
}

未混淆,从APK中提取出的源码   

和源码的区别:①注释全去掉了;②结构基本不会变;变量名可能会被更改;

技术分享

public class PhoneActivity extends Activity {

    private EditText dt_number = null;
    public void onCreate(Bundle paramBundle) {
        super.onCreate(paramBundle);
        setContentView(2130903040);
        Button localButton = (Button) findViewById(2131034113);
        this.dt_number = ((EditText) findViewById(2131034112));
        localButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View paramView) {
                String str = PhoneActivity.this.dt_number.getText().toString().trim();
                if (TextUtils.isEmpty(str)) {
                    Toast.makeText(PhoneActivity.this"号码不能为空!", 0).show();
                    return;
                }
                Intent localIntent = new Intent();
                localIntent.setAction("android.intent.action.CALL");
                localIntent.setData(Uri.parse("tel:" + str));
                PhoneActivity.this.startActivity(localIntent);
            }
        });
    }
}

混淆后,从APK中提取出的源码

和没混淆的区别:①结构会有很大变化;②变量名会被更改;

技术分享

public class PhoneActivity extends Activity {

    private EditText a = null;
    public void onCreate(Bundle paramBundle) {
        super.onCreate(paramBundle);
        setContentView(2130903040);
        Button localButton = (Button) findViewById(2131034113);
        this.a = ((EditText) findViewById(2131034112));
        localButton.setOnClickListener(new a(this));
    }
}
这是衍生出来的一个类
final class a implements View.OnClickListener {
    a(PhoneActivity paramPhoneActivity) {
    }
    public final void onClick(View paramView) {
        String str = PhoneActivity.a(this.a).getText().toString().trim();
        if (TextUtils.isEmpty(str)) {
            Toast.makeText(this.a, "号码不能为空!", 0).show();
            return;
        }
        Intent localIntent = new Intent();
        localIntent.setAction("android.intent.action.CALL");
        localIntent.setData(Uri.parse("tel:" + str));
        this.a.startActivity(localIntent);
    }
}  




















以上是关于混淆前后的区别的主要内容,如果未能解决你的问题,请参考以下文章

PHP易混淆函数的区别及用法汇总

PHP易混淆函数的区别及用法汇总(函数和方法的区别)

Java面试题中常考的容易混淆的知识点区别

java与c的易混淆区别

PHP常见概念混淆之selfstaticparent的区别

viewDidLoad 前后的区别