我正在使用IDA Pro 6,并且正在寻找一种将分析后的文件自动导出到列表(.lst)文件的方法。

IDA的界面允许使用菜单文件File来执行此操作。 >产生文件>创建LST文件...,但是我找不到以批处理方式执行此操作的方法(通过在带有-B的终端中运行IDA)。 Hex-Rays的帮助页面似乎无济于事,因为我找不到符合自己需求的开关。

有什么办法可以自动将IDA列表中的内容删除? ?也许使用IDC / Python脚本?

我需要的一个典型清单是由每条指令的地址位置,字节和汇编组成,如下所示(仅注释或变量声明的行可以为如果没有其他可能性,则省略):

text:004016B0             ; =============== S U B R O U T I N E =======================================
.text:004016B0
.text:004016B0            ; Attributes: noreturn bp-based frame
.text:004016B0
.text:004016B0            ___report_gsfailure proc near       ; CODE XREF: __security_check_cookie(x):$failurej
.text:004016B0
.text:004016B0            var_324         = dword ptr -324h
.text:004016B0            var_8       = dword ptr -8
.text:004016B0            var_4       = dword ptr -4
.text:004016B0
.text:004016B0 8B FF                  mov     edi, edi
.text:004016B2 55                 push    ebp
.text:004016B3 8B EC                  mov     ebp, esp
.text:004016B5 81 EC 24 03 00+            sub     esp, 324h
.text:004016BB A3 40 21 40 00             mov     dword_402140, eax
.text:004016C0 89 0D 3C 21 40+            mov     dword_40213C, ecx
.text:004016C6 89 15 38 21 40+            mov     dword_402138, edx
.text:004016CC 89 1D 34 21 40+            mov     dword_402134, ebx
.text:004016D2 89 35 30 21 40+            mov     dword_402130, esi
.text:004016D8 89 3D 2C 21 40+            mov     dword_40212C, edi


评论

您是否尝试了-B选项? (-B批处理模式。IDA将自动生成.IDB和.ASM文件”)

#1 楼

您需要的IDAPython API是idc.gen_file。文件类型为OFILE_LST

应按以下方式运行ida:

{your ida executable}  -A -S{full name of the file with script below} {your exe}


脚本为

import idc
idc.gen_file(idc.OFILE_LST , your_listing_file_name, 0, idc.BADADDR, 0)
import ida_pro 
ida_pro.qexit()


此脚本可与IDA 7.1一起使用,您可能需要找到ida_pro.qexit的替代品,这会导致IDA在完成脚本后退出(在IDA 6.95和更早的版本中,您可以使用sys.exit代替) 。

#2 楼

测试前目录的内容

:\>ls -l | awk "{print  , }"

190 bldwmsgbox.bat
175 dumplst.idc
108 wmsgbox.cpp


编译和链接src

:\>bldwmsgbox.bat
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.6.4
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
wmsgbox.cpp


idc文件的内容
/>
:\>cat dumplst.idc
#include <idc.idc>
static main(void) {
auto fp;
Batch(1);
Wait();
fp = fopen("idclst.lst","w");
GenerateFile(OFILE_LST,fp,MinEA(),MaxEA(),0x0);
fclose(fp);
Exit(0);
}


lst文件的自动分析和创建

:\>e:\IDA_FREE_5\idag.exe -B -Sdumplst.idc wmsgbox.exe


删除idb并重新打开gui中的二进制文件以产生从文件->产生文件->创建第一个文件的第一个文件


:\>del *.idb

:\>echo "using gui file->producefile to make another lst for comparison"
"using gui file->producefile to make another lst for comparison"

:\>e:\IDA_FREE_5\idag.exe wmsgbox.exe

:\>ls -l *.lst | awk "{print  , }"
16877 guiidclst.lst
18617 idclst.lst

:\>wc -l *.lst
  574 guiidclst.lst
  580 idclst.lst
 1154 total

:\>echo "appears to be whitespace diff 
just 6 ines bigger but too much byte variation 
appears to be whitespace difference "


diff输出,忽略空格和大小写

:\>diff -iw idclst.lst guiidclst.lst
24d23
< .text:00401000 ; IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
33d31
< .text:00401000 ; UUUUUUUUUUUUUUU S U B R O U T I N E UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
66d63
< .idata:00402000       ; IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
71,72c68
< .idata:00402000                       extrn __imp__ExitProcess@4:dword ; DATA XREF: main+19↑r
< .idata:00402000                                               ; ExitProcess(x)↑r
---
> .idata:00402000       extrn __imp__ExitProcess@4:dword
78,79c74
< .idata:00402008                       extrn __imp__MessageBoxA@16:dword ; DATA XREF: main+11↑r
< .idata:00402008                                               ; MessageBoxA(x,x,x,x)↑r
---
> .idata:00402008       extrn __imp__MessageBoxA@16:dword
82d76
< .rdata:00402010       ; IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
90c84
< .rdata:00402010       Caption         db 'test',0             ; DATA XREF: main+5↑o
---
> .rdata:00402010       Caption db 'test',0
93c87
< .rdata:00402018       Text            db 'test',0             ; DATA XREF: main+A↑o
---
> .rdata:00402018       Text db 'test',0

:\>


评论


非常感谢@blabb,您提供了非常详细的答案!尽管这回答了我的问题,但我主观上更喜欢python方法。如果我能够将多个答案标记为有效,那么您肯定是一个答案!

–杰姆斯
18年5月14日晚上10:55