给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
- 给IDA6.1制作system函数的签名文件
- 制作火狐插件的签名文件
- 利用Android源代码生成的签名文件给apk签名
- 制作签名cab文件
- 给APK文件签名
- 给APK 文件签名
- experiment : 为IDA6.1产生mfc90u.dll的符号
- Android签名文件制作指导
- 根据android源码提供的系统签名文件制作keystore
- 给文件添加BOM签名
- 如何给apk文件签名
- android 给apk文件签名
- 给apk加签名文件
- Android-给apk文件签名
- j2me制作自签名证书和给jar签名
- 使用platform密钥来给apk文件签名的命令
- 给.dll文件加一个数字签名的方法
- IDA6.1下载符号表时卡死
- 二分查找各种情况大总结
- 123
- 使用标准io实现文件复制功能
- 弗洛伊德算法模板
- 媒体查询——响应式布局
- 给IDA6.1制作system函数的签名文件
- 【年中总结】——愿有人陪你颠沛流离
- 爬梯积累:IT公司管理者、TeamLeader了解一下
- Redis常见集群方案、Codis实践及与Twemproxy比较
- 文件管理-外存分配方式
- 微信公众平台开发——2、代码模式学习总结,接入自己的服务
- POJ-3734 Blocks
- (第6讲)servlet 分页技术
- day21操作字节数组流,编码解码