IDA使用

下载:通过网盘分享的文件:IDA_Pro_7.7.7z
链接: https://pan.baidu.com/s/18QuV4wu19pF6oXssNVAbRQ?pwd=vehq 提取码: vehq

安装后请看目录内的使用说明文件操作

JNI的两种注册方式

JNI有静态注册和动态注册两种,静态注册在分析的比较简单,动态注册的话就需要先了解下注册步骤。

#include <jni.h>
#include <string>

extern "C" {

JNIEXPORT jstring JNICALL Java_com_example_ndkdemo_MainActivity_nativeGetStringFromJNI(JNIEnv* env, jobject obj) {
    std::string hello = "Hello wuaipojie";
    return env->NewStringUTF(hello.c_str());
}

// 定义本地方法注册函数
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
    JNIEnv* env;
    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
        return -1;
    }

    // 定义要注册的本地方法
    JNINativeMethod methods[] = {
        {"nativeGetStringFromJNI", "()Ljava/lang/String;", reinterpret_cast<void*>(Java_com_example_ndkdemo_MainActivity_nativeGetStringFromJNI)}
    };

    // 获取类引用
    jclass clazz = env->FindClass("com/example/ndkdemo/MainActivity");
    if (clazz == nullptr) {
        return -1;
    }

    // 注册本地方法
    if (env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])) < 0) {
        return -1;
    }

    return JNI_VERSION_1_6;
}

} // extern "C"

IDA快捷键

快捷键功能
Esc回到上一个位置
Enter跳转到当前光标处的地址
折叠代码
+展开代码
*创建一个结构
Alt + A手动定义一个数组
Alt + F寻找直接引用的函数
Alt + G跳转到特定的地址
Alt + T显示调用树
Alt + X重命名
Ctrl + G快速跳转到指定地址
Ctrl + J显示引用列表
Ctrl + K显示 XREF 到选中的函数/数据
Ctrl + N创建一个函数
Ctrl + Q快速重命名
Ctrl + X显示从选中的函数/数据的 XREF
Ctrl + E显示结构类型
Ctrl + R手动定义一个数据结构
Ctrl + W打开函数列表
Ctrl + D以十进制显示当前值
Ctrl + B以二进制显示当前值
Ctrl + H以十六进制显示当前值
Space在图形/文本视图中切换
shift + f12打开字符串窗口
F5转伪C代码

Patch(修改so)方式

第一种:keypatch插件快速修补

IDA View-A中选中要修改的行
快捷键:Ctrl+Alt+k

第二种:ARM TO Hex

  1. IDA View-A中选中要修改的行,然后点击Hex View-1,高亮处就是对应的汇编指令。
  2. 将IDA View-A中选中要修改的行复制到下面的链接中,可以看到显示的汇编指令和IDA中一致。
  3. 在左侧做出修改后右侧会显示对应的指令,在IDA高亮汇编指令处右键-Edit-填入上一步的指令-右键-Apply changes

ARM to HEX

第三种:NOP

IDA view-A种跳转的地方右键NOP,来取消跳转。

第一,二,三种修改完后Edit-Path progarm-Apply patches to input files进行保存,然后用新的so文件去覆盖原有的so文件,使用MT管理器进行重新签名后安装

上一篇
下一篇