【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文件。
- 【Android安全】用户名密码校验实例代码开发及反编译代码
- android安全攻防,反编译代码
- Axis2服务端用户名和密码校验authentication代码
- Axis2服务端用户名和密码校验authentication代码
- Axis2服务端用户名和密码校验authentication代码
- Android代码混淆及反编译
- WCF基于用户名和密码安全(升级)纯代码
- WCF基于用户名和密码安全(升级)纯代码
- Android 代码混淆及反编译方法
- 【转+原】Android代码反编译及分析
- Android 代码混淆及反编译方法
- Android 代码混淆及反编译方法
- Android APK安全: 代码混淆且加壳防止反编译
- Android UI开发布局实例及有关代码
- Android代码混淆 反编译
- android代码反编译
- android Apk 代码反编译
- android 反编译获取代码
- ios 静态库编译总结
- Rapberry pi apt-get 死活更新不成功
- windows10简单试用<多图,连薛定谔的猫都杀死了>
- 解引用 自增
- 大整数的最大值最小值判断
- 【Android安全】用户名密码校验实例代码开发及反编译代码
- SSL数字证书防止钓鱼欺诈冲击中国网购市场
- .Net Framework OleDb 数据提供程序要求 Microsoft Data Access Components(MDAC) 2.6 或更高版本。发现当前安装的版本是 2.50.4403.
- c++ 多维数组 的使用
- 百度POI全国数据下载
- 非俯视视角时的点击判断
- Storm yarn
- SQL Server 2008杀死数据库连接
- 安卓环境变量的配置