给IDA6.1制作system函数的签名文件

来源:互联网 发布:汽车之家淘宝 编辑:程序博客网 时间:2024/06/06 09:32

前言

system在LIBC.LIB中, 但是将LIBC.LIB制作为sig文件后, 在IDA打开调用system函数的工程中加载LIBC.sig后, 并不能看到system函数被识别.

IDA不认得LIBC.LIB中的system函数原因, 和工程中system函数的签名不一样.
可以比对pat文件, 看特征码是否和本工程中的system函数相同.

需要自己做一个MASM静态库, 将system函数的反汇编实现抠出来, 贴到静态库工程, 将内部函数改名, 并声明为 proto, 编译成静态库之后, 再做签名, IDA才认得.

工程下载点

makeSigForIDA.zip

工程运行环境说明

\Flair IDA6.1签名需要的可执行文件, 放到<IDA>\    里面的pcf打好了补丁, 退出时, 不会和用户交互.\MYLIB 做签名用的MASM静态库工程, 编译环境radAsm2.2.1.5    静态库不用 start: 和 end start, 只要有函数的实现就行.    要确保抠代码贴到静态库后, 调用的内部函数__fnFoo用 fnFoo proto 声明, 并将内部函数由__fnFoo改成fnFoo, 表明不是我实现的, 我只是调用已经存在的函数实现   \makeIdaSign 签名用的脚本工程, 执行make_sig.bat, 可以看到pat文件是否正确, 看机器码中的地址是否是统配符号, 如果是绝对地址就错了.按2个回车, 签名制作完成. 第一个回车, 去看pat文件是否正确.\CallSystem 测试程序, 只调用了system函数将做好的.sig放到<IDA>\sig\下, 启动IDA载入目标程序, 加载签名库MYLIB.LIB, 如果函数应用数量 > 0, 就成功了, system函数会被IDA识别为my_system.

MASM静态库工程实现片段

; MYLIB.Asm.386.model flat, stdcall  ;32 bit memory modeloption casemap :none  ;case sensitiveinclude MYLIB.Inc.datadword_40965C    dd 0                    ; DATA XREF: system+5Br __spawnvpe+27r ...dword_409668    dd 0                    ; DATA XREF: start+52w                                        ; system:loc_40107Br.const; char VarName[]VarName         db 'COMSPEC',0          ; DATA XREF: system+7oaC              db '/c',0               ; DATA XREF: system+38oaCmd_exe        db 'cmd.exe',0          ; DATA XREF: system+7BoaCommand_com    db 'command.com',0      ; DATA XREF: system+72o.code; lib project need not add start: and end start; the internal fun on dasm code, don't chang crt_xx, e.g._getenv; need decalre getenv proto ! we only need the signature filegetenv protoaccess protospawnve protospawnvpe proto; =============== S U B R O U T I N E =======================================; Attributes: bp-based framemy_system          proc C               ; CODE XREF: _main+5pEnvironment     = dword ptr -10hvar_C           = dword ptr -0Chvar_8           = dword ptr -8var_4           = dword ptr -4arg_0           = dword ptr  8                push    ebp                mov     ebp, esp                sub     esp, 10h                push    esi                push    offset VarName  ; "COMSPEC"                ; call    crt_getenv                call    getenv                pop     ecx                xor     esi, esi                mov     ecx, [ebp+arg_0]                mov     [ebp+Environment], eax                cmp     ecx, esi                jnz     short loc_401046                cmp     eax, esi                jnz     short loc_401036                xor     eax, eax                jmp     short loc_4010A3; ---------------------------------------------------------------------------loc_401036:                             ; CODE XREF: system+20j                push    esi             ; char                push    eax             ; lpFileName                ; call    crt__access                call    access                neg     eax                pop     ecx                sbb     eax, eax                pop     ecx                inc     eax                jmp     short loc_4010A3; ---------------------------------------------------------------------------loc_401046:                             ; CODE XREF: system+1Cj                cmp     eax, esi                mov     [ebp+var_C], offset aC ; "/c"                mov     [ebp+var_8], ecx                mov     [ebp+var_4], esi                jz      short loc_40107B                lea     ecx, [ebp+Environment]                push    esi             ; ExitCode                push    ecx             ; lpEnvironment                push    eax             ; lpFileName                push    esi             ; int                ; call    crt__spawnve                call    spawnve                add     esp, 10h                cmp     eax, 0FFFFFFFFh                jnz     short loc_4010A3                mov     ecx, dword_40965C                cmp     ecx, 2                jz      short loc_40107B                cmp     ecx, 0Dh                jnz     short loc_4010A3loc_40107B:                             ; CODE XREF: system+45j system+64j                test    byte ptr dword_409668+1, 80h                mov     [ebp+Environment], offset aCommand_com ; "command.com"                jnz     short loc_401092                mov     [ebp+Environment], offset aCmd_exe ; "cmd.exe"loc_401092:                             ; CODE XREF: system+79j                lea     eax, [ebp+Environment]                push    esi             ; ExitCode                push    eax             ; lpEnvironment                push    [ebp+Environment] ; lpFileName                push    esi             ; int                ; call    crt__spawnvpe                call    spawnvpe                add     esp, 10hloc_4010A3:                             ; CODE XREF: system+24j system+34j ...                pop     esi                leave                retnmy_system          endpend
0 0