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项目。本篇文章要点

……

通过SNI Proxy加速国内服务器的WordPress更新

相信很多在国内服务器搭建WordPress的同学都有过这样的烦恼:更新不成功,后台某些页面打卡非常慢,插件主题没法在线安装等等等等这些问题,而且如果你的服务器又因为某些因素不方便直接搭建$$r之类的软件来给它加速,每次手动下载安装包再上传安装会是一件非常头疼的事。

……

解决windows 无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。


文件权限出现了问题

下面是一些可用的命令行帮助恢复

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 取得目录和内容的所有权 可以将其范围缩小到要更改的特定项,具体取决于有多少项。
takeown /f C:\Windows\Web /r

# 授予自己完全的控制权 注意 %USERDOMAIN%\%USERNAME% 将自动替换为您的用户-所以这里无需在此替换任何内容
icacls C:\Windows\Web /grant "%USERDOMAIN%\%USERNAME%":(F) /t

# 恢复windows10默认的所有者
icacls c:\Windows\Web /setowner "NT SERVICE\TrustedInstaller" /t

# 删除授予的权限
icacls C:\Windows\Web /remove:g "%USERDOMAIN%\%USERNAME%":(F) /t

一种替代方法是保存和恢复ACL

……