【发布时间】:2026-01-11 09:05:02
【问题描述】:
我正在尝试使用ConfuserEx 混淆一个库,但之后我的应用程序因MissingMethodException 而崩溃,堆栈跟踪指向第一次使用混淆的类和有问题的方法是被重命名的方法。我不知道在哪里找到它的调用或其他用法,所以不清楚我应该检查什么。我的猜测是在 JIT 过程中发生了异常。
只应用了重命名混淆,我有映射来反转它。
我查看了混淆模块和重命名版本的方法肯定存在。
在混淆模块上运行 PEVerify.exe 也会出现一些错误(下面仅提供一小段摘录):
[IL]: Error: [d:\1\Confused\my.dll : _YGbNngBKpRxvvy7NkSKSrcvDmJG_::_17w1GiROq6y1aWRw9wWSUGOde1C_][mdToken=0x60003cd] Method does not exist.
Method does not exist.
Method does not exist.
[IL]: Error: [d:\1\Confused\my.dll : _cdMM5QrQwL2ksRGa1UJRmJUkVTd_::.ctor][mdToken=0x60006c8][offset 0x00000002] Unable to resolve token.
[IL]: Error: [d:\1\Confused\my.dll : ClassXyz::_tGtv2dtaIMIA6LoHXu7DwMxfvlS_][mdToken=0x6000732] Method does not exist.
[IL]: Error: [d:\1\Confused\my.dll : ClassXyz::_tk0zK3VXciZeRsH2nVWBZ6jNVdE_][mdToken=0x6000733] Method does not exist.
[IL]: Error: [d:\1\Confused\my.dll : ClassXyz::_tGtv2dtaIMIA6LoHXu7DwMxfvlS_][mdToken=0x6000732] Method does not exist.
[IL]: Error: [d:\1\Confused\my.dll : ClassXyz::_tk0zK3VXciZeRsH2nVWBZ6jNVdE_][mdToken=0x6000733] Method does not exist.
[IL]: Error: [d:\1\Confused\my.dll : ClassXyz::_PkJlSB6sykBdsQ8OXX3CBVEXudk_][mdToken=0x6000735] Method does not exist.
[IL]: Error: [d:\1\Confused\my.dll : ClassXyz::_AYy29oWv1vnvKJP5Q1lcxUcQZRd_][mdToken=0x6000757] Method does not exist.
我已准备好调试混淆过程以搜索出了什么问题……但我不知道要查找什么。我如何找出代码的哪一部分正在尝试使用旧方法名称? 如何使用 PEVerify 的输出,例如mdTokens 将如何帮助我?
【问题讨论】:
-
作为观察或其他要考虑的事情,您可能正在使用反射(通过字符串文字)来访问类型或成员,因此代码可能不“知道”重命名。
-
不存在成员的反射通常返回null或至少抛出其他异常类型。此特定异常来自无效程序集。混淆过程中出现问题,程序集中的某些链接已损坏。
标签: .net obfuscation peverify