cmd与环境变量

1. cmd的打开方式

开始 -> 右键 ->运行 -> cmd

指定目录快捷打开cmd; 路径栏输入cmd

2. cmd基本操作

dir:

​ 显示当前路径下的所有文件

cls:

​ 清屏

cd/d:

​ 用于切换不同盘之间的文件

cd:

​ change dirction 改变当前位置

cd . .

​ 回到上级目录

cmd中运行文件 ,上下键选择之前输入过的命令,tab补全,右键复制/粘贴

3.相对路径和绝对路径

路径名从C盘,D盘开始到你想要去的位置是绝对路径,而从当前位置到你想去的位置是相对路径

4. 环境变量

系统变量/用户变量

环境变量的作用 :

通过加入环境变量可以让你在不同的位置来访问文件

adb工作原理

1 adb的作用

2 adb构成

1 client端,在电脑上,负责发送adb命令

2 daemon守护进程adbd,在手机上,负责接收和执行adb命令

3 server端,在电脑上,负责管理client和daemon之间的通信

3 adb工作原理

1 client端将命令发送给server端

2 server端会将命令发送给daemon端

3 daemon端进行执行

4 将执行结果,返回给server端

5 server端将结果再返回给client端

4 超级adbd

adb root

adb remount

image-20250810153911320

5 abd常用命令

image-20250810154957289

通过adb卸载app时不是文件,而是要找到包名

用jadx打开apk文件,在AndroidManifest.xml中找到package这个属性,后面就是包名l

adb push 文件的路径后面要加一个空格 加要推送到手机的哪个目录下

adb shell 从电脑端进入到手机的控制台去

adb pull +要从手机提取的文件的位置 + 要将文件的存放的电脑的位置,无代表就在当前目录下

logcat

image-20251027200014275

第三点这个”|”标识符代表连接两个命令,让前一个命令的结果让后一个命令执行

例如:

image-20251029195503406

ps -A是linux系统上的命令,可以让我们输出设备当前的状态信息

grep 命令是可以让我们在当前的状态信息中过滤出我们想要的信息

6853就是我们想要的pid

同样的你可以在AS上看logcat

image-20251029194817295

使用 Logcat 查看日志 | Android Studio | Android Developers

真机环境配置

1 刷机

1 刷机方式的分类

线刷 刷的比较彻底,可以刷bootloader、radio

卡刷 刷完后需要双清、三清、四清等

2 刷机包的分类

线刷包/工厂镜像包

卡刷包/OTA全量包?OTA增量包

3 谷歌手机工厂镜像

https://developers.google.com/android/images

4 线刷包的组成

bootloader、radio、Android系统

5 刷机教程

谷歌官方的

https://source.android.com/source/running.html

小肩膀的

https://mp.weixin.qq.com/s/1EySfXSucGdiuEBTfLsymA

2 root

1 root方法

magisk下载 https://github.com/topjohnwu/Magisk/releases

2 修改时间

修改boot刷机后,在设置里再调整下时间。时间不对访问网络会出问题

3 关闭WiFi信号上的叉

关闭检测 adb shell settings put global captive_portal_mode 0

然后打开飞行模式 再关闭飞行模式即可

4 停用设置向导

设置 ——> 应用和通知 ——> 显示全部应用 ——> 显示系统应用(右上角) ——> Android设置向导(停用)

Root手机端的命令

命令 作用地点 作用
ls 手机的一个目录內 显示该文件下的程序列表

安卓逆向知识扫盲

我们想要做安卓逆向,首先要对安卓系统有最基本的认识

image-20251029201103878

探索 APK 文件的内部:了解 Android 应用程序的组织结构_apk如何查看文件构成情况-CSDN博客

Linux 常用命令

Linux的层级式的树状目录结构

在此结构中的最上层是根目录 /

在根目录下在创建其他的目录

/开始的路径都是绝对路径

Linux中一切皆文件(包括硬件),命令实际上是系统中一个二进制文件

Linux文件不需要扩展名,有的时候为了区分才人为加上的扩展名

Linux中的隐藏文件,文件名以 . 开头即可

image-20251122150703304 image-20251123190410111

Linux系统下会区分大小写,而安卓系统下对大小写区分不敏感

安卓常用目录

[安卓系统是基于Linux系统开发的,所以两者在许多部分有相似之处]:

image-20260210193623779

image-20260213110731480

sdcard是软连接

Linux权限

image-20260213111956582

image-20260221160125170

Android 开发介绍

image-20260223181916100

Android 程序项目分析

先咕咕嘎嘎一会,以后有空来填这个坑

各个部分的作用

这部分也先放在这里,等什么时间有空来补完全

build.gradle的介绍

AndriidManifest.xml(清单文件)介绍

image-20260311162514931

根节点是manifest。根节点的package属性指定包名,根节点下又有诺干子节点

user-permission 声明app自身属性

application 指定app自身属性

​ Android:allowBackup 是否允许备份

​ Android:icon 在手机桌面上的图标

​ Android:label 在手机屏幕上显示的名称

​ Android:supportsRtl 是否支持从左往右的文字排列顺序

​ Android:theme 显示主题

​ Android:name 可选,一般加固应用都会有这个,这里定义的类比activity先执行

application 中还有诺干子节点,比如四大组件的注册

1
2
3
4
<activity android:name=".MainActivity">
表示这是一个界面,对应类名是当前包名下的MainAxtivity
<category android:name="android,intent.category.LADBCHER"/>
带有这一条的界面是启动界面入口

事件执行顺序

Application attachBaseContext

Application onCreate

MainActivity attachBaseContexrt

MainActivity onCreate

Application的生命周期很长,可以用来传递一些全局变量

基本控件的使用

Button

image-20260312165201105

控件id -> 在代码中方便的获取控件

四种点击事件绑定方式

第一种 : 在XML中用 Android:onClick

直接在布局文件里给按键指定点击后调用的方法

1
2
3
4
5
6
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮1"
android:onClick="handleClick"/>

然后在 activity 中写对应的方法:

1
2
3
public void handleClick(View view) {
Toast.makeText(this, "点击了按钮", Toast.LENGTH_SHORT).show();
}

特点:

  • 写法简单
  • 适合小项目,单个按键快速处理
  • 方法名和标签必须固定: public void 方法名(View view)

第二种 : 匿名内部类绑定

这是最经典,最常用的一种.

1
2
3
4
5
6
7
Button btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了按钮", Toast.LENGTH_SHORT).show();
}
});

特点:

  • 代码直观,按钮逻辑写在旁边

  • 适合按钮不多的时候

  • 如果按钮很多,会显得重复,臃肿

第三种: 让 Activity实现 View.OnClickListener

适合多个按钮统一处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

Button btn1, btn2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn1 = findViewById(R.id.btn1);
btn2 = findViewById(R.id.btn2);

btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
Toast.makeText(this, "点击了按钮1", Toast.LENGTH_SHORT).show();
break;
case R.id.btn2:
Toast.makeText(this, "点击了按钮2", Toast.LENGTH_SHORT).show();
break;
}
}
}

特点:

  • 便于集中管理多个按钮事件
  • 常用于表单页,菜单页
  • 按钮太多时,Onclick()会变得很长

第四点 : 单独定义内部类或外部类实现监听

把点击逻辑单独拆出去,便于复用 .

内部类方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MainActivity extends AppCompatActivity {

Button btn1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(new MyClickListener());
}

class MyClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "点击了按钮", Toast.LENGTH_SHORT).show();
}
}
}

特点:

  • 结构比较清晰
  • 适合服用同一套点击逻辑
  • 比匿名内部类更规范一些

log

Toast(吐司)

TextView

通过硬编码来定位字符串

image-20260322111901457

public.xml文件