今天练练手 做一个跳过签名验证的练习
下手的app :
1. 分析apk 首先拖入AndroidKiller
选择不分析
编译打包
拖入模拟器
发现直接停止运行
下面来找原因
2. 分析 拖入GDA3.72 打开入口 发现可以函数调用
进去看看
读取了签名 但是没有干啥事情
进kille把这段改掉,试试看
Arm汇编简单介绍 控制指令 跳转指令: B(Branch) => 分支的意思 B 无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 根据目标地址最低位切换状态(arm/thumb) BLX 带链接和状态切换的无条件跳转 B loc_地址 BEQ,BNE 存储器与寄存器交互数据指令 核心 存储器/寄存器: 内存,存储数据(小数据:寄存器,大数据:栈) 内存: 都是为数据服务 LDR/STR LDR: 从存储器中加载数据到寄存器中 => LOAD LDR R8,[R9,#4],R8为待加载数据的寄存器,加载值为 R9+0x4 所指向的存储单元, 伪代码 R8 = *(R9+4) …
NDK开发总结
Jni接口: java native interface 作用:用于java/c/c++ 代码之间的交互 使用方法: jni静态注册 在java代码中定义native修饰的方法; 根据java中native修饰的方法生成头文件(SRC路径执行javah -jni); 编写c/c++代码,导入头文件,同时实现头文件中的方法; 编写两个mk文件: Android.mk文件 Application.mk文件(头文件/代码文件和两个mk放入jni目录); 来带指定目录(jni所在路径),生成so文件; 动态注册 在java代码中定义native修饰的方法; 新建c/c++文件,导入 …
本文转发语NCK大佬的博客,并且自己跟着做了一遍 有一点点不同 大致上是大佬的文章:
https://www.cnblogs.com/fuhua/p/12725771.html
前面几篇文章演示的是比较原始的创建JNI项目的方法,旨在了解JNI项目构建原理!
但是构建项目效率很低,开发,调试都存在很大的效率低下问题。
本篇文章将演示利用Android Studio快速构建JNI项目。本篇文章要点
Android逆向 JNI静态注册(c++和java交互) 使用Android Studio新建JNi项目 请看NCK大佬的文章:
https://www.cnblogs.com/fuhua/p/12695436.html
先加个textview方便输出调试信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout …
Android Studio安装记录 发现各个大佬都在用AS 我也装一个用一下
1. 下载 下载地址:
https://developer.android.com/studio
2. 直接一路Next 等进度条走完就装好了
3. 配置 这里要导入配置 毛线的配置 直接点ok
开始配置
这里选默认,因为简单 自定义又不会
我喜欢暗黑色
选择finish 等安装完毕
Android逆向 JNI静态注册 1. 新建空白Android项目 打开 ADT 新建Android空白项目 全部默认下一步
2. 新增jni代码 使用jni写的需要用native修饰
3. 生成头文件 首先在ADT中新建 jni文件夹
右击src文件夹 选择 Properties 查看文件夹路径
这里为 C:\Users\asura\source\repos\Android_JNI\02_JNI_register\Jnidemo\src
使用ndk构建c语言可执行程序 1. 新建代码文件 hello.c
1 2 3 4 5 6 7 #include <stdio.h> int main() { printf("hello android JNI!"); return 0; } 2. 新建android编译make文件 Android.mk
1 2 3 4 5 6 7 8 9 10 11 LOCAL_PATH := $(call my-dir) # 获取jni文件路径 include $(CLEAR_VARS) # 因为是全局变量 所以要清理设置 LOCAL_CFLAGS += -std=c99 #使用c语言c99规范 …
dalvik 指令集 1 dalvik 指令格式 1 基础字节码-名称后缀/字节码后缀 目的寄存器 源寄存器 说明:
名称后缀: wide 表示数据宽度位 64位
字节码后缀 : from16 表示的就是源寄存器为16位
例子:
1 2 3 4 5 6 7 move-wide/from16 vAA, vBBBB move 为基础字节码,即 opcode wide 为名称后缀 , 标识指令操作的数据宽度为64位 from16 字节码后缀 , 标识源为一个16位的寄存器引用变量 vAA 目的寄存器 它始终在源的前面 //0xAA 8位 取值范围: v0~v255 vBBBB 源寄存器 …
1 .dalvik字节码 1 dalvik寄存器: 32位: 所有寄存器 64位: 使用两个相邻的寄存器 2 寄存器的命名法: v : 局部变量寄存器 v0-vn 参数寄存器: vn-vn+m p : 参数寄存器 p0-pn 变量寄存器 v0-vn 第一种
第二种
3 dex文件反汇编工具 .java编译成.class 再编译成 <code>.dex 最后编译得到 smali文件