混淆前后的区别

如果不混淆,反编译后清单文件、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);

}

}

来自为知笔记(Wiz)

时间: 2024-12-10 20:10:27

混淆前后的区别的相关文章

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

本文实例分析了PHP易混淆函数的区别及用法.分享给大家供大家参考.具体分析如下: 1.echo和print的区别PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的.echo输出后没有返回值,但print有返回值,当其执行失败时返回flase.因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1. PHP代码: 复制代码代码如下: $r = print "Hello World"; 这意味着print可用在一些复杂的表达式中,而echo则不

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

1.echo和print的区别PHP中echo和print的功能基本相同(输出),但是两者之间还是有细微差别的.echo输出后没有返回值,但print有返回值,当其执行失败时返回flase.因此可以作为一个普通函数来使用,例如执行下面的代码后变量$r的值将为1. PHP代码: 复制代码代码如下:$r = print "Hello World"; 这意味着print可用在一些复杂的表达式中,而echo则不行.但是,因为echo语句不要求返回任何数值,所已在代码中echo语句的运行效率要略

CSS属性筛选易混淆选择器的区别

[attribute |= value] 与 [attribute ^= value] 的联系与区别: 一.联系: 1. 两个选择器的 attribute 属性值等于 value 时都可以匹配 <div class="first_test">The first div element.</div> <div class="second">The second div element.</div> <div cla

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

以下是我收集的Java编程里各种区别,供Java学习爱好者参考,这些区别都是每次Java面试中常考的,大家好好掌握,如有失误请留言指出.想要获取Java详细全套学习资料请到上海尚学堂官网获取. 1.HashMap和Hashtable的区别. HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable. HashMap允许将null作为一个entry的key

array,vertor,arraylist,hashable,hashmap等几个易混淆概念的区别

Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再改变, Vertor是放的Object. Vertor一维,Hashmap/Hashtabe二维: Vertor/Arraylist用index作检索,Hashmap/Hashtabe用key作为检索: Hashmap,Arraylist不是同步的,意味着它们的速度更快: Hashtable,Vertor是同步的,适用于与线程有关时: Hashtale的key不能为null,Hashmap的key和values都可

css中position属性(absolute|relative|static|fixed)的区别

position属性的相关定义:static:无特殊定位,对象遵循正常文档流; relative:对象遵循正常文档流; absolute:对象脱离正常文档流; fixed:对象脱离正常文档流 我们先来看看CSS3 Api中对position属性的相关定义: static:无特殊定位,对象遵循正常文档流.top,right,bottom,left等属性不会被应用. relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置.而其层叠通过z-

memge和saveOrUpdate的区别

今天做hibernate开发的时候遇到这样一个错误: a different object with the same identifier value was already associated with the session (不同对象具有相同的标识符值已经与会话关联起来)牵涉出了Hibernate中几个易混淆方法的区别:首先要介绍下Hibernate中的三种状态 Hibernate的对象有3种状态,分别为:瞬时态(Transient).持久态(Persistent).脱管态(Detac

覆盖与隐藏!

对覆盖和隐藏较好的解释 这几个概念都有一个共同点:函数名称相同,所以不免让人混淆,大致的区别如下: 重载(overload):必须在一个域中,函数名称相同但是函数参数不同,重载的作用就是同一个函数有不同的行为,因此不是在一个域中的函数是无法构成重载的,这个是重载的重要特征 覆盖(override):覆盖指的是派生类的虚拟函数覆盖了基类的同名且参数相同的函数,既然是和虚拟函数挂钩,说明了这个是一个多态支持的特性,所谓的覆盖指的是用基类对象的指针或者引用时访问虚拟函数的时候会根据实际的类型决定所调用

怎么去选择好的服务器?

租用服务器最重要的是服务和质量,才能保证自己的需求.这也是我们香港葵芳机房最注重的地方.同时我们还有着超高的性价比,机房有混合BGP线路,电信联通移动三线直连线路,香港独立服务器租用价格最低,24小时在线售后服务×××.耀磊数据自营机房,在价格方面最低,我们敢做第二无人敢做第一,让您用最低的价格买到最好的品质,最舒心的服务.葵芳信息香港葵芳机房为自营机房,机房是为满足互联网应用外包服务及资源租赁服务而建设的高级别网络资源和运维服务中心,在安全系统.空调系统.电力保障.消防系统上都做足了功夫,有相