安卓逆向-C语言简单普及 | IDA静态调试

C语言简单普及

//整型
 int a = 100;
 //字符串
 char *s = "yuanrenxue.com";
 //浮点型
 float = "3.14";
 //双精度浮点型
 double = "3.141592633764862";
 //指针
 int *a_add = &a;
 //字符串常量 不能修改
 const char *ss = "hello";
 //数组
 int num[5];
 char name[5];
 
 //1个字节(Byte) = 8位(Bit) 1K=1024B 1M = 1024K 1G = 1024M 1T = 1024G
 int8_t //占8位 1个字节
 int16_t //占16位 2个字节
什么是NDK开发
Android NDK:Android NDK 是一套允许您使用 C 和 C++ 等语言,以原生代码实现部分应用的工具集
用来做Native开发.so文件
官方网站:https://developer.android.com/ndk
Java如何调用so库里的方法/函数
(1)什么是JNI : JNI是Java Native Interface的缩写,用Java调用so库就叫着JNI。如下
 //在Java中申明一个Native方法
 public static native String securityCheck(Context context, String str);
 //用System.loadLibrary()加载so库 全称是 libnative-lib.so
 static {
 	System.loadLibrary("native-lib");
 }
注意这里的loadLibrary里的库名

在这里插入图片描述

(2) .so文件里对应的securityCheck函数名称是:

在这里插入图片描述

在这里插入图片描述

(3). .so文件里对应的函数名称不一致:(IDA静态调试后再讲)
这种情况叫着:手动注册native方法
函数对应的名称是在 JNI_ONLoad()函数里注册

在这里插入图片描述
在这里插入图片描述

(4)System.loadLibrary()加载so文件流程
先读取so文件的.init_array段(鼠标在主界面,按ctrl+s)

在这里插入图片描述

再执行JNI_OnLoad函数
JNI_ONLoad是.so文件的初始函数
然后调用具体的native方法

IDA静态调试

静态调试技巧:
  • 面板左侧函数列表可以查看每个函数的偏移量(相较于.so文件头的偏移量)
    在这里插入图片描述

  • 分栏
    在这里插入图片描述

  • F5键(windows fn+F5) 把汇编代码转成C代码

  • shift+F12 查看so文件中所有常量字符串的值 有的密码之类的可能就在这里面

  • ctrl + s 查看so文件段信息

  • JNI函数方法名还原 选中v3 按y键-作用(类型还原)
    v3 + 676 前面是一个指针 比如 *(_DWORD *)v3 + 676 表示 v3 是JNIEnv *类型(形如 *(_DWORD *)vX + YYY 皆是),可选中v3 按y键进行类型替换,替换为JNIEnv *
    在这里插入图片描述

  • 选中后右键可改变量名
    在这里插入图片描述

  • 选中行然后按 / 可在IDA上做注释

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值