如何制作vc静态链接库的IDA SIG文件?
2013-11-25 16:29
483 查看
标 题:如何制作vc静态链接库的IDA SIG文件?
作 者:tnttools
时 间:2008-04-17 17:52
链 接:http://bbs.pediy.com/showthread.php?t=63292
很多天前,有人提出这个问题。当时没有想到用lib.exe,以为自己要重新发明一个轮子ar2.exe,才可能解析出MS LIB文件中的OBJ文件。今天又看见有人发贴,再次dig一下,不过如此...
下面是在命令行上制作的过程,环境是WinXP+NTFS+VS2003,在我的机子上运行无误。破折号之间的引用都是命令行。
附件是制作好的SIG文件,可以准确地解析出printf()函数,当然还有其它很多很多库函数。
Step 1:
将libc.lib, libcd.lib, libcmt.lib, libcmtd.lib从原文件夹下复制过来。
For:
避免在命令行上输入过长的路径
Step 2:
-----------------
set path = %path%;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin
set path = %path%;C:\Program Files\IDA\addons\Flair.v5.20\bin
-----------------
设置要调用的程序的路径,在你的机子上不一定如此
Step 3:
-----------------------------
for %i in (*.lib) do md %i.fdr
-----------------------------
For: 新建存放对象文件的文件夹
Step 4:
-----------------------------
cd v:\libc.lib.fdr
for /F "skip=3" %i in ('link.exe -lib /list ..\libc.lib') do link.exe -lib /extract:%i ..\libc.lib
cd v:\libcd.lib.fdr
for /F "skip=3" %i in ('link.exe -lib /list ..\libcd.lib') do link.exe -lib /extract:%i ..\libcd.lib
cd v:\libcmt.lib.fdr
for /F "skip=3" %i in ('link.exe -lib /list ..\libcmt.lib') do link.exe -lib /extract:%i ..\libcmt.lib
cd v:\libcmtd.lib.fdr
for /F "skip=3" %i in ('link.exe -lib /list ..\libcmtd.lib') do link.exe -lib /extract:%i ..\libcmtd.lib
-----------------------------
For: 依次提取libc.lib, libcd.lib, libcmt.lib, libcmtd.lib中的所有对象文件。
Step 5:
--------------------------
for %i in (.\libc.lib.fdr\*.obj) do pcf.exe -g0 %i
for %i in (.\libcd.lib.fdr\*.obj) do pcf.exe -g0 %i
for %i in (.\libcmt.lib.fdr\*.obj) do pcf.exe -g0 %i
for %i in (.\libcmtd.lib.fdr\*.obj) do pcf.exe -g0 %i
-------------------------
pcf.exe -g0 .\libc.lib.fdr\*.obj
pcf.exe -g0 .\libcd.lib.fdr\*.obj
pcf.exe -g0 .\libcmt.lib.fdr\*.obj
pcf.exe -g0 .\libcmtd.lib.fdr\*.obj
-------------------------
For: 由.obj文件生成.pat文件。为了避免pcf.exe在执行的过程中处理非COFF文件时中断、出现提示信息“is not ar/coff file\npress enter to exit”,加上参数"-g0"。
Step 6:
-------------------------
sigmake -n"VC7 Static Lib (ST/MT & Rel/Dbg) By TnTTools" libc.lib.fdr\*.pat+libcd.lib.fdr\*.pat+libcmt.lib.fdr\*.pat+libcmtd.lib.fdr\*.pat vc7libc
See the documentation to learn how to resolve collisitions.
: modules/leaves: 9021136/3610, COLLISIONS: 2690
-------------------------
sigmake -n"VC7 Static Lib (ST/MT & Rel/Dbg) By TnTTools" libc.lib.fdr\*.pat+libcd.lib.fdr\*.pat+libcmt.lib.fdr\*.pat+libcmtd.lib.fdr\*.pat vc7libc
--------------------------
For: 转化成SIG文件vc7libc.sig,在这里我把四个静态库文件放在一起,当然你可以分开放。通过第一次运行sigmake,知道有冲突存在。手工编辑.EXE文件后再次运行sigmake,生成vc7libc.sig。见附件。
[举例]
使用前
.text:00402A03 push offset aUsage ; " Usage: \n"
.text:00402A08 call sub_403772
.text:00402A0D add esp, 4
.text:00402A10 push offset aHashH ; " hash -h\n"
.text:00402A15 call sub_403772
.text:00402A1A add esp, 4
使用后
.text:00402A03 push offset aUsage ; " Usage: \n"
.text:00402A08 call _printf
.text:00402A0D add esp, 4
.text:00402A10 push offset aHashH ; " hash -h\n"
.text:00402A15 call _printf
.text:00402A1A add esp, 4
TnTTools
The Art Of Reverse Engineering
Enjoy it.
注意,我在这里讨论的仅是一种很特别的情况:VC静态库文件libc.lib, libcmt.lib。原因起源于论坛上网友的一个疑问。如果直接调用pcf.exe处理这两个文件会遇到问题。
没有必要编写什么程序来包裹它,一是它根本不是万能的SIG制作流程,在实际中,各种情况都有可能遇到;二是我们需要了解CONSOLE下STDOUT的各种输出信息(大部分人不感兴趣);三是自动处理EXC后的手工编辑必不可少(至少在我看来如此)。
上传的附件
vc7libc.rar
作 者:tnttools
时 间:2008-04-17 17:52
链 接:http://bbs.pediy.com/showthread.php?t=63292
很多天前,有人提出这个问题。当时没有想到用lib.exe,以为自己要重新发明一个轮子ar2.exe,才可能解析出MS LIB文件中的OBJ文件。今天又看见有人发贴,再次dig一下,不过如此...
下面是在命令行上制作的过程,环境是WinXP+NTFS+VS2003,在我的机子上运行无误。破折号之间的引用都是命令行。
附件是制作好的SIG文件,可以准确地解析出printf()函数,当然还有其它很多很多库函数。
Step 1:
将libc.lib, libcd.lib, libcmt.lib, libcmtd.lib从原文件夹下复制过来。
For:
避免在命令行上输入过长的路径
Step 2:
-----------------
set path = %path%;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin
set path = %path%;C:\Program Files\IDA\addons\Flair.v5.20\bin
-----------------
设置要调用的程序的路径,在你的机子上不一定如此
Step 3:
-----------------------------
for %i in (*.lib) do md %i.fdr
-----------------------------
For: 新建存放对象文件的文件夹
Step 4:
-----------------------------
cd v:\libc.lib.fdr
for /F "skip=3" %i in ('link.exe -lib /list ..\libc.lib') do link.exe -lib /extract:%i ..\libc.lib
cd v:\libcd.lib.fdr
for /F "skip=3" %i in ('link.exe -lib /list ..\libcd.lib') do link.exe -lib /extract:%i ..\libcd.lib
cd v:\libcmt.lib.fdr
for /F "skip=3" %i in ('link.exe -lib /list ..\libcmt.lib') do link.exe -lib /extract:%i ..\libcmt.lib
cd v:\libcmtd.lib.fdr
for /F "skip=3" %i in ('link.exe -lib /list ..\libcmtd.lib') do link.exe -lib /extract:%i ..\libcmtd.lib
-----------------------------
For: 依次提取libc.lib, libcd.lib, libcmt.lib, libcmtd.lib中的所有对象文件。
Step 5:
--------------------------
for %i in (.\libc.lib.fdr\*.obj) do pcf.exe -g0 %i
for %i in (.\libcd.lib.fdr\*.obj) do pcf.exe -g0 %i
for %i in (.\libcmt.lib.fdr\*.obj) do pcf.exe -g0 %i
for %i in (.\libcmtd.lib.fdr\*.obj) do pcf.exe -g0 %i
-------------------------
pcf.exe -g0 .\libc.lib.fdr\*.obj
pcf.exe -g0 .\libcd.lib.fdr\*.obj
pcf.exe -g0 .\libcmt.lib.fdr\*.obj
pcf.exe -g0 .\libcmtd.lib.fdr\*.obj
-------------------------
For: 由.obj文件生成.pat文件。为了避免pcf.exe在执行的过程中处理非COFF文件时中断、出现提示信息“is not ar/coff file\npress enter to exit”,加上参数"-g0"。
Step 6:
-------------------------
sigmake -n"VC7 Static Lib (ST/MT & Rel/Dbg) By TnTTools" libc.lib.fdr\*.pat+libcd.lib.fdr\*.pat+libcmt.lib.fdr\*.pat+libcmtd.lib.fdr\*.pat vc7libc
See the documentation to learn how to resolve collisitions.
: modules/leaves: 9021136/3610, COLLISIONS: 2690
-------------------------
sigmake -n"VC7 Static Lib (ST/MT & Rel/Dbg) By TnTTools" libc.lib.fdr\*.pat+libcd.lib.fdr\*.pat+libcmt.lib.fdr\*.pat+libcmtd.lib.fdr\*.pat vc7libc
--------------------------
For: 转化成SIG文件vc7libc.sig,在这里我把四个静态库文件放在一起,当然你可以分开放。通过第一次运行sigmake,知道有冲突存在。手工编辑.EXE文件后再次运行sigmake,生成vc7libc.sig。见附件。
[举例]
使用前
.text:00402A03 push offset aUsage ; " Usage: \n"
.text:00402A08 call sub_403772
.text:00402A0D add esp, 4
.text:00402A10 push offset aHashH ; " hash -h\n"
.text:00402A15 call sub_403772
.text:00402A1A add esp, 4
使用后
.text:00402A03 push offset aUsage ; " Usage: \n"
.text:00402A08 call _printf
.text:00402A0D add esp, 4
.text:00402A10 push offset aHashH ; " hash -h\n"
.text:00402A15 call _printf
.text:00402A1A add esp, 4
TnTTools
The Art Of Reverse Engineering
Enjoy it.
注意,我在这里讨论的仅是一种很特别的情况:VC静态库文件libc.lib, libcmt.lib。原因起源于论坛上网友的一个疑问。如果直接调用pcf.exe处理这两个文件会遇到问题。
没有必要编写什么程序来包裹它,一是它根本不是万能的SIG制作流程,在实际中,各种情况都有可能遇到;二是我们需要了解CONSOLE下STDOUT的各种输出信息(大部分人不感兴趣);三是自动处理EXC后的手工编辑必不可少(至少在我看来如此)。
上传的附件
vc7libc.rar
相关文章推荐
- 如何制作vc生成的.exe生成的文件图标
- IDA SIG文件制作 批处理方法
- 用VC++制作Windows下静态链接库文件(lib文件)
- 如何编译VC工程中的asm文件
- 如何制作嵌入式Linux文件系统
- 如何制作LINUX的patch文件及如何打patch
- 如何导入asl文件?ps制作知识
- 如何制作自解压文件
- VC中如何播放WAV文件
- 利用Autoconf和Automake制作Makefile文件时,如何连接进MYSQL的库和头文件?
- 如何用busybox制作一个自己文件系统
- 如何制作批处理文件
- 【转】VC如何调用DLL文件
- VC中为了调试方便如何把输入输出重定向到文件中?
- 如何使用VC++遍历某一个目录下的全部文件呢?
- 如何制作Ext4文件系统镜像
- 如何在KEIL下制作出自己的库文件
- 手把手教你,借助matlab,如何制作Xilinx的coe文件
- 如何制作LINUX的patch文件及如何打patch
- 如何用UltraISO制作ISO文件?