美文网首页
IDA 插件加载对32和64位的判断

IDA 插件加载对32和64位的判断

作者: zj753 | 来源:发表于2019-02-28 17:10 被阅读0次

在 plugins 存在 python.dll, python64.dll

显然python.dl 用于32 位,python64.dll用于 64 位

那么怎么区分的么?

ida.dll 导出函数 init_plugins 会被ida主程序调用

sub_10155F20 函数会对plugins 目录下的dll 文件进行扫描

memmove(v27, "*.dll", 5ui64);

get_ida_subdirs((__int64)&v25, (__int64)"plugins", 0);

sub_1014D8D0(

            0i64,

            0i64,

            (__int64)v11,

            (__int64)v14,

            (int (__fastcall *)(const CHAR *, __int64))sub_10155CE0,

            (__int64)v1);

{

v9 = enumerate_files(0i64, 0i64, a3, a4, (unsigned int (__fastcall *)(char *, __int64))sub_1014D850, (__int64)&Memory);

v9 = a5(v13, a6); // 调用回调

回调 函数 a5 是 sub_100ED820

}

sub_100ED820  调用  sub_100EDAA0

v9 = a5(v13, a6); // 在此处断下

__int64 __fastcall sub_100ED820(char *a1, __int64 a2)

{

  __int64 v2; // rbx

  char *v3; // rdi

  __int64 result; // rax

  v2 = a2;

  v3 = a1;

  if ( sub_100EDAA0(a1) )

    result = 0i64; // 64 bit 跳过

  else

// 32 位加入列表

    result = (*(__int64 (__fastcall **)(char *, _QWORD))v2)(v3, *(_QWORD *)(v2 + 8));

  return result;

}

bool __fastcall sub_100EDAA0(char *a1) // is_64_dll

{

  char *v1; // rax

  char *v2; // rdi

  char *v4; // rax

  unsigned __int64 v5; // rbx

  v1 = qbasename(a1);

  v2 = v1;

  if ( !v1 )

    return 1;

  v4 = get_file_ext(v1);

  v5 = (unsigned __int64)v4;

  return !v4

      || !stricmp(v4, "dll")

      && v5 >= (unsigned __int64)(v2 + 3)

      && *(_BYTE *)(v5 - 2) == '4'

      && *(_BYTE *)(v5 - 3) == '6';

}

-------------- ida64.dll 分析 -----------------

memmove((void *)Dst, "*64.dll", 7ui64);

sub_100F3360  返回0 加入列表

char __fastcall sub_100F3360(char *a1)

{

  __int64 v1; // rax

  __int64 v2; // rdi

  const char *v4; // rax

  unsigned __int64 v5; // rbx

  v1 = qbasename(a1);

  v2 = v1;

  if ( !v1 )

    return 1;

  v4 = (const char *)get_file_ext(v1);

  v5 = (unsigned __int64)v4;

  if ( !v4 )

    return 1;

  if ( stricmp(v4, "dll") )

    return 0;

  if ( v5 < v2 + 3 || *(_BYTE *)(v5 - 2) != '4' || *(_BYTE *)(v5 - 3) != '6' )

    return 1; // 必须带64

  return 0;

}

相关文章

  • IDA 插件加载对32和64位的判断

    在 plugins 存在 python.dll,python64.dll 显然python.dl 用于32 位,p...

  • [IE]加载64位ActiveX插件

    因项目需要,要使用IE内核加载64位编译的ActiveX插件,但是一直加载失败,32位的插件加载正常。后来终于找到...

  • name 'mipsrop' is not defined 问题

    问题描述将ida7.0 的miprop插件复制到ida7.5的plugins目录下后,本以为和ida7.0一样可以...

  • IDA 插件

    1. keypatch 可以直接修改二进制代码的插件 Keypatch 可以直接修改二进制代码的插件 链接:htt...

  • Android的动态加载插件

    Android的动态加载插件apk 分析 动态加载主要分为加载使用插件的资源和管理插件的Activity、serv...

  • IgniteMe_攻防世界RE【4】

    题目描述: 下载附件拖入ida,发现是win32 console Application。 解题过程: 拖入IDA...

  • 插件化和热修复对资源和类加载对比分析

    插件化和热修复对资源和类加载的管理 1 插件化为什么宿主可以解析插件资源2 热修复为什么可以解析补丁资源3 插件化...

  • so逆向

    动态调试:安装ida,ida安装F5调试工具,安装Eclipse,Eclipse安装DDMS插件相关软件:http...

  • IDA 使用

    当IDA加载后,3个立即可见的窗口分别为IDA-View窗口、函数窗口和消息输出窗口,所有窗口都可通过View▶O...

  • flutter 加载依赖 图片 IconFont

    加载依赖 flutter官方插件库 flutter加载资源和依赖都在pubspec.yaml文件中实现这个文件对写...

网友评论

      本文标题:IDA 插件加载对32和64位的判断

      本文链接:https://www.haomeiwen.com/subject/yydwsxtx.html