Q:某Angr脚本中有如下代码片段
logging.getLogger( ‘angr’ ).setLevel( logging.ERROR )
logging.getLogger( ‘angr.project’ ).setLevel( logging.ERROR )
logging.getLogger( ‘angr.sim_manager’ ).setLevel( logging.ERROR )
logging.getLogger( ‘angr.engines.successors’ ).setLevel( logging.ERROR )
这些主要用于抑制Angr模拟执行期间某些INFO级别的日志输出。在具体实践中,即使
已启用上述代码,仍有其他日志输出,比如
[INFO] Mapping cle##tls at 0x900000 (loader:_map_object)
[INFO] Created extern symbol for dlsym (__init__:make_extern)
[INFO] no PT_LOAD segments identified (elf:__init__)
想抑制它们,如何下手?
A:可在Python的site-packages目录下查看相关目录,比如
angr
archinfo
bitarray
bitstring
cachetools
capstone
cart
cffi
claripy
cle
Crypto
cxxheaderparser
elftools
keystone
msgspec
networkx
ordlookup
psutil
pycparser
pydemumble
pypcode
pyvex
rich
setuptools
sortedcontainers
unicorn
z3
当时用”pip3 install angr”安装的,不知装了这么多依赖模块。这次先看angr子目
录的修改时间,再获取修改时间与之精确匹配的所有子目录名,得到上述列表。
powershell -Command “$t=[datetime]’2026-01-19 13:49′; Get-ChildItem -Directory | Where-Object { $_.LastWriteTime -ge $t -and $_.LastWriteTime -lt $t.AddMinutes(1) } | ForEach-Object { $_.Name }”
这些目录下的py中可能含有这种代码片段
l = logging.getLogger(name=__name__)
log = logging.getLogger(name=__name__)
用下列方式输出日志
l.info(“Using builtin SimProcedure for %s from %s”, …)
log.info(“Created extern symbol for %s”, name)
这是INFO级别的日志,其他级别的有相应函数,比如
log.debug
log.warning
log.error
接下来处理具体案例
案例1
[INFO] Mapping cle##tls at 0x900000 (loader:_map_object)
这种,大概率有格式串,合理猜测有行代码会出现
.info(“Mapping
然后”Find in files”,找到
cle\loader.py
def _map_object
log.info(“Mapping %s at %#x”, obj.binary, base_addr)
没看明白实际日志中”(loader:_map_object)”是怎么加进去的,可能是log.info取调
用栈回溯信息,加上去的。这提示我们,下次看到这种日志,搜lorder.py,搜
_map_object函数。
现在可知抑制上述日志的代码
logging.getLogger( ‘cle.loader’ ).setLevel( logging.ERROR )
案例2
[INFO] Created extern symbol for dlsym (__init__:make_extern)
从案例1的经验中可知,去找某个__init__.py中的make_extern函数
cle\backends\externs\__init__.py
def make_extern
log.info(“Created extern symbol for %s”, name)
抑制方案
logging.getLogger( ‘cle.backends.externs’ ).setLevel( logging.ERROR )
案例3
[INFO] no PT_LOAD segments identified (elf:__init__)
去找elf.py中的__init__函数
cle\backends\elf\elf.py
class ELF
def __init__
log.info(“no PT_LOAD segments identified”)
抑制方案
logging.getLogger( ‘cle.backends.elf.elf’ ).setLevel( logging.ERROR )
楞搜特征字符串时,要注意格式串的可能形式,避免漏报。
