我有一个固件,我从 NXP LPC17XX 系列芯片上取下来。通过查看处理器手册,我能够确定代码的入口点并在 IDA Pro 中没有任何问题地反汇编代码。经过短暂的逆向之后,我发现了许多可能是 printf、sprintf 及其相关辅助函数的函数。
我假设我正在查看的固件中包含许多其他 POSIX 函数以及一些用于开发该芯片的核心库函数。
识别这些功能的最佳方法是什么?我假设有一些方法可以为此开发 FLIRT 签名,但我不确定为该固件开发适当签名的最佳方法是什么。任何帮助或指导将不胜感激!
我有一个固件,我从 NXP LPC17XX 系列芯片上取下来。通过查看处理器手册,我能够确定代码的入口点并在 IDA Pro 中没有任何问题地反汇编代码。经过短暂的逆向之后,我发现了许多可能是 printf、sprintf 及其相关辅助函数的函数。
我假设我正在查看的固件中包含许多其他 POSIX 函数以及一些用于开发该芯片的核心库函数。
识别这些功能的最佳方法是什么?我假设有一些方法可以为此开发 FLIRT 签名,但我不确定为该固件开发适当签名的最佳方法是什么。任何帮助或指导将不胜感激!
将 FLIRT 用于 C 代码需要您知道 CRT 的确切版本和编译的确切标志,以便您可以自己构建它,然后拥有所有二进制文件和调试符号,从 .a 或 .obj 或 .库 但是有许多不同版本的编译器构建的 CRT 变体。并且无法确定构建标志,因此在这种情况下您不太可能使用 FLIRT。所以你能做的最好的事情就是静态分析。在固件中,通常有足够的断言消息和错误日志,可以帮助您确定一些基本内容,例如 alloc、free、fopen、fwrite、fread、fclose。sprintf 也很容易找到。还可以使用 CRT 功能组合在一起这一事实,即如果您找到一个,则在其上方和下方的功能(我