您的位置:首页 > 移动开发 > Android开发

【Android安全】用户名密码校验实例代码开发及反编译代码

2014-11-11 17:45 811 查看
新建一个Android工程加入两个文本框和标签框,同时加两个按钮。

1、Activity_Main.xml布局代码如下:

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/AbsoluteLayout1"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >

    <TextView

        android:id="@+id/textView2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="@string/hello_world" />

    <Button

        android:id="@+id/button2"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_x="124dp"

        android:layout_y="308dp"

        android:text="OK" />

    <Button

        android:id="@+id/button1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_x="219dp"

        android:layout_y="308dp"

        android:text="Exit" />

    <EditText

        android:id="@+id/editText1"

        android:layout_width="128dp"

        android:layout_height="wrap_content"

        android:layout_x="148dp"

        android:layout_y="110dp"

        android:ems="10"

        android:text="Name" />

    <EditText

        android:id="@+id/editText2"

        android:layout_width="120dp"

        android:layout_height="wrap_content"

        android:layout_x="151dp"

        android:layout_y="172dp"

        android:ems="10"

        android:inputType="textPersonName"

        android:text="Passwd" >

        <requestFocus />

    </EditText>

    <TextView

        android:id="@+id/textView1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_x="48dp"

        android:layout_y="122dp"

        android:text="please name" />

    <TextView

        android:id="@+id/textView3"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_x="54dp"

        android:layout_y="172dp"

        android:text="please passwd" />

</AbsoluteLayout>

2、MainActivity.java 中添加事件及校验判断如下红色字体为新增代码

package com.example.testtwo;

import android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.*;

public class MainActivity extends Activity {

    private boolean checkSN(String userName, String passWord)

    {

        if(userName.equals(passWord))

        {

            return true;

        }

        return false;

    }

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        final EditText edit_UserName;

        final EditText edit_PassWd;

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);  //启动时设置布局

        /*code by myself*/

        edit_UserName = (EditText)findViewById(R.id.editText1);

        edit_PassWd = (EditText)findViewById(R.id.editText2);

        Button btn_OK = (Button)findViewById(R.id.button2);

        Button btn_Exit = (Button)findViewById(R.id.button1);

        

        btn_OK.setOnClickListener(new OnClickListener(){

            public void onClick(View v){

                if(checkSN(edit_UserName.getText().toString().trim(),edit_PassWd.getText().toString().trim() ))

                {

                    Toast.makeText(MainActivity.this, "success!", Toast.LENGTH_SHORT).show();

                }

                else

                {

                    Toast.makeText(MainActivity.this, "fail!", Toast.LENGTH_SHORT).show();

                }

            }

        });

        btn_Exit.setOnClickListener(new OnClickListener(){

            public void onClick(View v){

                return;

            }

        });

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }

    

}

3、在bin下找到apk文件,利用apktool反编译apk,得到main_activity.smali内容如下,后续再分析。

.class public Lcom/example/testtwo/MainActivity;

.super Landroid/app/Activity;

.source "MainActivity.java"

# direct methods

.method public constructor <init>()V

    .locals 0

    .prologue

    .line 10

    invoke-direct {p0}, Landroid/app/Activity;-><init>()V

    return-void

.end method

.method static synthetic access$0(Lcom/example/testtwo/MainActivity;Ljava/lang/String;Ljava/lang/String;)Z

    .locals 1

    .parameter

    .parameter

    .parameter

    .prologue

    .line 12

    invoke-direct {p0, p1, p2}, Lcom/example/testtwo/MainActivity;->checkSN(Ljava/lang/String;Ljava/lang/String;)Z

    move-result v0

    return v0

.end method

.method private checkSN(Ljava/lang/String;Ljava/lang/String;)Z

    .locals 1

    .parameter "userName"

    .parameter "passWord"

    .prologue

    .line 14

    invoke-virtual {p1, p2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_0

    .line 16

    const/4 v0, 0x1

    .line 18

    :goto_0

    return v0

    :cond_0

    const/4 v0, 0x0

    goto :goto_0

.end method

# virtual methods

.method protected onCreate(Landroid/os/Bundle;)V

    .locals 5

    .parameter "savedInstanceState"

    .prologue

    .line 24

    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

    .line 25

    const/high16 v4, 0x7f03

    invoke-virtual {p0, v4}, Lcom/example/testtwo/MainActivity;->setContentView(I)V

    .line 27

    const v4, 0x7f080004

    invoke-virtual {p0, v4}, Lcom/example/testtwo/MainActivity;->findViewById(I)Landroid/view/View;

    move-result-object v3

    check-cast v3, Landroid/widget/EditText;

    .line 28

    .local v3, edit_UserName:Landroid/widget/EditText;

    const v4, 0x7f080005

    invoke-virtual {p0, v4}, Lcom/example/testtwo/MainActivity;->findViewById(I)Landroid/view/View;

    move-result-object v2

    check-cast v2, Landroid/widget/EditText;

    .line 29

    .local v2, edit_PassWd:Landroid/widget/EditText;

    const v4, 0x7f080002

    invoke-virtual {p0, v4}, Lcom/example/testtwo/MainActivity;->findViewById(I)Landroid/view/View;

    move-result-object v1

    check-cast v1, Landroid/widget/Button;

    .line 30

    .local v1, btn_OK:Landroid/widget/Button;

    const v4, 0x7f080003

    invoke-virtual {p0, v4}, Lcom/example/testtwo/MainActivity;->findViewById(I)Landroid/view/View;

    move-result-object v0

    check-cast v0, Landroid/widget/Button;

    .line 32

    .local v0, btn_Exit:Landroid/widget/Button;

    new-instance v4, Lcom/example/testtwo/MainActivity$1;

    invoke-direct {v4, p0, v3, v2}, Lcom/example/testtwo/MainActivity$1;-><init>(Lcom/example/testtwo/MainActivity;Landroid/widget/EditText;Landroid/widget/EditText;)V

    invoke-virtual {v1, v4}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

    .line 44

    new-instance v4, Lcom/example/testtwo/MainActivity$2;

    invoke-direct {v4, p0}, Lcom/example/testtwo/MainActivity$2;-><init>(Lcom/example/testtwo/MainActivity;)V

    invoke-virtual {v0, v4}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

    .line 49

    return-void

.end method

.method public onCreateOptionsMenu(Landroid/view/Menu;)Z

    .locals 2

    .parameter "menu"

    .prologue

    .line 55

    invoke-virtual {p0}, Lcom/example/testtwo/MainActivity;->getMenuInflater()Landroid/view/MenuInflater;

    move-result-object v0

    const/high16 v1, 0x7f07

    invoke-virtual {v0, v1, p1}, Landroid/view/MenuInflater;->inflate(ILandroid/view/Menu;)V

    .line 56

    const/4 v0, 0x1

    return v0

.end method

4、APKTool下载地址http://www.newasp.net/soft/68139.html或http://vdisk.weibo.com/s/BG3isR06dq011下载后修改批处理脚本使用即可

decode

该命令用于进行反编译apk文件,一般用法为

apktool d <file.apk> <dir>

<file.apk>代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk

<dir>代表了反编译后的文件的存储位置,比如C:\MusicPlayer

如果你给定的<dir>已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令

apktool d –f <file.apk> <dir>

这样就会强行覆盖已经存在的文件

build

该命令用于编译修改好的文件,一般用法为

apktool b <dir>

这里的<dir>就是刚才你反编译时输入的<dir>(如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个

文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。

install

install-framework命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐