参考资料:

1、15PB安卓学习资料

2、《教我兄弟学Android逆向01 编写第一个Android程序》

1、Android程序创建详解

1、打开Android Studio界面如下

android做法 安卓程序制作_控件

2、选择对应的Activity

android做法 安卓程序制作_android_02

 3、填写包名、类名、路径名(默认即可)

android做法 安卓程序制作_控件_03

 4、Android项目生成的文件介绍

android做法 安卓程序制作_android_04

android做法 安卓程序制作_java_05

5、清单文件介绍

清单:AndroidManifest.xml

功能:四大组件和权限外,还有一个重要的东西,就是程序的入口

android做法 安卓程序制作_android_06

在入口类执行之前,其实还会执行一个类的代码就是 Application 类中的代码 Application 类的 attachBaseContext 是一个 app 最早执行的函数代码。其次是这个类的和 onCreate 函数。之后才是 Activity。

6、布局文件介绍

android做法 安卓程序制作_android_07

2、创建一个CrackMe程序

我们打算创建一个CrackMe程序逻辑大致如下:输入正确的账号和密码点击确定则提示成功、否则失败

android做法 安卓程序制作_android studio_08

 我们需要控件如下:

两个TextView分别是:账号、密码

两个Plain Test分别是:账号、密码的输入框

一个Button确认按钮

android做法 安卓程序制作_android_09

 然后编写对应的逻辑代码


packagecom.crackme.myapplication;

importandroidx.appcompat.app.AppCompatActivity;

importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importandroid.widget.Toast;

publicclassMainActivityextendsAppCompatActivity{
EditTextName;//定义PlainTest控件第一个输入框的名字
EditTextPass;//定义PlainTest控件第二个输入框的名字

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Name=(EditText)findViewById(R.id.Name_editText);//通过findViewById找到输入框控件对应的id并给它起一个名字
Pass=(EditText)findViewById(R.id.Password_editText);//通过findViewById找到输入框控件对应的id并给它起一个名字
ButtonLogin=(Button)findViewById(R.id.onOk);//通过findViewById找到按钮控件对应的id并给它起一个名字
Login.setOnClickListener(newView.OnClickListener(){//监听有没有点击按钮控件如果点击了就会执行onClick函数
@Override
publicvoidonClick(Viewview){
check(Name.getText().toString().trim(),Pass.getText().toString().trim());//调用check函数
}
});
}

publicvoidcheck(Stringname,Stringpass)//自定义函数check这里用来检查用户名和密码是否是hfdcxy和1234
{
if(name.equals("pediy")&&pass.equals("1234"))
{
Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();//弹框
}
else
Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();//弹框
}
}


android做法 安卓程序制作_android做法_10

android做法 安卓程序制作_android_11

3、解析一个CrackMe程序

APK文件其实是压缩包格式,可以用各种解压缩文件打开。核心就是分析classes.dex文件

android做法 安卓程序制作_java_12

 直接使用集成工具AndroidKiller反汇编整个apk

android做法 安卓程序制作_控件_13

 浅谈我们的切入点:

1、我们可以从activity_main.xml资源文件和strings.xml字符串文件入手

源码对照

android做法 安卓程序制作_控件_14

 查询这些敏感ID的全局引用,例如:2131165304我们全局查找

android做法 安卓程序制作_android studio_15

 发现这ID对应的是按钮,其他以此类推

android做法 安卓程序制作_java_16

2、入口地址从onCreate开始看

核心部分是check函数,只要让if成立即可,也就是说即使我们输入不对的账号和密码也提示成功

android做法 安卓程序制作_android studio_17

我们切换回smali汇编修改

方法1:直接注释if-eqz v0, :cond_0两条汇编代码,使其永远成立

android做法 安卓程序制作_android做法_18

 现在if判断注释掉了,无论输入什么都提示成功

android做法 安卓程序制作_控件_19

 方法2:将if-eqz v0, :cond_0命令修改成if-nez 使其逻辑取反,不成立则提示成功。

android做法 安卓程序制作_android做法_20

 只要输入非正确密码都提示成功

android做法 安卓程序制作_android studio_21