我正在尝试使用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帮助我?