还原混淆堆栈日志
混淆后代码中输出的日志中的函数堆栈是混淆后的名称,这给跟踪问题带来很大障碍。对照symbol mapping文件(文档见符号混淆)
记录的原始函数与混淆后函数的映射关系,人工还出原始堆栈的工作非常烦琐。Obfuz提供了DeobfuscateStackTrace
工具用来自动化还原混淆堆栈。
DeobfuscateStackTrace工具
DeobfuscateStackTrace是一个基于.net 8
开发的命令行工具,可以运行在Win、MacOS、Linux等所有.net支持的平台。
源码在仓库根目录下的DeobfuscateStackTrace-github或DeobfuscateStackTrace-gitee。 可以自己编译,也可以直接从github release中下载。
命令行参数
命令行参数描述如下:
-m, --mappingFile Required. mapping xml file
-i, --input Required. input obfuscated log file
-o, --output Required. output deobfuscated log file
-r, --removeMethodGeneratedByObfuz Remove methods generated by obfuscator (e.g.
'$Obfuz$ProxyCall:$Obfuz$ProxyCall$Dispatch')
--help Display this help screen.
--version Display version information.
使用方式
DeobfuscateStackTrace --help
查看帮助。DeobfuscateStackTrace -m {symbol mapping file} -i {obfuscated log} -o {deobfuscate log}
命令将混淆后的堆栈日志还原为原始日志。-m
的参数是ObfuzSettings.SymbolObfusSettings.SymbolMappingFile
指向的的symbol mapping文件,-i
的参数是混淆后的日志文件,-o
是输出的还原堆栈后的日志文件。
示例:
- Windows 下
DeobfuscateStackTrace -m path/of/symbol-mapping.xml -i obfuscated.log -o deobfuscated.log
- MacOS或Linux下
dotnet DeobfuscateStackTrace.dll -m path/of/symbol-mapping.xml -i obfuscated.log -o deobfuscated.log
移除Obfuz生成的函数
默认还原的堆栈中会包含$Obfuz$ProxyCall:$Obfuz$ProxyCall$Dispatch$35(Object, Object, Int32)
之类的由Obfuz生成的函数,这类函数日志如果太多有时会影响阅读。
可以通过指定-r
或--removeMethodGeneratedByObfuz
从输出的堆栈日志中移除此类函数的堆栈信息。
以Windows下的命令行为例:
DeobfuscateStackTrace -m path/of/symbol-mapping.xml -i obfuscated.log -o deobfuscated.log -r
会还原混淆后的堆栈日志,并且移除所有Obfuz生成的函数。