首页
社区
课程
招聘
[求助]多lib制作单一sig文件的问题
发表于: 2007-9-24 14:55 10344

[求助]多lib制作单一sig文件的问题

2007-9-24 14:55
10344
各位高手,我手头有多个lib文件,制作后有那么多sig文件,ida加载的时候实在太麻烦。
是否有方法可以制作成一个sig呢?
谢谢

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
2
问Black-eye
2007-9-25 08:24
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
3
Flair目录下的TXT文件就是帮助文件。。。
2007-9-25 13:08
0
雪    币: 1341
活跃值: (3616)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
1
下载crypto++,编译得到一个静态的库cryptlib.lib,然后用IDA flair的应用程序pcf(或plb)生成cryptlib.pat:
pcf cryptlib.lib cryptlib.pat

打开cryptlib.pat,你会看到像这样的东西:
C3909090909090909090909090909090................................ 11 1234 0010 :0000 ?NotifyAttachmentChange@Filter@CryptoPP@@MAEXXZ

前面这个“C3909090909090909090909090909090................................”是函数NotifyAttachmentChange@Filter@CryptoPP@@MAEXXZ的最前面的32个字节,其中”…..”代表任意,因为这些可以与编译器有关。11代表后面那个1234是函数的33字节到43字节(11字节)的crc16的结果,那个0010:0000代表函数的44字节加上0x10的偏移(这个奇怪,有的用10进制,有的用16进制),那个地方(60)的值是0000,这个表达式这个复杂,就是为了给世界上的每一个函数都确定一个唯一的值,这样IDA就可以快速的分辨出已知的函数了。同时,你也可以全凭手工而不用pcf.exe来生成pat文件,这个在你知道一些关键函数在一些相关的应用程序中使用时,来同时在这些应用程序中标记这些函数比较有用。

生成pat文件了,下一步就是应用sigmake来生成sig了:
  sigmake  cryptlib.pat cryptlib.sig
可能这时候,会出现“cryptlib.pat (1066): bad pattern”这样的提示信息,我的解决方法是在cryptlib.pat文件中找到那一行1066,删掉它,呵呵。
在这个过程中,重要的问题就是解决冲突问题,就是自动生成的pat文件里,有很多函数的特征值一样了,需要手工来解决区分,如果你嫌太麻烦得话,可以简单的把生成的cryptlib.exc文件的前3行去掉就可。
运行: sigmake -xcryptlib.exc cryptlib.pat cryptlib.sig

OK,把生成的cryptlib.sig扔到IDA的sig目录下,再点IDA菜单上的那朵花来载入我们的sig,如果都没有出错的话,OK,你会看到奇迹发生了,呵呵。如果出错的话,IDA会提示你是那一行,在sig里找到它的函数名,在pat里删掉,在生成一遍,呵呵,直到没错误发生。

2
制作lmgr.lib的sig
D:\IDA5.0\Flair\bin>pcf lmgr.lib lmgr.pat
lmgr.lib: skipped 1, total 153

D:\IDA5.0\Flair\bin>sigmake lmgr.pat lmgr92.sig
See the documentation to learn how to resolve collisitions.
: modules/leaves: 14688789/152, COLLISIONS: 142
程序生成lmgr92.exc,打开lmgr92.exc,删除前四行以;开始的信息,再运行
D:\IDA5.0\Flair\bin>sigmake -xlmgr92.exc lmgr.pat lmgr92.sig
即可生成lmgr92.sig,再将该文家放入IDA的sig目录下

3
根据上面的例子,或许你可以采用
D:\IDA5.0\Flair\bin>pcf xx1.lib xx1.pat
D:\IDA5.0\Flair\bin>pcf xx2.lib xx2.pat
D:\IDA5.0\Flair\bin>pcf xx3.lib xx3.pat
D:\IDA5.0\Flair\bin>pcf xx4.lib xx4.pat
此时xx1.pat、xx2.pat、xx3.pat、xx4.pat都是文本文件了。
然后合并xx1.pat到xx4.pat成xx.pat
再运行
D:\IDA5.0\Flair\bin>sigmake xx.pat xx.sig
呵呵,上面的这个方法俺没有试过,留给兄弟自己试验咯:)
2007-9-25 15:22
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢,搞定了。。。。。。。。。。。。。。。。。。。。。
其实很简单,就是把pat合并起来再sigmake就可以了,没仔细看文档,不好意思
2007-9-25 15:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习四楼。。。。
2007-9-25 18:23
0
雪    币: 24
能力值: ( LV3,RANK:22 )
在线值:
发帖
回帖
粉丝
7
我来挖个坟,网上实在找不到资料了.  按着楼上的思路,做了个工具,但sigmake的时候,会提示 error:(line 352 )FATAL:Bad xdigit,
我的解决办法是删除掉PAT中第352行,再重新sigmake.试了几下,比较管用,于是准备大规模的制作sig,一下子添加了上千个lib文件,到sigmake的时候一直提示上述错误,于是工具不停的读取错误行,删除,保存,再sigmake,如此反复,已经过去好几个小时了,PAT文件都被删了好几M,但依然没有停止的迹象..不知大家都是怎么用IDA这个签名工具的?
2020-3-13 20:56
0
游客
登录 | 注册 方可回帖
返回
//