利用Flair手工生产sig文件(for IDA)

Eddy 发布于2010-1-23 16:33:37 分类: 加密解密 已浏览loading 网友评论0条 我要评论

放狗搜索来的……

下面我们以insure++为例来说明一下用法:

首先,我们要辨别insure++是用什么函数库来生成key的,这个不难找到,在关键函数的周围,充斥着”cryptpp”之类的字符串,上网搜一下,发现其用的是crypto++函数库,基本上,现在软件都用的是现成的函数库,如果不是,恭喜你,这意味着这个软件的加密实现可能有问题。

下载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里删掉,在生成一遍,呵呵,直到没错误发生。

已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/decryption/360.html     欢迎订阅Eddy Blog

关于 Flair  sig  IDA  的相关文章

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言