这些都是通过学长给予,以及网络上的资源来做的个人理解、总结,大牛们不要喷。
零基础小萌新在角落瑟瑟发抖的认真记笔记。

安卓逆向学习笔记(一)

  • 写一个安卓程序
    安装所需软件android studio,因为貌似被墙了所以没有用官网下载。
    官网下载链接及教程,链接官网下载链接,教程安装及下载教程 网上另找的资源(内附教程)android studio v3.0网盘下载 百度网盘下载太慢解决链接(可能用不了,自行解决谢谢):传送门

1、JAVA 环境配置(请大佬自动略过)

      先下载jdk(最好安装在C盘,默认安装),请自行搜索。因为安卓为java开发所以配置java环境尤为重要:

    (1)右键单击电脑——>打开属性——>高级系统设置——>环境变量(下图示)

android 逆向app 修改UI 安卓逆向入门教程_android 逆向app 修改UI


然后在系统变量中添加3个变量:

【1】、变量名:JAVA _HOME       变量值:你的jdk安装路径

android 逆向app 修改UI 安卓逆向入门教程_android_02

【2】变量名:CLASSPATH       变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

android 逆向app 修改UI 安卓逆向入门教程_java环境配置_03

【3】变量名:PATH       变量值(两个变量值):%JAVA_HOME%\bin%      JAVA_HOME%\jre\bin

android 逆向app 修改UI 安卓逆向入门教程_Text_04

【4】检测是否配置成功

      win+R 打开 cmd,输入 java,出现一连串的指令提示,说明配置成功了:

输入 java

android 逆向app 修改UI 安卓逆向入门教程_安卓逆向_05


输入javac

android 逆向app 修改UI 安卓逆向入门教程_Text_06


输入java -version

android 逆向app 修改UI 安卓逆向入门教程_java环境配置_07


到这里就成功配置好java环境了

2、开始写第一个安卓程序

打开我们的android studio,当我准备开始编写的时候发现很多错误,进行很不顺利,列出部分错误解决方法:
所有版本sdk下载方法及Android Studio无法显示Design视图解决方法 在安装时可能无法勾选sdk下载解决方法 Error:Execution failed for task ':app:preDebugAndroidTestBuild’解决方法 Error:Failed to find Build Tools revision 26.0.2解决方法 然后就是了解一下ConstraintLayout传送门 然后开心的开始写一个简单的界面(可以先看一下别人写的讲解比较详细传送门)
下面是activity_main.xml代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.myh18.myapplication.Login">

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="28dp"
        android:text="@string/app_name"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />

    <EditText
        android:id="@+id/userEdit"//这个就是id的名字,划重点主程序直接可以调用
        android:layout_width="wrap_content"
        android:layout_height="49dp"
        android:layout_marginBottom="8dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="@string/message2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.792"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.429" />

    <EditText
        android:id="@+id/passwordEdit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="68dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="@string/message3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.792"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/userEdit" />

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_end="384dp" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:onClick="thisButtonLogin"
        android:text="@string/message4"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.664"
        app:layout_constraintStart_toEndOf="@+id/guideline"
        app:layout_constraintTop_toBottomOf="@+id/userEdit"
        app:layout_constraintVertical_bias="0.522" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="57dp"
        android:layout_height="29dp"
        android:text="@string/message5"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/userEdit"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/guideline"
        app:layout_constraintTop_toBottomOf="@+id/textView4"
        app:layout_constraintVertical_bias="0.4" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/message6"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/passwordEdit"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/guideline"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:layout_constraintVertical_bias="0.313" />

</android.support.constraint.ConstraintLayout>

在手机上运行的效果图

android 逆向app 修改UI 安卓逆向入门教程_android_08


android 逆向app 修改UI 安卓逆向入门教程_安卓逆向_09


然后先解决几个小问题,比如说什么Error:Execution failed for task ‘:app:compileDebugJavaWithJavac’. > Compilation failed;

see the comp

这可能是因为buildToolsVersion版本不一致,打开build.gradle

然后在dependencies里面写入格式为androidTestCompile('com.android.support:support-annotations:'版本') { force = true } 这样就可以了

然后就是查看代码错在哪里,方法如下

点击Terminal输入gradlew compileDebugSources --stacktrace -info ,查看原因

如图

android 逆向app 修改UI 安卓逆向入门教程_安卓逆向_10


下面是主程序代码

package com.example.myh18.myapplication;//这是自己application保存的路径

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.os.Bundle;
import com.example.myh18.myapplication.R;//R包,这个不能直接复制粘贴,有报错直接alt+enter生成对应R包即可


public class Login extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);//activity_main就是你界面的名称
    }
    public void thisButtonLogin(View view){
        //接收按钮按下事件

        //获取用户输入的账号和密码
        EditText editText = (EditText)findViewById(R.id.userEdit);
        String user = editText.getText().toString();
        editText = (EditText)findViewById(R.id.passwordEdit);
        String pw = editText.getText().toString();

        //这一段是测试的遗留的,用来在判断前输出输入的账号内容
        //AlertDialog.Builder message = new AlertDialog.Builder(this);
        //message.setMessage(user);
        //message.setPositiveButton("确定",click1);
        //AlertDialog message1 = message.create();
        //message1.show();

        //判断两个编辑框内容是否为空
        if (user == null || user.length() == 0) {
            AlertDialog.Builder usermessage=new AlertDialog.Builder(this);
            usermessage.setMessage("用户名不能为空!");
            usermessage.setPositiveButton("确定",click1);
            AlertDialog usermessage1=usermessage.create();
            usermessage1.show();
        }else if(pw == null || pw.length() == 0) {
            AlertDialog.Builder pwmessage=new AlertDialog.Builder(this);
            pwmessage.setMessage("密码不能为空!");
            pwmessage.setPositiveButton("确定",click1);
            AlertDialog pwmessage1=pwmessage.create();
            pwmessage1.show();
        }else{
            //弹出信息框,显示用户输入的账号和密码
            AlertDialog.Builder winmessage = new AlertDialog.Builder(this);
            winmessage.setMessage("账号:"+user+"\n"+"密码:"+pw);
            winmessage.setPositiveButton("确定",click2);
            AlertDialog winmessage2 = winmessage.create();
            winmessage2.show();
        }
    }
    private DialogInterface.OnClickListener click1 = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    };
    private DialogInterface.OnClickListener click2 = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    };
}

然后就可以开心的bulid啦,终于写完了第一个app程序。如果想在自己手机上运行,还要注意自己手机的android版本,屏幕分辨率。

补充知识点:然后签名方法如下,先呈上别人直接签名打包的方法传送门 再附上吾爱破解的工具包,签名很方便传送门推荐1.1版本,因为有一个

android 逆向app 修改UI 安卓逆向入门教程_Text_11


有一个右键工具,在以后的逆向过程中很方便。