IDA中 动态调试 首先考虑 在伪C代码 下断点
特别注意:
对于 一般的 情况下 可以直接在伪C代码 下断点
程序流程分析的话 直接在伪C下断点 调试分析
效率极高 很直观 很效率
一般来讲先在 主线函数 (Java接口层函数)下 下断点
分析 流程
然后 在 主线函数里的 函数里 下断点 分析 具体数值来由
当jni里的 函数 用的是 java的 函数的时候 这个时候 是不能再内存中 直观 截获到 值的(字符串 数值)啥的
要是用的 C代码的 C函数 就可以 直观的 在 内存中 截获出来
例如:
JNI里Java的函数代码
v13 = (v3->functions->GetFieldID)(v3, v12, “signatures”, “[Landroid/content/pm/Signature;”);
v14 = (v3->functions->GetObjectField)(v3, v11, v13);
v15 = (v3->functions->GetObjectArrayElement)(v3, v14, 0);
result = _JNIEnv::NewStringUTF(v3, str);
这样的 都是 java的 函数 是不能再内存中 截取出来 值的
JNI里C 函数代码
sprintf(str, “%u”, v19);
strcpy(v10, v6);
strcat(v10, v7);
这样的 C函数 代码 是 可以直接在这里下断点
如果是在伪C代码处下断点的话 是可以通过 把鼠标 移动到 变量上 来查看到
其在内存中的值的
字符串的话 貌似直接出来
char *指针啥的 那么就是 保存的指针 那么可以通过 在寄存器里 找到 这个指针值 然后