初识SO和JNI

JNI(Java native interface)

  • 通俗理解就是为了实现Java和C,C++之间通信而出现的工具,Java是最顶层 JNI是中层 C是底层

  • Android 之中 存在NDK 这个就可以实现java和c之间的通信,ndk是jni的封装 可以在jdk和sdk之中查找到jni.h文件

  • jni在进行java和c的互相翻译的时候对于那些个int string之类的数据类型大多都取的是大写的第一个字母 除了boolean使用的是z以外 这一点同smail

  • 在Android逆向之中so文件是不可避免的 c和java层的通信也是要会的jni深入后续再学

  • 为什么要用so文件 找一个音视频的app 进行拆包之后会发现会存在很多的so文件 因为使用c或者c++之类的底层语言能大大提高运算和音视频解码的效率 在Java之中调用的一般是system.loadlibary("")来进行so文件的加载和调用

  • 不止用于提高app的效率 有很多开发者在so文件添加加解密的方法和一些报名校验和签名校验 这样会大大提高app的安全性 有做的绝的 会去签名中的一段来进行校验从而进行安全性的保护

  • 如果在进行破解的时候遇到拆包之后重打包可以安装 但是安装之后就一直在加载界面 日志也没有任何有用的信息的时候就可以考虑是否是有在so文件做包名校验了

  • 如遇到签名校验 需要一个so文件一个so文件的挨着检查 虽然有一些是固定的第三库自带的so文件 比如腾讯的轻量级存储mmkv 如果使用这个会有一个mmkv的so文件 这种也需要进行检查 不排除开发者会讲话包名校验或者签名校验写里面 进入so文件之后全局搜索signature或者packageinfo 调用的是Android层的api用于获取签名或者包名从而实现校验

  • 一般是选择更改方法的返回值 只需要改一个地方就好 做得少 错的少同样是适用

  • so文件是可以转换成c的伪代码 从而更好的观察逻辑 更改的时候更改的是16进制文件