首页
社区
课程
招聘
[旧帖] [求助]IDAPython问题请教 0.00雪花
发表于: 2012-3-4 23:42 2317

[旧帖] [求助]IDAPython问题请教 0.00雪花

2012-3-4 23:42
2317
菜鸟初学IDA,看到论坛一贴http://bbs.pediy.com/showthread.php?t=147172,于是试着分析看看。
在Python脚本的时候遇到这么个问题:

Traceback (most recent call last):
  File "D:\Program Files\ida61\python\idaapi.py", line 396, in IDAPython_ExecScript
    execfile(script, g)
  File "E:/CrackMe/crkme3/lv3.py", line 239, in <module>
    clear_junk(ScreenEA())
  File "E:/CrackMe/crkme3/lv3.py", line 227, in clear_junk
    curr_ea = skip_junk(prev_ea)
  File "E:/CrackMe/crkme3/lv3.py", line 212, in skip_junk
    curr_ea = skip_nop(curr_ea) #?????????nop
  File "E:/CrackMe/crkme3/lv3.py", line 35, in skip_nop
    if ins.itype <> NN_nop:
AttributeError: 'NoneType' object has no attribute 'itype'

相应代码段如下:

def get_push_reg(ea):
    '''
    测试ea处的指令是否为push reg
    是则返回reg,否则返回BADADDR
    '''
    ins = DecodeInstruction(ea)
    if ins.itype == NN_push and ins.Op1.type == o_reg:
        return ins.Op1.reg
    return BADADDR

既是载入cpfive的Python脚本,可是控制台出现这个错误。求助。不理解,DecodeInstruction不是IDC的函数么,返回的也不是空类型,怎么会出错?还是说IDAPython插件安装出错了?
请各位高手指教。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这问题已经困扰我快2天了,真心求各位高手指教。
2012-3-5 01:22
0
雪    币: 6
活跃值: (1099)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
ida5.6以上才支持这个idc函数,升级到新版本吧
2012-3-5 14:15
0
雪    币: 705
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
这个没问题的,那个异常很正常,因为我那个循环里没有结束条件,所以遇到异常脚本才会停下来,
也就是DecodeInstruction失败返回0,0就是python中的None, 所以就异常了
2012-3-5 14:45
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢你呀,cpfive,总算明白了。。。。太感动了。

不过还有问题,本人菜鸟一枚,问题多多,希望大家能不吝赐教。

.text:0040106F loc_40106F:                             ; DATA XREF: .text:00401043o
.text:0040106F                 nop     dword ptr [eax]
.text:00401072                 call    near ptr dword_401840+7EAh
.text:00401077                 jz      short loc_4010B7
.text:00401079                 nop     dword ptr [eax]
.text:0040107C                 push    esi
.text:0040107D                 nop     dword ptr [eax+eax+4B228D4Ah]
.text:00401085                 xchg    edi, [esp]
.text:00401088                 pop     edi
.text:00401089                 nop     dword ptr [eax+7F75B410h]
.text:00401090                 jnz     short loc_4010B7
.text:00401092                 fmul    st, st(1)
.text:00401094                 test    eax, 7BF7F8D8h

这里的00401072处的call指令,后面加上0x7EA怎么理解?是调用00401849后第0x7EA处的指令么?可是这样计算下去,结果是0x401840 + 0x7EA = 0x40202A。然后我Jump到0x40202A这个地址,结果是跳到:
.text:00401840 dword_401840    dd 0E8BF446Ah, 63Fh, 243C8756h, 424E685Fh, 87550040h, 1F0F240Ch

好奇,怎么会跳到dword_401840这里?那加上0x7EA有什么用?还是说IDA已经把那处解析了,call的地址就是dword_401840,不过+0x7EA又怎么说得过去???

求指教。
2012-3-5 17:35
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不是版本的问题,我用的是6.1。不过也学到了个新知识。谢谢你。

楼下的cpfive已经给出答案了。
2012-3-5 17:37
0
雪    币: 705
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
call    near ptr dword_401840+7EAh 是因为ida把401840当作一个数据看待了,而call地址是0x40202A刚好在0x401840的偏移 0x7ea处。
解决办法是在0x401840处按'u'删除分析,然后到0x40202a处按'c'转换成代码,或按'd'转换成数据。至于该转换成代码或数据 取决于0x40202a的数据该如何解释。
2012-3-5 18:30
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
吃个饭,洗个澡就有解答了,看雪威武,cpfive威武

谢谢呀,我还得继续研究这个crackme,以后有问题还需要多多指教。cpfive。
2012-3-5 19:38
0
游客
登录 | 注册 方可回帖
返回
//