百趣云
百趣云的博客
🔖SO逆向
为什么静态符号找不到 native 方法分析 SO 时经常遇到:Java 层声明了 public static native String getSign(...),但 IDA 的导出表里找不到 Java_com_xxx_getSign。原因是 JNI 动态注册——SO 在 JNI_OnLoad 里调用 RegisterNatives,把 Java 方法名和 native 函数地址运行时绑定,符号表里完全没有痕迹。这是商业 App 的标配做法,目的就是增加静态分析难度。但绑定动作本身必须调用系统 API,这就是突破口。RegisterNatives 的数据结构动态注册的核心是一个 JNINat
TracerPid 检测的原理Linux 下进程被 ptrace 附加时,/proc/self/status 里的 TracerPid 字段会变成调试器的 PID,未被调试时是 0。SO 反调试的标准做法就是周期性读这个文件:// 典型检测代码(SO 里的实现)
int check_debugger() {
char buf[512];
int fd = open("/proc/self/status", O_RDONLY);
read(fd, buf, sizeof(buf));
close(fd);
char* p = strst