问题描述
我正在我们的供应商软件工厂部署到生产环境的代码中寻找可能的逻辑炸弹。
为了读者好奇,这里是一个简短的回顾。应用程序在某个时刻停止工作并无限等待。对混淆代码进行反编译,我发现了一个奇怪的 Thread.sleep
,它不应该出现在 MVC API 中,其中的数量是通过当前滴答与以某种方式计算的值的差来计算的。即
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 进行调试。为什么?
在我的工作经历中,我从未这样做过。我只需要确定这是否是故意的。
如何设置测试平台环境,以便调试到 dotpeek 反编译的链接 DLL?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)