一个java层面的抢红包 手机免流量 锁频病毒的分析(包含对类的理解)
2018-03-23 20:45
387 查看
一些API总结:
SetContentView:
类BufferedReader
对类的一些理解
类的定义的一些理解
通过引用变量来访问对象
引用变量和引用类型变量
正式分析病毒
为什么要查看清单文件?
本文还涉及到的知识点:
android开发中如果想实现布局页面的跳转可以使用setContentView()设置跳转到需要的布局文件上面,实现代码如下
下面解释一下这个图:
图中Circle类包含:
1.成员变量:double radius;(是double类型的)
2.无参的构造函数:Circle();
3.有参构造函数Circle(double newRadius);也就是说这个构造函数是可以重载的;
4.普通方法: double getArea(); //其返回值是double了类型
构造方法必须与定义它的类有完全相同的名字,和所有方法一样,构造方法可以重载(同名但是不同结构的多个构造方法),从而更加容易用不同的初始数据来构造对象.
由类创造一个对象,使用new操作符调用构造方法,比如:
new 类名 (参数);
例如,new Circle()调用Circle类中定义的第一个构造方法,创建一个Circle对象,new Circle(5)调用Circle类的第二个构造方法创建一个Circle对象(注意,此时是对类中的newRadius进行初始化,newRadius与成员变量radius是没有关系的,newRadius具体的行为是发生在此时这个构造函数Circle(double newRadius)后面的大括号里的方法体里的)
类名 对象引用变量名;
类所定义的类型称为引用类型.任何类型做为类的变量都能引用该类的一个实例;
下列语句声明变量myCircle的类型是Circle类型:
Circle myCircle;
这个变量myCircle能够引用一个circle对象,下列语句创建一个对象,并将它的引用赋值给变量myCircle.
myCircle = new Circle();
利用下面语法,可以写一段语句声明对象引用变量,创建对象,以及将对象引用赋给变量.
类名 对象引用变量 = new 类名();
比如:
CIrcle myCircle = new Circle();
变量myCircle保持对Circle对象的引用.
注: 对象引用变量和对象是不同的,对象引用变量似乎存放了一个对象,事实上,它只包含该对象的引用地址,但是大多数情况下,其区别可以忽略.这样很好,可以简单地说myCircle是一个Circle对象,而不用长而绕口地说,myCircle是包含(Circle对象的一个引用的)变量,当需要考虑它们的区别时,还得使用这个冗长的说法.
注意:在java中,数组看做对象,数组是用new操作符创建的,一个数组变量实际上是包含数组引用的变量.
大多时候,我们创建一个变量,并将它赋值给一个变量,以后就能用这个变量引用对象.有时候,一个对象并不需要引用,这个时候,创建一个对象,但是不把它明确地赋给变量,如下:
new Circle();
或者System.out.println(“Area is” + new Circle(5).getArea());
前面的语句创建一个Circle对象,后面的语句创建一个Circle对象并调用它的getArea方法返回其面积.这样创建的对象称为匿名对象。
在Android Killer里面搜索关键字resetpassword,equals均没什么软用,只能从头开始分析,首先查看其清单文件:
显然这个清单文件里面没有新添加的”Android:name”属性;下面可以放心大胆地看MainActivity里面的onCreate()方法了;
利用Android Killer反编译之后:
从这个方法里面我们大概知道了生成了一个新的apk,而原来的这个apk里面貌似也发现不了什么有效的信息了!
下面打开这个apk(在asset里面)
搜索关键字符串:
进行反编译,发现如下:
可以知道密码为TFB4:
点击解锁即可!
Android开发之assets目录下资源使用总结
SetContentView:
类BufferedReader
对类的一些理解
类的定义的一些理解
通过引用变量来访问对象
引用变量和引用类型变量
正式分析病毒
为什么要查看清单文件?
本文还涉及到的知识点:
一些API总结:
SetContentView:
设置一个Activity的显示界面,android开发中如果想实现布局页面的跳转可以使用setContentView()设置跳转到需要的布局文件上面,实现代码如下
package com.lyj.demo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; /** * * @author lyj * 实现不同Layout的转换功能,setContentview()用法; */ public class setContentViewDemo extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 以findViewById()取得Button 4000 对象并添加事件onClickLisener Button button1=(Button)findViewById(R.id.bt1); button1.setOnClickListener(new Button.OnClickListener(){ @Override public void onClick(View v) { goToLayout2(); }}); } // 将layout由main.xml切换成mylayout.xml public void goToLayout2() { // 将layout改成mylayout setContentView(R.layout.mylayout); Button b2 = (Button) findViewById(R.id.bt2); b2.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { goToLayout1(); } }); } // 将layout由mylayout.xml切换成main.xml public void goToLayout1() { setContentView(R.layout.main); Button bt1 = (Button) findViewById(R.id.bt1); bt1.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { goToLayout2(); } }); } }
类BufferedReader
详见Android API;对类的一些理解
详见java语言程序设计(基础版)186/594:类的定义的一些理解
下面解释一下这个图:
图中Circle类包含:
1.成员变量:double radius;(是double类型的)
2.无参的构造函数:Circle();
3.有参构造函数Circle(double newRadius);也就是说这个构造函数是可以重载的;
4.普通方法: double getArea(); //其返回值是double了类型
构造方法必须与定义它的类有完全相同的名字,和所有方法一样,构造方法可以重载(同名但是不同结构的多个构造方法),从而更加容易用不同的初始数据来构造对象.
由类创造一个对象,使用new操作符调用构造方法,比如:
new 类名 (参数);
例如,new Circle()调用Circle类中定义的第一个构造方法,创建一个Circle对象,new Circle(5)调用Circle类的第二个构造方法创建一个Circle对象(注意,此时是对类中的newRadius进行初始化,newRadius与成员变量radius是没有关系的,newRadius具体的行为是发生在此时这个构造函数Circle(double newRadius)后面的大括号里的方法体里的)
通过引用变量来访问对象
引用变量和引用类型变量
对象通过引用变量来访问,该变量包含对象的引用地址,使用如下语法格式:类名 对象引用变量名;
类所定义的类型称为引用类型.任何类型做为类的变量都能引用该类的一个实例;
下列语句声明变量myCircle的类型是Circle类型:
Circle myCircle;
这个变量myCircle能够引用一个circle对象,下列语句创建一个对象,并将它的引用赋值给变量myCircle.
myCircle = new Circle();
利用下面语法,可以写一段语句声明对象引用变量,创建对象,以及将对象引用赋给变量.
类名 对象引用变量 = new 类名();
比如:
CIrcle myCircle = new Circle();
变量myCircle保持对Circle对象的引用.
注: 对象引用变量和对象是不同的,对象引用变量似乎存放了一个对象,事实上,它只包含该对象的引用地址,但是大多数情况下,其区别可以忽略.这样很好,可以简单地说myCircle是一个Circle对象,而不用长而绕口地说,myCircle是包含(Circle对象的一个引用的)变量,当需要考虑它们的区别时,还得使用这个冗长的说法.
注意:在java中,数组看做对象,数组是用new操作符创建的,一个数组变量实际上是包含数组引用的变量.
大多时候,我们创建一个变量,并将它赋值给一个变量,以后就能用这个变量引用对象.有时候,一个对象并不需要引用,这个时候,创建一个对象,但是不把它明确地赋给变量,如下:
new Circle();
或者System.out.println(“Area is” + new Circle(5).getArea());
前面的语句创建一个Circle对象,后面的语句创建一个Circle对象并调用它的getArea方法返回其面积.这样创建的对象称为匿名对象。
正式分析病毒
把apk拖进夜神,打开android killer之后,先连接夜神,然后点击编译,安装之后,出现如下图中情况:在Android Killer里面搜索关键字resetpassword,equals均没什么软用,只能从头开始分析,首先查看其清单文件:
<?xml version="1.0" encoding="utf-8" standalone="no"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="zs.ip.proxy"> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.INTERNET"/> <application android:debuggable="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <activity android:label="@string/app_name" android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
为什么要查看清单文件?
如果需要在程序的组件之间传递全局变量,或者在Activity启动之前做一些初始化工作,会考虑使用Application类,使用这个类的时候,需要在程序中添加添加一个类继承自Android.app.Apploication,而后重写其onCreate()方法,在该方法中初始化全局变量可以在Android其他组件中访问,当然这些变量具有public属性,最后还需要在清单文件的application标签中添加”Android:name”属性,取值为继承自android.app.Application的类名显然这个清单文件里面没有新添加的”Android:name”属性;下面可以放心大胆地看MainActivity里面的onCreate()方法了;
利用Android Killer反编译之后:
protected void onCreate(Bundle paramBundle) { LogCatBroadcaster.start(this); super.onCreate(paramBundle); requestWindowFeature(1); setContentView(2130903040); Object localObject = new File("/storage/sdcard0/" + "stk3.apk");//实例化一个File对象,参数为路径名 try { paramBundle = getAssets().open("stk3.apk");//貌似是打开了一个名为stk3的apk; localObject = new FileOutputStream((File)localObject); byte[] arrayOfByte = new byte[10240]; for (;;) { int i = paramBundle.read(arrayOfByte); if (i == -1) { ((FileOutputStream)localObject).close(); paramBundle.close(); return; } ((FileOutputStream)localObject).write(arrayOfByte, 0, i); } return; } catch (IOException paramBundle) { paramBundle.printStackTrace(); } }
从这个方法里面我们大概知道了生成了一个新的apk,而原来的这个apk里面貌似也发现不了什么有效的信息了!
下面打开这个apk(在asset里面)
搜索关键字符串:
进行反编译,发现如下:
public void onClick(View paramView) { if ((llxfc.access$L1000000(this.this$0).getText().toString().equals("T")) && (llxfc.access$L1000001(this.this$0).getText().toString().equals("F")) && (llxfc.access$L1000002(this.this$0).getText().toString().equals("B")) && (llxfc.access$L1000003(this.this$0).getText().toString().equals("4"))) { llxfc.access$L1000005(this.this$0).removeView(llxfc.access$L1000006(this.this$0)); } } }
可以知道密码为TFB4:
点击解锁即可!
本文还涉及到的知识点:
java反射机制,c++Android开发之assets目录下资源使用总结
相关文章推荐
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- 推荐一个免费的手机站点统计分析平台:他舅网WAP流量分析平台
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- 一个行为恶劣的病毒的分析(兔子图标)
- 今天用Visual C#为客户做一个数据下载分析系统,碰到一个问题 未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值。
- 分析一个小Java程序
- 《互联网领域Java从来就不是主流》一个完全错误的标题!炒作短时间带来了流量,却损害了作者的声誉,推荐人的信誉,以及读者对于网站的期待。
- 对一个Java FrameWork的分析(一)
- [学习笔记]Java代码构建一个线程池的自己学习写的实例,用这个你会更好的理解文章内容
- 怎样通过流量分析来检测病毒
- 病毒的行为分析帮助理解驱动pe等
- java编写病毒的可行性分析
- [原创]一个C#病毒源代码的分析
- 简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案
- 简单理解java.lang.IllegalStateException异常:简单分析和简单解决方案
- 新闻分析:西门子手机的一个葬礼和七个婚礼
- IBM站一个网页到底包含了多少技术--看分析
- 今天准备分析一个java的记事本
- 一个病毒源码的分析
- 一个用汇编写的引导区病毒例程,有时间可以分析一下,对各位学习汇编的朋友很有帮助!