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

来源:互联网 发布:千年 升段 算法 编辑:程序博客网 时间:2024/06/14 06:59

新建一个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文件。


0 0