安卓逆向入门笔记
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

5 abd常用命令

通过adb卸载app时不是文件,而是要找到包名
用jadx打开apk文件,在AndroidManifest.xml中找到package这个属性,后面就是包名l
adb push 文件的路径后面要加一个空格 加要推送到手机的哪个目录下
adb shell 从电脑端进入到手机的控制台去
adb pull +要从手机提取的文件的位置 + 要将文件的存放的电脑的位置,无代表就在当前目录下
logcat

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

ps -A是linux系统上的命令,可以让我们输出设备当前的状态信息
grep 命令是可以让我们在当前的状态信息中过滤出我们想要的信息
6853就是我们想要的pid
同样的你可以在AS上看logcat

使用 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 | 手机的一个目录內 | 显示该文件下的程序列表 |
安卓逆向知识扫盲
我们想要做安卓逆向,首先要对安卓系统有最基本的认识

探索 APK 文件的内部:了解 Android 应用程序的组织结构_apk如何查看文件构成情况-CSDN博客
Linux 常用命令
Linux的层级式的树状目录结构
在此结构中的最上层是根目录 /
在根目录下在创建其他的目录
/开始的路径都是绝对路径
Linux中一切皆文件(包括硬件),命令实际上是系统中一个二进制文件
Linux文件不需要扩展名,有的时候为了区分才人为加上的扩展名
Linux中的隐藏文件,文件名以 . 开头即可
Linux系统下会区分大小写,而安卓系统下对大小写区分不敏感
安卓常用目录
[安卓系统是基于Linux系统开发的,所以两者在许多部分有相似之处]:


sdcard是软连接
Linux权限


Android 开发介绍

Android 程序项目分析
先咕咕嘎嘎一会,以后有空来填这个坑
各个部分的作用
这部分也先放在这里,等什么时间有空来补完全
build.gradle的介绍
AndriidManifest.xml(清单文件)介绍

根节点是manifest。根节点的package属性指定包名,根节点下又有诺干子节点
user-permission 声明app自身属性
application 指定app自身属性
Android:allowBackup 是否允许备份
Android:icon 在手机桌面上的图标
Android:label 在手机屏幕上显示的名称
Android:supportsRtl 是否支持从左往右的文字排列顺序
Android:theme 显示主题
Android:name 可选,一般加固应用都会有这个,这里定义的类比activity先执行
application 中还有诺干子节点,比如四大组件的注册
1 | <activity android:name=".MainActivity"> |
事件执行顺序
Application attachBaseContext
Application onCreate
MainActivity attachBaseContexrt
MainActivity onCreate
Application的生命周期很长,可以用来传递一些全局变量
基本控件的使用
Button

控件id -> 在代码中方便的获取控件
四种点击事件绑定方式
第一种 : 在XML中用 Android:onClick
直接在布局文件里给按键指定点击后调用的方法
1 | <Button |
然后在 activity 中写对应的方法:
1 | public void handleClick(View view) { |
特点:
- 写法简单
- 适合小项目,单个按键快速处理
- 方法名和标签必须固定:
public void 方法名(View view)
第二种 : 匿名内部类绑定
这是最经典,最常用的一种.
1 | Button btn1 = findViewById(R.id.btn1); |
特点:
代码直观,按钮逻辑写在旁边
适合按钮不多的时候
如果按钮很多,会显得重复,臃肿
第三种: 让 Activity实现 View.OnClickListener
适合多个按钮统一处理
1 | public class MainActivity extends AppCompatActivity implements View.OnClickListener { |
特点:
- 便于集中管理多个按钮事件
- 常用于表单页,菜单页
- 按钮太多时,
Onclick()会变得很长
第四点 : 单独定义内部类或外部类实现监听
把点击逻辑单独拆出去,便于复用 .
内部类方式
1 | public class MainActivity extends AppCompatActivity { |
特点:
- 结构比较清晰
- 适合服用同一套点击逻辑
- 比匿名内部类更规范一些
log
Toast(吐司)
TextView

通过硬编码来定位字符串

public.xml文件
