给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

利用ida对程序的静态链接库进行处理

用IDA进行反汇编时最怕遇到的就是跟踪到了程序静态链接的库函数中,看得一头雾水不说,还浪费了大量的时间。其实如果有符号表的话,看看函数名就知道大概功能了,再看看参数就可以pass了。本文以meterp...
  • liujiayu2
  • liujiayu2
  • 2016年05月30日 11:40
  • 1080

逆向 C++-- 识别类及其构造函数

逆向 C++这些年来,逆向工程分析人员一直是凭借着汇编和 C 的知识对大多数软件进行逆向工程的,但是,现在随着越来越多的应用程序和恶意软件转而使用 C++语言进行开发,深入理解 C++ 面向对象方式开...
  • Blue_Dream_
  • Blue_Dream_
  • 2007年09月22日 12:03
  • 6131

18.IDA-创建自己的sig

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

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

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

IDA 签名制作工具

  • 2013年02月17日 11:39
  • 145KB
  • 下载

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

前言system在LIBC.LIB中, 但是将LIBC.LIB制作为sig文件后, 在IDA打开调用system函数的工程中加载LIBC.sig后, 并不能看到system函数被识别.IDA不认得LI...
  • LostSpeed
  • LostSpeed
  • 2016年08月30日 19:59
  • 677

对apk签名的封装

前言网上有apkSign程序,选择要保存的签名文件位置不方便. 封装了一个ui工程下载点srcApkSignEx.zip 编译环境:vc6sp6 + win32sdkUI工程预览// hw.cpp...
  • LostSpeed
  • LostSpeed
  • 2016年11月12日 02:54
  • 436

生成jks签名文件

生成jks签名文件 选择Build > Generate Signed APK… 选择项目app > Next 选择Create new… 选择签名文件的路径,这些信息和eclip...
  • Juladoe
  • Juladoe
  • 2017年03月01日 08:53
  • 477

Android签名文件keystore一键生成

我们都知道,Android的签名秘钥文件.keystore可以通过java的keytool.exe来生成,但是只能逐步添加信息,那么怎么一键生成呢? 方法如下:可以写成bat批处理(注意提前设置好...
  • MasterHome
  • MasterHome
  • 2017年11月23日 23:12
  • 99

IDA操作整理

IDA view中切换 反汇编窗口和 Graph overview 空格键 在反汇编窗口中显示机器码 在反汇编窗中中加注释 和OD一样,...
  • LostSpeed
  • LostSpeed
  • 2013年06月07日 12:14
  • 1467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给IDA6.1制作system函数的签名文件
举报原因:
原因补充:

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