IDA PRO是目前应用最广的静态反汇编分析工具,功能十分强大,但其自带的IDC脚本语言却十分丑陋,写起脚本来非常不方便。有两位大牛就写了两个工具来方便大家编写IDC的脚本,一个是Gergely Erdelyi 写的IDApython,另一个是RedPlait 写的IDAperl。总的说来,IDApython写出来的脚本非常漂亮,也非常简单,但IDAperl有一项功能是IDApython不具有的,那就是IDAperl的脚本支持debug功能。下面我们分别简单的介绍一下这两个强大的插件。
ea = 0x4011f6 (一个函数的开始地址,这里idapython好像有点问题,应该用ChooseFunction,但老是说不对) funcend = FindFuncEnd(ea) for ea in range(ea,funcend): x = Rfirst0(ea) while x <> BADADDR : Message( str(hex(x)) + " refers to " + Name(x) + " : " + str(hex(x)) + " "); x = Rnext0(ea,x); Message("End of output. ");
跟标准的IDC脚本比较一下:
#include
static main(){
auto ea,x,f_end;
ea = ChooseFunction("Select a function to parse:");
func = choose_func("test",1) print "begin print refs" for funcea in range(func.startEA,func.endEA): ref = get_first_fcref_from(funcea) while ref != BADADDR: print " called from 0x%x(%s)" % (funcea,get_name(BADADDR,ref))
ref = get_next_fcref_from(funcea, ref)
最后用idautils.py函数来一次:
from idautils import * func = choose_func("test",1) print "begin print refs" for funcea in range(func.startEA,func.endEA): reflist = CodeRefsFrom(funcea,0) for ref in reflist :
print " called from 0x%x(%s)" % (funcea,get_name(BADADDR,ref))
IDAPerl 安装:不是很简单喔,先安装perl for windows,再到一个俄文的网站上去下载IDAperl: 176K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6S2M7$3#2Q4x3X3g2J5N6g2)9J5c8Y4m8#2j5W2)9J5c8U0t1K6i4K6u0r3k6X3W2D9k6i4y4Q4x3V1k6H3k6i4u0D9i4K6g2X3M7%4u0U0i4K6u0W2P5X3W2H3i4K6u0o6i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1@1i4@1u0m8i4K6W2n7i4@1f1@1i4@1t1^5i4K6W2o6i4@1f1^5i4@1p5#2i4@1u0r3i4@1f1&6i4K6W2o6i4K6R3H3i4@1f1^5i4@1p5$3i4K6R3I4i4@1f1$3i4K6W2o6i4K6R3&6i4@1f1%4i4K6W2n7i4@1t1^5i4@1f1#2i4@1u0m8i4K6V1@1i4@1f1%4i4K6W2m8i4K6R3@1d9f1c8m8M7$3c8C8i4@1f1$3i4K6R3&6i4K6S2p5i4@1f1^5i4K6R3K6i4@1u0p5i4@1f1%4i4@1u0o6i4K6V1$3i4@1f1^5i4@1q4r3i4K6V1I4i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1%4i4@1u0o6i4K6V1$3i4@1f1^5i4@1q4r3i4K6V1I4i4@1f1#2i4@1p5#2i4@1u0p5i4@1f1@1i4@1u0m8i4K6R3$3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6V1@1i4@1u0q4i4@1f1#2i4K6R3^5i4@1t1H3i4@1f1@1i4@1u0m8i4K6R3$3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4c8W2j5h3@1#2x3o6W2Q4x3X3g2U0L8$3#2Q4x3V1k6V1L8%4N6F1L8r3!0S2k6q4)9J5c8Y4c8G2L8$3I4K6i4K6u0r3M7$3g2U0N6i4u0A6N6s2W2Q4x3V1k6A6k6r3q4H3k6i4u0D9i4K6u0W2M7X3q4J5i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6S2m8i4K6S2m8M7r3#2Q4x3V1k6Q4c8e0c8Q4b7U0S2Q4z5p5u0Q4c8e0N6Q4z5f1q4Q4z5o6c8Q4c8e0g2Q4z5o6k6Q4z5o6g2Q4c8e0g2Q4b7f1g2Q4b7U0W2Q4c8e0k6Q4z5e0c8Q4b7V1g2Q4c8e0g2Q4z5o6S2Q4b7U0m8H3k6i4u0D9i4@1f1%4i4K6W2m8i4K6R3@1L8r3W2T1i4@1f1&6i4K6R3%4i4K6S2o6i4@1f1#2i4K6S2q4i4@1u0n7i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6S2m8i4K6S2m8M7r3g2J5L8q4)9#2k6X3c8T1k6#2)9J5k6i4m8D9N6#2!0q4y4g2)9&6x3W2)9^5b7%4u0H3i4K6g2X3N6X3y4Q4x3X3g2H3L8s2N6Q4c8e0k6Q4z5p5u0Q4b7U0N6Q4c8e0g2Q4z5o6S2Q4b7U0m8u0c8p5p5@1i4K6u0W2y4#2!0q4y4#2)9&6b7g2)9^5y4s2m8D9N6h3N6A6L8Y4y4Q4c8e0N6Q4z5f1u0Q4b7f1g2Q4c8e0g2Q4b7V1c8Q4z5e0g2Q4c8e0c8Q4b7U0S2Q4z5p5u0Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0S2Q4b7V1k6Q4z5e0W2Q4c8e0k6Q4b7e0m8Q4b7U0N6Q4c8e0g2Q4b7U0m8Q4b7U0q4Q4c8e0g2Q4z5p5k6Q4b7f1k6Q4c8e0c8Q4b7V1u0Q4b7e0g2Q4c8e0c8Q4b7V1q4Q4z5o6k6Q4c8e0y4Q4z5o6m8Q4z5o6u0Q4c8e0S2Q4b7V1k6Q4z5e0W2Q4c8e0k6Q4z5e0N6Q4b7U0k6Q4c8e0g2Q4z5o6m8Q4z5e0W2Q4c8e0k6Q4z5o6W2Q4z5e0y4Q4c8e0g2Q4b7V1y4Q4z5o6m8A6k6r3p5@1i4K6u0W2y4#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4W2)9&6y4#2!0n7y4W2!0q4y4g2)9^5x3q4)9&6z5g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4z5g2)9^5x3q4)9^5z5g2!0q4y4W2)9^5b7W2!0m8z5g2!0q4y4q4!0n7z5q4)9^5x3q4!0q4y4q4!0n7z5q4!0m8b7i4m8W2i4@1f1%4i4K6W2m8i4K6R3@1N6$3W2F1k6r3!0%4M7#2!0q4y4#2!0m8z5q4)9^5b7W2!0q4y4g2!0n7b7g2)9^5c8W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4g2!0n7x3q4!0n7x3g2!0q4y4q4!0n7b7#2)9&6b7g2!0q4y4g2!0n7b7#2!0n7z5g2!0q4y4g2)9^5y4#2!0n7b7g2!0q4y4q4!0n7z5q4)9^5x3q4!0q4y4q4!0n7z5q4!0m8b7g2!0q4x3W2)9^5x3q4)9&6c8s2m8W2M7X3H3`. script for
debugger”的对话框,就可以加载你的perl for debugger的脚本了,同时edit菜单的plugins子菜单会有embedded perl 菜单,这里你可以加载一般的非debugger的分析脚本。