zoukankan      html  css  js  c++  java
  • 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, "u767bu5f55u6210u529f"
    
        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, "u767bu5f55u5931u8d25"
    
        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
    

    参考会飞的丑小鸭给出的思路:

    1. 程序用if-eqz来判断用户名和密码是否匹配,将这两个if-eqz都改成if-nez,可登录成功。
    2. 使用goto语句直接让程序执行登录成功的代码。
    3. 删除if-eqz这两条判断语句。

    程序重新编译后运行结果如下

    注:

    1. 如果长时间未编译成功,关闭后重新在历史工程中打开。
    2. 如果编译过程中存在问题,尝试获取最新版的apktool,替换软件目录下的旧版本apktool

    参考:https://www.52pojie.cn/thread-408645-1-1.html

  • 相关阅读:
    caioj 1914 & CH 0x20搜索(0x27A*)例题1:第K短路 Remmarguts'Date
    多项式的化简求法
    caioj 1715 表达式的转换
    HDU 2829 Lawrence
    山海经 (线段树)
    神奇的KMP
    浅谈zkw线段树(by Shine_hale)
    线段树补充
    浅谈线段树(by Shine_hale)
    k短路
  • 原文地址:https://www.cnblogs.com/mark-zh/p/10401560.html
Copyright © 2011-2022 走看看