逆向一

逆向教程一
先尝试自己编写一个app
1.下载:下载及安装studio。下载链接自己百度,安装路径在F:\app\studio1\bin目录下,sdk配置在file-settings-system settings-android sdk
2.新建:新建一个empty activity。
package/app/res/layout/activity_main.xml布局的目录
package/app/java/packagename/mainactivity代码的地方
3.输入按钮及文本框:在activity_main.xml中添加按钮(button)及文本框(textview)和Plain Test
id为TEXT_NAME,TEST_PASS,BTN_Login
4.调整位置:调整按钮(button)及文本框(textview)的位置,如果不调整,app安装后,在模拟器和手机中显示混乱,所有资源的显示在左上角。
设置后直接点击 Infer Constraints
如果没有Infer Constraints菜单栏,点击ConstraintLayout右键选择Constraint Layout中的Infer Constraints
5.编写代码:在MainActivity编写代码

package hfdcxy.com.myapplication;
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; //定义Plain Test控件第一个输入框的名字
EditText Pass; //定义Plain Test控件第二个输入框的名字
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Name = (EditText) findViewById(R.id.TEXT_NAME); //通过findViewById找到输入框控件对应的id并给它起一个名字
Pass = (EditText) findViewById(R.id.TEST_PASS);//通过findViewById找到输入框控件对应的id并给它起一个名字
Button Login = (Button) findViewById(R.id.BTN_Login);//通过findViewById找到按钮控件对应的id并给它起一个名字
Login.setOnClickListener(new View.OnClickListener() { //监听有没有点击按钮控件 如果点击了就会执行onClick函数
@Override
public void onClick(View view) {
check(Name.getText().toString().trim(),Pass.getText().toString().trim()); //调用check函数
}
});
}
public void check(String name,String pass) //自定义函数check 这里用来检查用户名和密码是否是hfdcxy和1234
{
if(name.equals("hfdcxy")&&pass.equals("1234"))
{
Toast.makeText(MainActivity.this,"登录成功", Toast.LENGTH_SHORT).show();//弹框
}
else
Toast.makeText(MainActivity.this,"登录失败", Toast.LENGTH_SHORT).show();//弹框
}
}

6.编译:编译通过
7.构造app:build app。记住app的名称及目录
目录F:\MyApplication2\app\build\outputs\apk
名称app-debug.apk
8.在手机中安装:打开cmd,输入adb devices,显示连接状态,输入adb install /app目录/app名称。在模拟器中安装完成。
打开逍遥模拟器。
打开cmd,adb devices,显示无连接设备,adb connect 127.0.0.1:21503
adb install F:/MyApplication2/app/build/outputs/apk/app-debug.apk,如果已经安装过会报失败

 

 

 

破解此app

1.username输入hfdcxy,password输入1234点击登录,提示成功,输入其他提示错误
2.破解:输入错误的密码也能提示成功
3.工具:androidkill
下载链接:http://pan.baidu.com/s/1skClh3f 密码:6u0q
目录:F:\app\AndroidKiller__v1.3.1\AndroidKiller_v1.3.1
配置jdk:C:\Program Files (x86)\Java\jdk1.8.0_71\bin\
4.反编译:使用androidkill打开apk反编译成smail文件
入口文件:未加固的一般能直接打开,加固的有些打不开,需要动态调试如frida等
5.代码分析

.class public Lhfdcxy/com/myapplication/MainActivity;
.super Landroid/support/v7/app/AppCompatActivity;
.source "MainActivity.java"


# instance fields
.field Name:Landroid/widget/EditText;

.field Pass:Landroid/widget/EditText;


# direct methods
.method public constructor <init>()V
.locals 0

.prologue
.line 9
invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;-><init>()V

return-void
.end method


# virtual methods
.method public check(Ljava/lang/String;Ljava/lang/String;)V
.locals 2
.param p1, "name" # Ljava/lang/String;
.param p2, "pass" # Ljava/lang/String;

.prologue
const/4 v1, 0x0

.line 28
const-string v0, "hfdcxy"

invoke-virtual {p1, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

move-result v0

if-eqz v0, :cond_0

const-string v0, "1234"

invoke-virtual {p2, v0}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

move-result v0

if-eqz v0, :cond_0

.line 30
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

.line 34
:goto_0
return-void

.line 33
: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

goto :goto_0
.end method

.method protected onCreate(Landroid/os/Bundle;)V
.locals 2
.param p1, "savedInstanceState" # Landroid/os/Bundle;

.prologue
.line 14
invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V

.line 15
const v1, 0x7f04001b

invoke-virtual {p0, v1}, Lhfdcxy/com/myapplication/MainActivity;->setContentView(I)V

.line 16
const v1, 0x7f0b0061

invoke-virtual {p0, v1}, Lhfdcxy/com/myapplication/MainActivity;->findViewById(I)Landroid/view/View;

move-result-object v1

check-cast v1, Landroid/widget/EditText;

iput-object v1, p0, Lhfdcxy/com/myapplication/MainActivity;->Name:Landroid/widget/EditText;

.line 17
const v1, 0x7f0b0060

invoke-virtual {p0, v1}, Lhfdcxy/com/myapplication/MainActivity;->findViewById(I)Landroid/view/View;

move-result-object v1

check-cast v1, Landroid/widget/EditText;

iput-object v1, p0, Lhfdcxy/com/myapplication/MainActivity;->Pass:Landroid/widget/EditText;

.line 18
const v1, 0x7f0b0062

invoke-virtual {p0, v1}, Lhfdcxy/com/myapplication/MainActivity;->findViewById(I)Landroid/view/View;

move-result-object v0

check-cast v0, Landroid/widget/Button;

.line 19
.local v0, "Login":Landroid/widget/Button;
new-instance v1, Lhfdcxy/com/myapplication/MainActivity$1;

invoke-direct {v1, p0}, Lhfdcxy/com/myapplication/MainActivity$1;-><init>(Lhfdcxy/com/myapplication/MainActivity;)V

invoke-virtual {v0, v1}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

.line 25
return-void
.end method

三个函数constructor,check,onCreate。

看check函数。将用户框的值赋值给p1,将密码框的值赋值给p2,将0x0的值赋值给v1,将hfdcxy赋值给v0(如果这里是数据库的话是怎么样的语句呢?),比较p1和v0的值,如果p1=v0则执行下面代码,如果不相等则跳转到cond_0.再将1234赋值给v0,在比较p2和v0的值,如果相等则显示\u767b\u5f55\u6210\u529f解码为成功,不相等则显示跳转到\u767b\u5f55\u5931\u8d25解码为不成功
6.破解

三种破解方式
第一种修改判断语句,if-eqz修改成if-nez,此时p1和v0不相等则执行下一句代码,相等则跳转到cond_0,p2和v0比较
第二种将判断语句删除,也实现无论输入什么都提示成功
第三种使用goto跳转语句,直接跳转到成功的代码
将修改后的代码编译成apk:andriodkill工具-andriod-编译
F:\app\AndroidKiller__v1.3.1\AndroidKiller_v1.3.1\projects\app-debug\Bin\app-debug_killer.apk
安装apk:adb install F:\app\AndroidKiller__v1.3.1\AndroidKiller_v1.3.1\projects\app-debug\Bin\app-debug_killer.apk
结果:成功破解

 

 

参考:吾爱破解的逆向教程

posted @ 2020-06-11 10:48  强壮的脸皮  阅读(263)  评论(0编辑  收藏  举报