千家信息网

Android登录界面怎么编写

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容介绍了"Android登录界面怎么编写"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!0x01
千家信息网最后更新 2025年01月19日Android登录界面怎么编写

本篇内容介绍了"Android登录界面怎么编写"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

0x01 Android 编程---登录界面

说明

这个是学编程的时候必须要学的,这次我们就不接数据库来操作。也没有注册界面,直接就是一个简单的登录界面。
demo还是按照之前的改。恩,反正我会,我就要偷懒。

1.更改布局

首先一个用户名的框框。

然后一个登录密码的框框。


然后还是一个登录按钮


预览一下我们的界面

好丑,做一个简单的调整,整体代码如下:

            


2.绑定控件

恩,为了像一个登录界面,我把name也改了。

所以重新绑定。


3.逻辑书写

  login.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if (name.getText().toString().equals("zhuzhu")&&Integer.parseInt(ps.getText().toString())==520)                {                    startActivity(new Intent(MainActivity.this,Main2Activity.class));                }            }        });

这里涉及到一个知识点。
java String 类型如何转换为int类型。
简单的来说:

Integer.parseInt();

就可以转换了
这里突然想到万一不输入数字怎么办。恩,去改下规范。

 

这里加了一行只允许输入数字。

测试

0x02 反编译分析

分析嘛,很多次了。老规矩

1. Android Killer

2.找到主要函数

我们找到逻辑判断的地方$1

.class Lcom/example/hanlei/first_demo/MainActivity$1;.super Ljava/lang/Object;.source "MainActivity.java"# interfaces.implements Landroid/view/View$OnClickListener;# annotations.annotation system Ldalvik/annotation/EnclosingMethod;    value = Lcom/example/hanlei/first_demo/MainActivity;->onCreate(Landroid/os/Bundle;)V.end annotation.annotation system Ldalvik/annotation/InnerClass;    accessFlags = 0x0    name = null.end annotation# instance fields.field final synthetic this$0:Lcom/example/hanlei/first_demo/MainActivity;# direct methods.method constructor (Lcom/example/hanlei/first_demo/MainActivity;)V    .locals 0    .param p1, "this$0"    # Lcom/example/hanlei/first_demo/MainActivity;    .prologue    .line 24    iput-object p1, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    invoke-direct {p0}, Ljava/lang/Object;->()V    return-void.end method# virtual methods.method public onClick(Landroid/view/View;)V    .locals 4    .param p1, "v"    # Landroid/view/View;    .prologue    .line 27    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    # getter for: Lcom/example/hanlei/first_demo/MainActivity;->name:Landroid/widget/EditText;    invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText;    move-result-object v0    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;    move-result-object v0    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;    move-result-object v0    const-string v1, "zhuzhu"    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z    move-result v0    if-eqz v0, :cond_0    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText;    invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText;    move-result-object v0    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;    move-result-object v0    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;    move-result-object v0    invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I    move-result v0    const/16 v1, 0x208    if-ne v0, v1, :cond_0    .line 29    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    new-instance v1, Landroid/content/Intent;    iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    const-class v3, Lcom/example/hanlei/first_demo/Main2Activity;    invoke-direct {v1, v2, v3}, Landroid/content/Intent;->(Landroid/content/Context;Ljava/lang/Class;)V    invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V    .line 31    :cond_0    return-void.end method

3.重点逻辑部分

重点逻辑就是如何判断登录的部分

if-eqz v0, :cond_0    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText;    invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText;    move-result-object v0    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;    move-result-object v0    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;    move-result-object v0    invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I    move-result v0    const/16 v1, 0x208    if-ne v0, v1, :cond_0    .line 29    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    new-instance v1, Landroid/content/Intent;    iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    const-class v3, Lcom/example/hanlei/first_demo/Main2Activity;    invoke-direct {v1, v2, v3}, Landroid/content/Intent;->(Landroid/content/Context;Ljava/lang/Class;)V    invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V

我们看到了两个if语言
整个逻辑就是先进行一个判断,然后进行另外一个判断。就是满足第一个if语句,然后满足第二个if语句才到结束。
这些smali代码就是我们之前分析过很多次的语句,没有什么难的地方,都很简单的。

0x03 暴力美学

我们来尝试破解。

方法 1

思路

既然有if语句进行判断,那我把if语句删了。编程现在这个样子:

invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText;    move-result-object v0    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;    move-result-object v0    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;    move-result-object v0    const-string v1, "zhuzhu"    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z    move-result v0    这里删除if语句    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText;    invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText;    move-result-object v0    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;    move-result-object v0    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;    move-result-object v0    invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I    move-result v0    const/16 v1, 0x208    这里删除if语句    .line 29    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    new-instance v1, Landroid/content/Intent;    iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    const-class v3, Lcom/example/hanlei/first_demo/Main2Activity;    invoke-direct {v1, v2, v3}, Landroid/content/Intent;->(Landroid/content/Context;Ljava/lang/Class;)V    invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V    .line 31    :cond_0    return-void

然后保存进行反编译。

安装测试


方法 2

思路

不删除if语句,但是我更改if语句的逻辑。比如本来是相等才可以,我改成不相等就继续运行。

具体操作

第一个判断语句是:

  if-eqz v0, :cond_0

if-eqz的含义就是 如果是0,就跳转到 cond_0

现在我们修改成:

if-nez v0,:cond_0

if-nez的含义是,如果不是0,就跳转到cond_0

第二个判断语句是:

if-ne v0, v1, :cond_0

if-ne的含义就是如果v0!=v1就跳转。
现在我们改成:

if-eq v0, v1, :cond_0

if-eq的含义就是如果相等再进行跳转。

测试

测试成功,不想录图片了。

方法3

思路

既然最后一定要走的是第二个判断里的内容,那么我们使用goto语句直接进去不就好了。

首先设置一个 cond_1
然后goto :cond_1

.method public onClick(Landroid/view/View;)V    .locals 4    .param p1, "v"    # Landroid/view/View;    .prologue    .line 27    goto :cond_1    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    # getter for: Lcom/example/hanlei/first_demo/MainActivity;->name:Landroid/widget/EditText;    invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$000(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText;    move-result-object v0    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;    move-result-object v0    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;    move-result-object v0    const-string v1, "zhuzhu"    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z    move-result v0    if-eqz v0, :cond_0    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    # getter for: Lcom/example/hanlei/first_demo/MainActivity;->ps:Landroid/widget/EditText;    invoke-static {v0}, Lcom/example/hanlei/first_demo/MainActivity;->access$100(Lcom/example/hanlei/first_demo/MainActivity;)Landroid/widget/EditText;    move-result-object v0    invoke-virtual {v0}, Landroid/widget/EditText;->getText()Landroid/text/Editable;    move-result-object v0    invoke-virtual {v0}, Ljava/lang/Object;->toString()Ljava/lang/String;    move-result-object v0    invoke-static {v0}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I    move-result v0    const/16 v1, 0x208    if-ne v0, v1, :cond_0    :cond_1    .line 29    iget-object v0, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    new-instance v1, Landroid/content/Intent;    iget-object v2, p0, Lcom/example/hanlei/first_demo/MainActivity$1;->this$0:Lcom/example/hanlei/first_demo/MainActivity;    const-class v3, Lcom/example/hanlei/first_demo/Main2Activity;    invoke-direct {v1, v2, v3}, Landroid/content/Intent;->(Landroid/content/Context;Ljava/lang/Class;)V    invoke-virtual {v0, v1}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V    .line 31    :cond_0    return-void.end method

测试结果

测试成功。

结束语

可能还有很多种绕过的方法,这里就不一一展示了。

0x04 优雅的登录

思路

既然是登录,那么必然就要有一个对比的存在,我只要知道是用什么去对比的,我把需要对比的东西进行输出,方便我们查看是不是更好呢。

代码分析

  const-string v1, "zhuzhu"    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z    move-result v0    if-eqz v0, :cond_0

这里很明显,用v0和v1进行比较,如果是就返回1,如果不是就返回0

     const/16 v1, 0x208    if-ne v0, v1, :cond_0

定义一个v1寄存器,然后用v0和v1比较看是否一致如果一致就继续向下运行。

0x208就是16进制形式,进行转换,就知道了我们密码是多少了,之后在登录输出即可。当然这个是可有看到的密码,如果接入了数据库就会变成不可见的密码,到时候就可以进行动态调试来对密码进行一个输出了。

0x05 如何植入广告

什么是广告?

大神说过一句话叫做,和游戏无关的都是广告,我们普遍说的广告就是,一些恩,很烦人的东西。

植入广告的目的是什么?

植入广告的目的主要是
(1) 做推广
(2)能赚到钱

植入广告原理分析

用一个载体去承载广告,然后显示出来。使用的技术用静态布局,或者使用动态加载等方式。还是来看一下如果植入广告的具体操作吧。

市面上的广告

有米广告

有米广告,反正我被坑了整整两天,什么都没搞成功,还被折腾的够呛,不过虽然没有搞出什么成果来,但是对有米广告倒是有了一个很深的认识,这个坑人的东西,好气。
最后我只是搞成功了一个这个东西。


爬坑

先来说说,我遇到的坑。希望有人研究的时候可以节约时间。

Error:Execution failed for task ':processDebugManifest'.> [:YoumiSdk_v7.5.1_2018-01-16:] C:\Users\hanlei\Desktop\ls\YoumiAndroidSdk\demo\normaldemo\build\intermediates\exploded-aar\YoumiSdk_v7.5.1_2018-01-16\AndroidManifest.xml:23:3-29:15: Error: Invalid instruction 'targetApi', valid instructions are : REMOVE,REPLACE,STRICT

看到这个鬼东西了木有,网上搜索都说需要换一个sdk,但是官网只提供最新的sdk,或许是我没找到。
果断换sdk。
而且官方给的demo导入到Android Studio 里用不了,也是这个问题。
解决方案:
Androidmanifest.xml里加这一句,可能有用。

 

重新搞
1.新建一个demo

2.加入arr包


3.添加依赖关系


4. 申请ID

5.初始化信息

毫不留情就出问题了。

Error:Execution failed for task ':app:processDebugManifest'.> [:YoumiSdk_v7.5.1_2018-01-16:] C:\Users\hanlei\Desktop\ls\YoumiAndroidSdk\demo\demo3\app\build\intermediates\exploded-aar\YoumiSdk_v7.5.1_2018-01-16\AndroidManifest.xml:23:3-29:15: Error: Invalid instruction 'targetApi', valid instructions are : REMOVE,REPLACE,STRICT

换个arr版本接着搞。

记得改配置文件

果然换了一个arr包马上就对了,太不友好了。

我们接着初始化。


6.设置渠道号

7.权限配置。

广告嘛,配置权限权限扫描的才可以运行。

                                  
ps

应该同步做一件事情。
应该在我的小本本上同步做一个记录。

添加v4包
compile 'com.android.support:support-v4:xx.x.x'

这里的v4:xx.x.x一定要和上面的一致,直接看图:

写完一个调用


"Android登录界面怎么编写"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

广告 语句 登录 就是 界面 逻辑 测试 东西 密码 分析 成功 含义 思路 方法 输出 一致 代码 内容 权限 知识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全维洲州担保 计算机网络技术管理是什么 服务器维保费用 数据库系统概率复习 网络安全公司营销模式 宜兴多功能软件开发产品介绍 查询 clash 服务器 数据分析能用收银系统数据库吗 软件开发合同如何确定管辖 4u服务器机箱能装玄冰400吗 应用层面的网络安全技术 网络安全出了问题怎么办 oracle数据库ji l 江苏营销软件开发活动方案 数据库连接池配置参数 常见的通信网络安全问题 2021年广西网络安全知识题库 2022年剑网三哪个服务器最好 网络安全和信息安全评测 深圳rpa软件开发公司 软件开发架构的挑战最新中文版 db2数据库怎么查询语句 网络安全和保密工作主持词 北京农业银行软件开发待遇 武汉如何维护网络安全 计算机网络安全学习视频 编程app开发软件开发 软件开发程序员编程工资待遇 一般的电脑能带动数据库吗 网际组态软件访问数据库
0