我正在寻找一个可能的逻辑炸弹在我们的供应商软件工厂部署到生产的代码中。
为了读者的好奇心,这里有一个简短的概述。应用程序在某个时刻停止了无限等待的工作。对混淆的代码进行反编译后,我发现了一个奇怪的Thread.sleep,它不应该出现在MVC中,它的数量是通过当前滴答数与某个值的差来计算的。也就是说。
private long SomeFunction(long param) {
if (param > 0)
Thread.Sleep(param);
return param;
}
private long GetSomeLongValue() {
//Simplified. There is a lot of long to string and back
return SomeFunction(Manipulate(DateTime.Now.Ticks - GetMysteryNumber()));
}
private long Manipulate(long param){
if (param < 0)
return param;
else
# Compute a random number of days between 0 and param / 86400000,
# and return its milliseconds value, always positive
}通过对系统时钟进行实验,我发现当应用程序工作时(在前)和停止(在1秒后)时,存在一个魔术 DateTime.Now值。实验结果一致,重复性好。
回到问题
我使用JetBrains DotPeek完成了所有这些工作。这是通过查看代码来完成的:人类静态分析。
问题是,我所称的SomeMysteryFunction太模糊了,以至于我真的无法知道它做了什么。我有完整的代码,但我想采取另一种方法。
我希望练习这个函数,尝试,看看它是否返回了可能等于有罪时间戳的一致值。该函数取决于GetCallingAssembly方法的结果,因此这将是背部疼痛。
我考虑运行某种Program.cs或单元测试,通过反射利用模糊函数,但我想使用DotPeek进行调试。为什么?
在我的工作经验中,我从来没有这样做过。我只需要确定这是否是故意的。
如何设置测试床环境,以便调试到由DotPeek解压缩的链接DLL中?
发布于 2021-12-09 14:21:55
这篇文章在.NET解压缩器的丛林中解释了所有值得使用的.NET解压缩器。
当然,免费开放源码软件工具dnSpy是您想要使用的那种类型的黑客--我想使用这个函数场景。
https://stackoverflow.com/questions/67638943
复制相似问题