能力值:
( LV2,RANK:10 )
|
-
-
2 楼
很显然,mov esi,ds:GetProcAddress,这表明esi存入了一个常量,ida会记录每个寄存器存入常量的值,然后
再分析call esi的时候,自然回加注释说明是call GetProcAddress;
而如果eax 是一个变量,那么call eax,IDA是分析不出来的,也不会加注释,而且,很显然,call eax也不是一个
调用固定的子程序的语句,随着eax的值不同,call eax可能调用多个不同的子程序,你又如何给call eax加静态注释呢?只能动态跟踪。
|
能力值:
( LV9,RANK:140 )
|
-
-
3 楼
我的意思是,通过截图可以知道,IDA本身在功能上肯定是支持将寄存器和一个API联系起来的.
所以我想,如果我在知道call一条语句时寄存器指向的API,那么我可不可以告诉IDA,让它进行联系,达到和截图中一样的效果?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
你没看明白我的回答吗,2楼就已经给你回答了,对于变量eax,call eax是未知的,不可以告诉你api.因为无法知道是哪个api,仔细阅读并理解我2楼的回答吧。你这次知道call eax是CreateFileA,那下次再执行到这里也许不是CreateFileA,而是GetProcAddress,那你自己加一个固定注释 call eax;CreateFileA,下次如果不是CreateFileA,那不是误导吗,会造成错误。
|
能力值:
( LV9,RANK:140 )
|
-
-
5 楼
好吧,我换个问法:
可否强制让IDA认为在
call eax
之前有一条mov eax:ds:CreateFileA指令的存在?
先不要管程序逻辑,这个和逻辑没有关系.我只是想知道IDA能否实现我想要的这个功能.
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
加注释可以啊。右键Enter Comment
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
你调试的时候碰到的是CreateFileA,并不代表每次都是
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
图中之所以能识别是因为调用目标来自IAT。肯定存在调用目的无法静态分析出来的情况,所以IDA中有unexplored item。
|
能力值:
( LV9,RANK:140 )
|
-
-
9 楼
其实这么问是因为最近在看一个样本,里面有类似的情况.
如果IDA分析不出来call eax对应的是那个call的话,就不可以F5.
除了patch为nop然后人肉纠正F5中的对应地方,还有其他方法没?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
IDA可能分析不出CALL的目标,但识别出CALL EAX本身应该没问题。你可以动态调试来获取实际调用的函数,
到该地址按P定义为函数,F5就是了
|
能力值:
( LV9,RANK:140 )
|
-
-
11 楼
我的问题是,在F5 sub_xxxx得时候ida报错,错误为无法分析call eax这行,而不是无法F5 sub_yyyy
sub_xxxx
....
call eax ; eax = yyyy
end
sub_yyyy
....
end
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
这个看起来和调用目标没什么关系,象F5插件自己出毛病了。这样试试:
在反汇编窗口中点击sub_xxxx,使其成为当前函数,然后选Edit|Other里的
reset decompile information, 选中重置当前函数信息。
最后再F5看看行不行。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
挖个坟。这么多年过去了,不知道楼主解决没有,遗憾的是回复的各位大佬似乎没看懂楼主想要表达的内容。 call eax IDA当然猜不出来,通过动态调试得知此处为CreateFileA,问的是能否在反汇编窗口将其命名为CreateFileA来协助IDA自动分析。 如果楼主知道了希望回复分享下解决方案,感恩 。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
kikyoulin
挖个坟。这么多年过去了,不知道楼主解决没有,遗憾的是回复的各位大佬似乎没看懂楼主想要表达的内容。
call eax IDA当然猜不出来,通过动态调试得知此处为CreateFileA,问的是能否在 ...
我觉得那些大佬都看懂了,他们已经明确的告诉你了,不可以!
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
已经解决了,直接patch对应寄存器的值就行了。例如call eax,直接在前面eax赋值的时候mov eax,XXXXXX 函数地址,注意指令长度可能会破坏其他指令。我用的7.7可以直接右键反汇编(可能是插件),非常方便。 图片仅为举例,修改寄存器的数值后重新F5,看到的是正确的函数调用。
|
|
|