给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

举报

相关文章推荐

使用FLIRT签名识别库

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

【Tech-so】So文件静态分析Step by Step(一) --------入门,利用IDA pro查看代码

之前搞腾了两个月的Cocos-Lua , 主要是把java的代码导出去给于Lua项目组调用,过程那个叫苦呀,其实到最后才发现,那是一个很简单的原理。 因为之前提及过,Lua与Java的互调要...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

11.IDA-this指针

所有非静态C++成员函数都使用this指针。任何时候调用这样一个函数,this都被初始化,指向用于调用该函数的对象.  最好是把this看成是传递到所有非静态成员函数的第一个隐藏参数. this存放...

Google 的开源技术protobuf 简介与例子

今天来介绍一下“Protocol Buffers ”(以下简称protobuf)这个玩意儿。本来俺在构思“生产者/消费者模式 ”系列的下一个帖子:关于生产者和消费者之间的数据传输格式。由于里面扯到了...

20.IDA-修改二进制文件、显示修改点

1.功能选项 Edit▶Patch Program菜单是GUI版本的IDA的一项隐藏功能,用户需要编辑idagui.cfg配置文件才能激活该菜单  可用选项如图所示  1.1...

mov eax,dword ptr fs:[0] 指令

FS寄存器指向当前活动线程的TEB结构(线程结构) 偏移 说明 000 指向SEH链指针 004 线程堆栈顶部 008 线程堆栈底部 00C SubSystemTib 01...

19.IDA-栈指针调节、设置函数特性

IDA会尽其所能跟踪函数内每一条指令上的栈指针的变化。IDA跟踪这种变化的准确程度,在很大程度上影响着函数的栈帧布局的准确程度。如果IDA无法确定一条指令是否更改了栈指针,你就需要手动调整栈指针  ...

给APK 文件签名

来自以下两博客及网络: [aparche - http://www.cnblogs.com/tianguook/archive/2012/09/27/2705724.html] [charge...

android 给apk文件签名

具体分为以下几个步骤:
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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