分类 Android articles

Android逆向 练习1 跳过签名验证

今天练练手 做一个跳过签名验证的练习 下手的app : 1. 分析apk 首先拖入AndroidKiller 选择不分析 编译打包 拖入模拟器 发现直接停止运行 下面来找原因 2. 分析 拖入GDA3.72 打开入口 发现可以函数调用 进去看看 读取了签名 但是没有干啥事情 进kille把这段改掉,试试看 发现崩溃依旧 继续回……

Continue reading

Android逆向 ARM汇编简介

Arm汇编简单介绍 控制指令 跳转指令: B(Branch) => 分支的意思 B 无条件跳转 BL 带链接的无条件跳转 BX 带状态切换的无条件跳转 根据目标地址最低位切换状态(arm/thumb) BLX 带链接和状态切换的无条件跳转 B loc_地址 BEQ,BNE 存储器与寄存器交互数据指令 核心 存储器/寄存器: 内存,存储数据(小数据:寄存器,大……

Continue reading

Android逆向 NDK开发总结

NDK开发总结 Jni接口: java native interface 作用:用于java/c/c++ 代码之间的交互 使用方法: jni静态注册 在java代码中定义native修饰的方法; 根据java中native修饰的方法生成头文件(SRC路径执行javah -jni); 编写c/c++代码,导入头文件,同时实现头文件中的方法; 编写两……

Continue reading

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

本文转发语NCK大佬的博客,并且自己跟着做了一遍 有一点点不同 大致上是大佬的文章: https://www.cnblogs.com/fuhua/p/12725771.html 前面几篇文章演示的是比较原始的创建JNI项目的方法,旨在了解JNI项目构建原理! 但是构建项目效率很低,开发,调试都存在很大的效率低下问题。 本篇文章将演示利用Android Studio快速构建JNI项……

Continue reading

Android逆向 JNI静态注册(c++和java交互)

Android逆向 JNI静态注册(c++和java交互) 使用Android Studio新建JNi项目 请看NCK大佬的文章: https://www.cnblogs.com/fuhua/p/12695436.html 先加个textview方便输出调试信息 <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/TextViewDebug" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="TextView" /> </androidx.coordinatorlayout.widget.CoordinatorLayout> 1. JNI普通字段,静态字段互操作. 目标: 获取普通字段的值,设置普通字段的值,获取静……

Continue reading

Android Studio安装记录

Android Studio安装记录 发现各个大佬都在用AS 我也装一个用一下 1. 下载 下载地址: https://developer.android.com/studio 2. 直接一路Next 等进度条走完就装好了 3. 配置 这里要导入配置 毛线的配置 直接点ok 开始配置 这里选默认,因为简单 自定义又不会 我喜欢暗黑色 选择finish 等安装完毕 这里要等一会 看网络情况 4. 测试项目 新建一个项目 选……

Continue reading

Android逆向 JNI静态注册

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 打开命令行 到达指定的目录执行java……

Continue reading

Android逆向 使用NDK编译c语言可执行程序

使用ndk构建c语言可执行程序 1. 新建代码文件 hello.c #include <stdio.h> int main() { printf("hello android JNI!"); return 0; } 2. 新建android编译make文件 Android.mk LOCAL_PATH := $(call my-dir) # 获取jni文件路径 include $(CLEAR_VARS) # 因为是全局变量 所以要清理设置 LOCAL_CFLAGS += -std=c99 #使用c语言c99规范 LOCAL_CFLAGS += -pie -fPIE #相当于在源文件中增加宏定义,安卓5.0以上需要添加,否则编译出来无法使用 LOCAL_LDFLAGS……

Continue reading

Android逆向-2 dalvik 指令集1

dalvik 指令集 1 dalvik 指令格式 基础字节码-名称后缀/字节码后缀 目的寄存器 源寄存器 说明: 名称后缀: wide 表示数据宽度位 64位 字节码后缀 : from16 表示的就是源寄存器为16位 例子: move-wide/from16 vAA, vBBBB move 为基础字节码,即 opcode wide 为名称后缀 , 标识指令操作的数据宽度为64位 from16 字节码后缀 , 标识源为一个16位的寄存器引用变量 vAA 目的寄……

Continue reading

Android逆向-1 dalvik字节码

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文件 .java -> .class -> .dex ->……

Continue reading