mjj折腾常用脚本

性能测试

1
2
curl -sL yabs.sh | bash
wget -qO- bench.sh | bash

三网测试

1
bash <(curl -Lso- https://git.io/Jlkmw)

回程路由测速

1
curl https://raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh|bash

更改时区

1
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  

Docker安装

1
sudo curl -sSL https://get.docker.com/ | sh 

SpeedTest面板部署

1
docker run -d -p 8888:80 -e MAX_LOG_COUNT=100 -e IP_SERVICE=ip.sb -it badapple9/speedtest-x

bbr安装

1
2
3
wget -N --no-check-certificate -c -t3 -T60 -O ss-plugins.sh https://git.io/fjlbl
chmod +x ss-plugins.sh
./ss-plugins.sh

路由追踪

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
apt install -y traceroute
wget https://github.com/zu1k/nali/releases/download/v0.3.9/nali-linux-amd64-v0.3.9.gz
#https://github.com/zu1k/nali/releases/download/v0.3.9/nali-linux-armv8-v0.3.9.gz
gunzip nali-*.gz
mv nali-* /bin/nali
chmod +x /bin/nali

traceroute 1.1.1.1|nali

traceroute 2001:4860:4860::8888|nali

Android逆向 ARM汇编简介

Arm汇编简单介绍

控制指令

  1. 跳转指令: B(Branch) => 分支的意思
    • B 无条件跳转
    • BL 带链接的无条件跳转
    • BX 带状态切换的无条件跳转 根据目标地址最低位切换状态(arm/thumb)
    • BLX 带链接和状态切换的无条件跳转
    • B loc_地址
    • BEQ,BNE

存储器与寄存器交互数据指令 核心

  1. 存储器/寄存器: 内存,存储数据(小数据:寄存器,大数据:栈)
    • 内存: 都是为数据服务
  2. LDR/STR
    • LDR: 从存储器中加载数据到寄存器中 => LOAD
      • LDR R8,[R9,#4],R8为待加载数据的寄存器,加载值为 R9+0x4 所指向的存储单元, 伪代码 R8 = *(R9+4)
    • LDR: 将寄存器的火速据存储到存储区 => Store
      • STR R8,[R9,#4],将R8寄存器的数据存储到 R9+0x4指向的存储单元,伪代码: *(R9+4) = R8
  3. LDM/STM
    • LDM: 将存储器的数据加载到一个寄存器列表
      • LDM R0,{R1,R3},将R1指向的存储单元的数据一次加载到 R1,R2,R3寄存器
    • STM: 将一个寄存器列表的数据存储到指定的存储器
  4. PUSH/POP
    • PUSH: 将寄存器的值压入堆栈 压栈==>
    • POP 将堆栈值弹出到寄存器 出栈<==
  5. SWP: 将寄存器与存储器之间的数据进行交换
    • SWP R1,R1 [R0],将R1寄存器与R0指向的存储单元的内容进行交换
  6. 堆,队列:
    • 数据结构:
      • 栈是竖的,后进先出,且只能从栈顶一次填入数据

数据传输指令

MOV 将立即数或寄存器的数据传送到目标寄存器
MOV R0,#8 => R0 = 8

……

Android逆向 NDK开发总结

NDK开发总结

  1. Jni接口: java native interface
  2. 作用:用于java/c/c++ 代码之间的交互
  3. 使用方法:
    1. jni静态注册
      1. 在java代码中定义native修饰的方法;
      2. 根据java中native修饰的方法生成头文件(SRC路径执行javah -jni);
      3. 编写c/c++代码,导入头文件,同时实现头文件中的方法;
      4. 编写两个mk文件: Android.mk文件 Application.mk文件(头文件/代码文件和两个mk放入jni目录);
      5. 来带指定目录(jni所在路径),生成so文件;
    2. 动态注册
      1. 在java代码中定义native修饰的方法;
      2. 新建c/c++文件,导入jni.h头文件,编写c/c++文件 ,实现java层被native修饰的方法;
      3. 通过JNINativeMethod结构体绑定java和c/c++方法;
      4. 通过RegisterNatives方法注册java相应的类以及方法;
      5. 把c/c++注册方法写入到JNI_onload(两个参数),注意: JNI_onload是系统调用;
      6. 来到指定路径(jni所在路径),ndk_build生成so文件;
  4. 两种注册方法有区别的对比
    • 静态注册:
      1. 编写不方便,jni方法名字必须遵循规则且名字比较长;
      2. 运行效率不高;
    • 动态注册:
      1. 流程清晰可控;
      2. 运行效率高

Android逆向 Android Studio JNI 快速构建项目+动态注册+简易计算器

本文转发语NCK大佬的博客,并且自己跟着做了一遍 有一点点不同 大致上是大佬的文章:
https://www.cnblogs.com/fuhua/p/12725771.html

前面几篇文章演示的是比较原始的创建JNI项目的方法,旨在了解JNI项目构建原理!
但是构建项目效率很低,开发,调试都存在很大的效率低下问题。
本篇文章将演示利用Android Studio快速构建JNI项目。本篇文章要点

……