Android逆向破解表单登录程序
Android逆向破解表单登录程序
Android开发
ADT: android studio(as)
程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败。

布局代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/textView13"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="28sp"
android:text="用户登录" />
<EditText
android:id="@+id/TEXT_NAME"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="用户名" />
<EditText
android:id="@+id/TEXT_PASS"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="密码" />
<Button
android:id="@+id/BTN_Login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录" />
</LinearLayout>
主程序代码
package com.example.mark.myfirstapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText Name;
EditText Pass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Name = (EditText)findViewById(R.id.TEXT_NAME);
Pass = (EditText) findViewById(R.id.TEXT_PASS);
Button Login = (Button) findViewById(R.id.BTN_Login);
Login.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
checkLogin(Name.getText().toString().trim(),Pass.getText().toString().trim());
}
});
}
public void checkLogin(String name, String pass){
if(name.equals("admin") && pass.equals("password")){
Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
}
else
Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();
}
}
Android逆向破解
tool: android killer
逆向程序的关键在于分析checklogin()方法,smali语法参考Android逆向之smali。
# virtual methods
.method public checkLogin(Ljava/lang/String;Ljava/lang/String;)V
.locals 2
.param p1, "name" # Ljava/lang/String;
.param p2, "pass" # Ljava/lang/String;
.line 30
const-string v0, "admin"
invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
const/4 v1, 0x0
if-eqz v0, :cond_0
const-string v0, "password"
invoke-virtual {p2, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_0
.line 31
const-string v0, "\u767b\u5f55\u6210\u529f"
invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
goto :goto_0
.line 34
:cond_0
const-string v0, "\u767b\u5f55\u5931\u8d25"
invoke-static {p0, v0, v1}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v0
invoke-virtual {v0}, Landroid/widget/Toast;->show()V
.line 36
:goto_0
return-void
.end method
参考会飞的丑小鸭给出的思路:
- 程序用
if-eqz来判断用户名和密码是否匹配,将这两个if-eqz都改成if-nez,可登录成功。 - 使用
goto语句直接让程序执行登录成功的代码。 - 删除
if-eqz这两条判断语句。
程序重新编译后运行结果如下

注:
- 如果长时间未编译成功,关闭后重新在历史工程中打开。
- 如果编译过程中存在问题,尝试获取最新版的
apktool,替换软件目录下的旧版本apktool。
参考:https://www.52pojie.cn/thread-408645-1-1.html
Android逆向破解表单登录程序的更多相关文章
- Android逆向破解表单注册程序
Android逆向破解表单注册程序 Android开发 ADT: android studio(as) 程序界面如下,注册码为6位随机数字,注册成功时弹出通知注册成功,注册失败时弹出通知注册失败. 布 ...
- VC POST表单——登录验证新浪邮箱
1.本机环境: Windows XP SP3.ADSL 2.开发工具: WildPackets OmniPeek V5.1.4 Visual C++ 6.0 IE6.0 FlexEdit V2.3.1 ...
- Spring Security 表单登录
1. 简介 本文将重点介绍使用Spring Security登录. 本文将构建在之前简单的Spring MVC示例之上,因为这是设置Web应用程序和登录机制的必不可少的. 2. Maven 依赖 要将 ...
- SpringBoot集成Spring Security(4)——自定义表单登录
通过前面三篇文章,你应该大致了解了 Spring Security 的流程.你应该发现了,真正的 login 请求是由 Spring Security 帮我们处理的,那么我们如何实现自定义表单登录呢, ...
- WEB安全讨论-表单登录是先验证验证码还是密码
表单登录是先验证验证码还是密码? 肯定是验证码呀!!!这是毋庸置疑的.但是发现有人会验证密码,感觉先验证密码和先验证验证码是一个概念是一样的.但是其实是完全不一样的.下面我们来一起详细的剖析一下: 消 ...
- html表单验证程序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Linux curl 表单登录或提交与cookie使用
本文主要讲解通过curl 实现表单提交登录.单独的表单提交与表单登录都差不多,因此就不单独说了. 说明:针对curl表单提交实现登录,不是所有网站都适用,原因是有些网站后台做了限制或有其他校验.我们不 ...
- SpringSecurity 默认表单登录页展示流程源码
SpringSecurity 默认表单登录页展示流程源码 本篇主要讲解 SpringSecurity提供的默认表单登录页 它是如何展示的的流程, 涉及 1.FilterSecurityIntercep ...
- SpringSecurity 自定义表单登录
SpringSecurity 自定义表单登录 本篇主要讲解 在SpringSecurity中 如何 自定义表单登录 , SpringSecurity默认提供了一个表单登录,但是实际项目里肯定无法使用的 ...
随机推荐
- eclipse与idea快捷键对比以及idea debug、git快捷键
eclipse与idea快捷键 表格中的空格都是忘记了~ 功能 eclipse idea 生成返回值对象 alt+shift+L ctrl+alt+V 找到启动类 ctrl+alt+Home 类的 ...
- mysql Table 'user' is marked as crashed and should be repaired
myisamchk -f x:\xxxxxxxxx\MySQL\data\mysql\*.MYI
- ExpandableListView解析JSON数据
效果图: 说明:刚开始使用这个控件我花费了3天的时间,但是一直都没有达到预期的效果,要么就是直接全部不显示,要么就是数据累加 ...
- Linux操作系统df相关问题解惑
1.df 命令无法使用解决办法 问题分析: 1.1 df命令是通过/etc/mtab文件读取已挂载文件系统的信息,因此,df命令无法使用的原因的在于/etc/mtab文件被损坏或者丢失. 查看 mor ...
- Harry Potter and J.K.Rowling(半平面交+圆和矩形交)
Harry Potter and J.K.Rowling http://acm.hdu.edu.cn/showproblem.php?pid=3982 Time Limit: 2000/1000 MS ...
- aruba 开启802.1X认证
1.即在ac上指定一个radius server认证 2.创建本地账户测试
- c#: TextBox添加水印效果(PlaceHolderText)
基于他人代码修改,不闪,以做备忘. 与SendMessage EM_SETCUEBANNER消息相比,它能改变字体绘制颜色,EM_SETCUEBANNER只限定了DimGray颜色,太深 //与Sen ...
- Eclipse中查看JDK类库源代码
在Eclipse中编写代码时,有时候可能需要了解JDK类库的一些特性,这个时候可以通过查看类的源代码来了解JDK类的详细信息.本文主要内容就是如何直接在Eclipse开发环境中查看JDK类库源代码. ...
- 如何将一段文本编译成C#内存程序的过程
string code = null; // 1. 生成要编译的代码.(示例为了简单直接从程序集内的资源中读取) Stream stram = typeof(CodeDOM).Assembly .Ge ...
- macOS HomeBrew更换源 brew常用命令说明
homebrew本身就是一个git仓库.使用homebrew安装软件包时,会自动先下载软件包,然后解压安装,但有时候下载会卡住,或者很慢,这个时候有以下几种方法: 1.临时的终止update,先con ...