我正在寻找我们供应商软件工厂部署到生产环境的代码中可能存在的逻辑炸弹。
为了读者的好奇心,这里是一个简短的回顾。该应用程序在某个时候停止了无限等待。反编译混淆的代码,我发现了一个不Thread.sleep
应该出现在 MVC API 中的奇数,其中数量是通过当前刻度与以某种方式计算的值的差异来计算的。IE
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
}
通过使用系统时钟进行实验,我发现应用程序工作(之前)和停止(一秒后)时有一个神奇的值。 DateTime.Now
实验是一致的和可重复的。
回到问题
我已经使用JetBrains DotPeek完成了所有这些工作。这是通过查看代码来完成的:人类静态分析。
问题是我所称SomeMysteryFunction
的内容过于模糊,以至于我真的无法知道它的作用。我有完整的代码,但我想采取另一种方法。
我想练习该功能并尝试查看它是否返回可能等于有罪时间戳的一致值。功能取决于GetCallingAssembly
方法的结果,这样会很痛苦。
我考虑过运行某种Program.cs
通过反射利用混淆函数的单元测试,但我想使用 DotPeek 进行调试。为什么?
- 拆卸可能是一团糟
- 我尝试了 Telerik,但我在 DotPeek 反编译不在其 StateMachine 表示中的异步方法方面取得了更大的成功
在我的工作经验中,我从未这样做过。我只需要确定这是有意还是无意。
如何设置测试台环境,以便可以调试到由 DotPeek 反编译的链接 DLL?