IDA Pro是非常流行的静态反编译软件。 IDA Pro使用了不同的文件加载器来反汇编不同格式的文件,其中QNX文件加载器中的漏洞可能触发死循环,导致耗尽100%的CPU资源,无法继续进行反汇编。 以下for循环用于对输入文件中的每个lmf_data结构都进行一次迭代,根据sizeof(lmf_data) + lmf_data.offset)向前移动文件指针。但如果lmf_data.offset == -sizeof(lmf_data),由于没有增加,因此代码会陷入死循环: From \ldr\qnx\qnx.cpp(50): for(uint32 at = sizeof(ex.lmf_header)+ex.lmf_header.data_nbytes; lmf_data.segment_index != _LMF_EOF_REC; at += sizeof(lmf_data) + lmf_data.offset) { qlseek( li, at, 0 ); if ( sizeof(_lmf_data) != qlread( li, &lmf_data, sizeof(_lmf_data) ) ) return 0; switch(lmf_data.segment_index) { ... case _LMF_COMMENT_REC: break; ... } } Hex-Rays IDA Pro 3.76 - 5.6 厂商补丁: Hex-Rays -------- 目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载: https://www.hex-rays.com/updida.shtml
IDA Pro是非常流行的静态反编译软件。 IDA Pro使用了不同的文件加载器来反汇编不同格式的文件,其中QNX文件加载器中的漏洞可能触发死循环,导致耗尽100%的CPU资源,无法继续进行反汇编。 以下for循环用于对输入文件中的每个lmf_data结构都进行一次迭代,根据sizeof(lmf_data) + lmf_data.offset)向前移动文件指针。但如果lmf_data.offset == -sizeof(lmf_data),由于没有增加,因此代码会陷入死循环: From \ldr\qnx\qnx.cpp(50): for(uint32 at = sizeof(ex.lmf_header)+ex.lmf_header.data_nbytes; lmf_data.segment_index != _LMF_EOF_REC; at += sizeof(lmf_data) + lmf_data.offset) { qlseek( li, at, 0 ); if ( sizeof(_lmf_data) != qlread( li, &lmf_data, sizeof(_lmf_data) ) ) return 0; switch(lmf_data.segment_index) { ... case _LMF_COMMENT_REC: break; ... } } Hex-Rays IDA Pro 3.76 - 5.6 厂商补丁: Hex-Rays -------- 目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载: https://www.hex-rays.com/updida.shtml