Android逆向破解表单注册程序
Android逆向破解表单注册程序
Android开发
ADT: android studio(as)
程序界面如下,注册码为6位随机数字,注册成功时弹出通知注册成功,注册失败时弹出通知注册失败。

布局代码
<?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="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="用户注册"
android:textSize="28sp" />
<EditText
android:id="@+id/Username"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="6位用户名"/>
<EditText
android:id="@+id/Register"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="6位注册码"/>
<Button
android:id="@+id/BTN_Login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="注册" />
</LinearLayout>
主程序代码
package com.example.mark.myfirstregister;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText edit_Name;
EditText Reg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit_Name = (EditText) findViewById(R.id.Username);
Reg = (EditText) findViewById(R.id.Register);
Button btn_reg = (Button) findViewById(R.id.BTN_Login);
btn_reg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkReg(edit_Name.getText().toString().trim(),Reg.getText().toString().trim());
}
});
}
public void checkReg(String name, String reg){
int numcode = (int) ((Math.random() * 9 + 1) * 100000);
int n = 6;
if(name.length() == 6 && reg.equals(numcode)){
Toast.makeText(MainActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
}
else
Toast.makeText(MainActivity.this,"注册失败",Toast.LENGTH_SHORT).show();
}
}
Android逆向破解
tool: apktool
# 反编译
apktool d[ecode] [options] <file_apk>
# 编译
apktool b[uild] [options] <app_path>
反编译apk,执行 apktool d target.apk -o /path,之后生成一些目录,res存放资源文件,smali存放被反编译的smali代码。关键代码存放在smali目录下的MainActivity.smali文件,打开后进行分析。
.class public Lcom/example/mark/myfirstregister/MainActivity;
.super Landroid/support/v7/app/AppCompatActivity;
.source "MainActivity.java"
# instance fields
.field Reg:Landroid/widget/EditText;
.field edit_Name:Landroid/widget/EditText;
# direct methods
.method public constructor <init>()V
.locals 0
.line 14
invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;-><init>()V
return-void
.end method
# virtual methods
.method public checkReg(Ljava/lang/String;Ljava/lang/String;)V
.locals 5
.param p1, "name" # Ljava/lang/String;
.param p2, "reg" # Ljava/lang/String;
.line 35
invoke-static {}, Ljava/lang/Math;->random()D
move-result-wide v0
const-wide/high16 v2, 0x4022000000000000L # 9.0
mul-double v0, v0, v2
const-wide/high16 v2, 0x3ff0000000000000L # 1.0
add-double/2addr v0, v2
const-wide v2, 0x40f86a0000000000L # 100000.0
mul-double v0, v0, v2
double-to-int v0, v0
.line 36
.local v0, "numcode":I
const/4 v1, 0x6
.line 37
.local v1, "n":I
invoke-virtual {p1}, Ljava/lang/String;->length()I
move-result v2
const/4 v3, 0x0
const/4 v4, 0x6
if-ne v2, v4, :cond_0
invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
invoke-virtual {p2, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v2
if-eqz v2, :cond_0
.line 38
const-string v2, "\u6ce8\u518c\u6210\u529f"
invoke-static {p0, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v2
invoke-virtual {v2}, Landroid/widget/Toast;->show()V
goto :goto_0
.line 41
:cond_0
const-string v2, "\u6ce8\u518c\u5931\u8d25"
invoke-static {p0, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object v2
invoke-virtual {v2}, Landroid/widget/Toast;->show()V
.line 43
:goto_0
return-void
.end method
.method protected onCreate(Landroid/os/Bundle;)V
.locals 2
.param p1, "savedInstanceState" # Landroid/os/Bundle;
.line 20
invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V
.line 21
const v0, 0x7f09001c
invoke-virtual {p0, v0}, Lcom/example/mark/myfirstregister/MainActivity;->setContentView(I)V
.line 22
const v0, 0x7f070008
invoke-virtual {p0, v0}, Lcom/example/mark/myfirstregister/MainActivity;->findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Landroid/widget/EditText;
iput-object v0, p0, Lcom/example/mark/myfirstregister/MainActivity;->edit_Name:Landroid/widget/EditText;
.line 23
const v0, 0x7f070005
invoke-virtual {p0, v0}, Lcom/example/mark/myfirstregister/MainActivity;->findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Landroid/widget/EditText;
iput-object v0, p0, Lcom/example/mark/myfirstregister/MainActivity;->Reg:Landroid/widget/EditText;
.line 24
const v0, 0x7f070001
invoke-virtual {p0, v0}, Lcom/example/mark/myfirstregister/MainActivity;->findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Landroid/widget/Button;
.line 25
.local v0, "btn_reg":Landroid/widget/Button;
new-instance v1, Lcom/example/mark/myfirstregister/MainActivity$1;
invoke-direct {v1, p0}, Lcom/example/mark/myfirstregister/MainActivity$1;-><init>(Lcom/example/mark/myfirstregister/MainActivity;)V
invoke-virtual {v0, v1}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V
.line 33
return-void
.end method
关键部分代码在checkReg()方法中,注册成功的smali代码如下
if-eqz v2, :cond_0
.line 38
const-string v2, "\u6ce8\u518c\u6210\u529f"
对照AS38行的代码
Toast.makeText(MainActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
由此可以确定程序破解的关键,直接修改if-eqz为if-nez,然后重新编译。
apktool b /path/ -o /path/1.apk
安装后打开,输入任意6位用户名和注册码即可成功注册。

Android逆向破解表单注册程序的更多相关文章
- Android逆向破解表单登录程序
Android逆向破解表单登录程序 Android开发 ADT: android studio(as) 程序界面如下,登录成功时弹出通知登录成功,登录失败时弹出通知登录失败. 布局代码 <?xm ...
- html表单验证程序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ajax+FormData+javascript 实现无刷新表单注册
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- form表单注册——HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- Android逆向——破解水果大战
最近公司需要测试安卓app安全,但安卓基本上0基础,决定开始学习下安卓逆向根据吾爱破解上教程 <教我兄弟学Android逆向系列课程+附件导航帖> https://www.52pojie. ...
- PHP正则表达式及表单注册案例
正则表达式是一种具有特定模式的用来匹配文本的字符串 preg_match 匹配 $pattern = '/php/'; $subject = "php 是最好的编程语言,php 没有之一!& ...
- SUI Mobile框架开发,android、ios表单遇到的问题
1.页面添加区域滚动,滚动区域内元素事件无效问题 解决方法: <script type="text/javascript" charset="utf-8" ...
- Android实现模拟表单上传
很久以前,写过一篇关于下载的文章:基于HTTP协议的下载功能实现,今天对于Android上的文件上传,也简单的提两笔.在Android上,一般使用Http 模拟表单或者FTP来进行文件上传,使用FTP ...
- 表单注册及自定义validate手机验证码验证实例
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
随机推荐
- neo4j性能调优(转)
最近在公司实习做的就是优化neo4j图形数据库查询效率的事,公司提供的是一个在Linux上搭建且拥有几亿个节点的数据库.开始一段时间主要是熟悉该数据库的一些基本操作,直到上周才正式开始步入了优化数据库 ...
- Mha-Atlas-MySQL高可用方案实践(二)
六,配置VIP漂移 主机名 IP地址(NAT) 漂移VIP 描述 mysql-db01 eth0:192.168.0.51 VIP:192.168.0.60 系统:CentOS6.5(6.x都可以) ...
- white-space:pre-wrap和word-break:break-all;
最近碰到了两个css属性,在此记录一下: 1.white-space :nomal规定文本中的文字空格和换行的情况 normal:默认.空白会被浏览器忽略. pre:空白会被浏览器保留.其行为方式类似 ...
- Form-encoded method must contain at least one @Field.
https://blog.csdn.net/liunian823/article/details/80290855 记得之前遇到过这个问题,并且记录笔记了,这次再翻笔记,却没有找到...搜索 了下. ...
- maven的pom.xml文件详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- PHP 构造方法 __construct()和PHP 析构方法 __destruct()
PHP 构造方法 __construct() 允许在实例化一个类之前先执行构造方法. 构造方法 构造方法是类中的一个特殊方法.当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须 ...
- pg_dump 数据处理
从数据库导出数据 -U 用户 -p 端口 -h 主机地址 -f 导出文件地址 -O 备份数据库结构和数据,不设置拥有者 -s 只导出数据库结构 最后是库名 (全部导出)pg_dump -U post ...
- tomcat关闭时Log4j2报错 Log4j Log4j2-TF-4-Scheduled-1 memory leak
出错信息: 23-Sep-2017 17:43:18.964 警告 [main] org.apache.catalina.loader.WebappClassLoaderBase.clearRefer ...
- CentOS7 安装VNC
系统环境:CentOS Linux release 7.6.1810Kernel:3.10.0-957.el7.x86_64系统现状:最小化安装,没有安装任何图形支持软件 安装图形化支持 不建议安装G ...
- python 13 常用模块 一
一.time模块 1.time.time()获取当前时间戳,返回长整型 2.time.localtime() 获取当地结构化时间,time.gmtime()获取格林尼治时间 一图需要传入匹配格式, ...