bilbo
April 22nd, 2005, 05:57
Hi mates,
in frequent cases, when I try to disassemble with IDA, the FLIRT engine fails to identify some functions...
For example, using MSVC:
If we compile this file as "cl pgm.c" there are no problems: _fread and _fwrite are correctly identified.
But if we compile as "cl -MT pgm.c" both functions are not recognized. The reason is simple: the library used is now LIBCMT.LIB, and no more LIBC.LIB.
Furthermore, in many cases, "unknown_libname"'s are proposed to the reverser (due to signature collisions, that's true, but the position in the executable and the names of the nearest functions could help in the identification!).
Some questions arise at this point:
(1) is there some public signature repository, in order to avoid to rebuild every time the .SIG files (and to avoid to own the corresponding .LIB)? I'm afraid I already know the answer... so next question is: could someone host some public signature repository etc. etc?
(2) How IDA can automatically plan to load some signatures better than others? In the case above I want to avoid the automatic loading of VC32RTF.SIG, and use a better one, for example. And, is possible to remove already applied signatures?
(3) Is there some alternate "FLIRT" engine on the scene?
Azure, by Polaris, seems a good candidate, but I haven't see nothing at the moment. What is the input signature files format? Is it Open Source?
Best regards, bilbo
in frequent cases, when I try to disassemble with IDA, the FLIRT engine fails to identify some functions...
For example, using MSVC:
Code:
/*
* file pgm.c
* WARNING: this program is not intended to be runned :-)
*/
#include <stdio.h>
void
main(void)
{
fwrite(0, 0, 0, 0);
fread(0, 0, 0, 0);
}
If we compile this file as "cl pgm.c" there are no problems: _fread and _fwrite are correctly identified.
But if we compile as "cl -MT pgm.c" both functions are not recognized. The reason is simple: the library used is now LIBCMT.LIB, and no more LIBC.LIB.
Furthermore, in many cases, "unknown_libname"'s are proposed to the reverser (due to signature collisions, that's true, but the position in the executable and the names of the nearest functions could help in the identification!).
Some questions arise at this point:
(1) is there some public signature repository, in order to avoid to rebuild every time the .SIG files (and to avoid to own the corresponding .LIB)? I'm afraid I already know the answer... so next question is: could someone host some public signature repository etc. etc?
(2) How IDA can automatically plan to load some signatures better than others? In the case above I want to avoid the automatic loading of VC32RTF.SIG, and use a better one, for example. And, is possible to remove already applied signatures?
(3) Is there some alternate "FLIRT" engine on the scene?
Azure, by Polaris, seems a good candidate, but I haven't see nothing at the moment. What is the input signature files format? Is it Open Source?
Best regards, bilbo