能力值:
( LV2,RANK:10 )
|
-
-
2 楼
这么重要问题,居然没人关心,没天理,
发现象结构体内部的指针,指针数组,函数虚表(函数指针数组), 都无法处理,
IDA Pro只对结构体起始变量,指针数组第一元素,才会生成交叉引用.
typedef void (*FUNC)();
FUNC pf[2] = {pf1,pf2};
.text:00401070 mov ecx, pt[esi*4]
.text:00401077 test ecx, ecx
.text:00401079 jz short loc_401089
.text:0040107B mov eax, [ecx]
.text:0040107D mov edx, [eax+4]
.text:00401082 call edx
IDA Pro 居然无法识别,call edx 实际就是 call pf2.
这样一来, 从pf2函数开始分析,就无法直接攻取函数调用流程.
事实上,IDA Pro可能只是通过读取reloc直接获取交叉引用信息,而不是对汇编结果进行逻辑分析,
真可惜了IDA Pro强大反汇编功能.
各位难道没有困惑吧?
还是高手胸怀有利器,秘而不宣,
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
call dword ptr [0004DBDCh]
如果是这样可以搜苏常量 0004DBDCh
call dword ptr [r32+const]
这样的只能碰运气,上下翻翻代码了
如果不方便调试,可以这样子
data:0004DBDC dd offset sub_3E860,
替换 sub_3E860 输出调用的信息即可
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
的确是个问题,如果将函数指针存在一个大结构体的成员中,确实是个麻烦
|
能力值:
( LV5,RANK:70 )
|
-
-
5 楼
IDA有交叉引用功能呀, 点住dd offset sub_3E860, 按CTRL+X
这个对全局的函数或变量可以使用
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
常识问题嘛,ida只是静态分析工具,函数指针通常都是动态计算的,特别是c++里面
用ida调试一下还可以吧,不过没有用过ida的调试器。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
函数指针动态计算,
mov r32,[r32+const]
mov r32,[r32+inx*ss]
mov r32,base[inx*ss]
主要识别以上三种,看来可以写个插件,谁有吧?
|
|
|