安卓逆向-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上做注释

猜你喜欢

转载自blog.csdn.net/m0_50685012/article/details/114634336
今日推荐