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默认提供了一个表单登录,但是实际项目里肯定无法使用的 ...
随机推荐
- MATLA总结三
1.将分数表示转换为小数表示: vpa( ******(表达式或者变量), n(小数点后几位)) 2.将一个式子中的变量带入具体的值: subs( y, x, [2,3,4] ) 3.用工具箱确定阶 ...
- SSM商城项目(十二)
1. 学习计划 1.购物车实现 2.未登录状态下使用购物车 3.登录状态下使用购物车 2. 购物车的实现 2.1. 功能分析 1.购物车是一个独立的表现层工程. 2.添加购物车不要求登录.可以 ...
- Pycharm--flake8的配置使用
前言:Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具.Flake8检查规则灵活,支持集成额外插件,扩展性强. 一.安装flake8 进入虚拟环境: pip inst ...
- docker for mac
MacOS上通过docker部署 docker环境准备 1.访问这里安装好docker,需要注册账号才能下载dmg安装包:https://hub.docker.com/editions/communi ...
- Jupyter Notebook 快捷键使用指南
因为使用Jupyter Notebook用鼠标选择菜单影响效率,遂将快捷命令记录于此 转自:http://blog.konghy.cn/2017/05/04/jupyter-notebook-hotk ...
- 关于iOS刷新UI需要在主线程执行
为什么一定要在主线程刷新UI? 安全+效率:因为UIKit框架不是线程安全的框架,当在多个线程进行UI操作,有可能出现资源抢夺,导致问题. 其实:在子线程是不能更新UI的, 看到能更新的结果只是个假象 ...
- sqlserver改主键初始ID
- aws
名称 对应的技术 EC2 虚拟机技术 Virtual Machine 抽象了物理机,看到的是多台虚拟的机器 需要配置管理存储.网络.操作系统等 数分钟启动,运行数周或数月 ECS 容器 Contain ...
- etcd-v3
参考:https://www.kancloud.cn/wjx0912/opensource/434745
- jQuery.validate.js 自定义错误信息
var validate = $("form").validate({....})validate.showError({"username":"us ...