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

转载 2016年08月30日 19:59:35

前言

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 model
option casemap :none  ;case sensitive

include MYLIB.Inc

.data
dword_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+7o
aC              db '/c',0               ; DATA XREF: system+38o
aCmd_exe        db 'cmd.exe',0          ; DATA XREF: system+7Bo
aCommand_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 file
getenv proto
access proto
spawnve proto
spawnvpe proto

; =============== S U B R O U T I N E =======================================

; Attributes: bp-based frame

my_system          proc C               ; CODE XREF: _main+5p

Environment     = dword ptr -10h
var_C           = dword ptr -0Ch
var_8           = dword ptr -8
var_4           = dword ptr -4
arg_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_4010A3

loc_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, 10h

loc_4010A3:                             ; CODE XREF: system+24j system+34j ...
                pop     esi
                leave
                retn
my_system          endp


end

相关文章推荐

18.IDA-创建自己的sig

工具flirt68.zip pcf.exe/pcf: 生成一个模式文件.pat sigmake.exe: 生成一个签名文件.sig 流程创建PAT生成pat文件,pat.txt文件说明各个...
  • hgy413
  • hgy413
  • 2016年01月30日 21:16
  • 2632

IDA FLAIR工具说明

官方下载(需要用户名密码):http://www.hex-rays.com/products/ida/support/ida/flair61.zip   FLAIR——库文件快速识别与鉴定技术(F...
  • gyh198
  • gyh198
  • 2011年11月30日 20:09
  • 6426

IDA中的SIG应用

SIG在IDA中相当于符号文件的作用,如果是自己写的PE程序,编译后会有OBJ文件,可以通过工具把它转化为一个SIG 便于在IDA观看。要应用SIG需要把SIG文件拷贝到IDA目录下的sig文件夹中,...
  • whatday
  • whatday
  • 2012年01月24日 14:35
  • 5413

制作sig文件

本文为在学习过程中的笔记,写的不好请见谅. 在使用IDA的过程中,由于缺少符号文件,有些库函数不能识别. 例 #include "stdafx.h" int main(int argc, c...

IDA使用之旅(一)用IDA查看最简单的sys文件

转载请标明是引用于 http://blog.csdn.net/chenyujing1234  欢迎大家拍砖!   本系列内容是我根据“知其所以然论坛”博主录制的学习视频,做的笔记。 使用的ID...

如何制作vc静态链接库的IDA SIG文件?

标 题:如何制作vc静态链接库的IDA SIG文件? 作 者:tnttools 时 间:2008-04-17 17:52 链 接:http://bbs.pediy.com/showthread.ph...

ELF64文件逆向分析知识—[2]制作静态库SIG

背景在搭建IDA调试远程Linux的环境过程中,我在Linux上使用file工具查看ELF文件得到了一下信息: 这个可执行文件是使用的是静态编译,同时在最终生成可执行文件时,删除了符号表和重定位信息...
  • txx_683
  • txx_683
  • 2016年12月04日 15:18
  • 631

使用FLIRT签名识别库

 //转自http://blog.163.com/shanshenye2k@yeah/blog/static/8234054120121015102041843/ 第1章    使用FLIR...

android system platform签名文件

  • 2012年04月24日 14:04
  • 2KB
  • 下载

Android签名文件制作指导

Android签名文件制作指导
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给IDA6.1制作system函数的签名文件
举报原因:
原因补充:

(最多只允许输入30个字)