【问题标题】:Reverse engineering code [closed]逆向工程代码[关闭]
【发布时间】:2018-09-20 02:29:58
【问题描述】:

我目前正在执行一项任务,我必须编写代码来解密给我的文本文件。我只是停留在如何对加密代码进行逆向工程,如下所示:

char decode(char aChar)
{
  int result = 1 + (rand() % 127);
  result = aChar - result;

  if (result < 0)
  {
    result = result - 128;
  }
  return result;
}

我的代码可以工作,但是当我运行程序时,它会加密已经加密的文本文件。任何帮助将不胜感激。

【问题讨论】:

  • 这很棘手:您需要做的一件事是退出随机数生成器。可能(假设是一个线性相关生成器),但不是微不足道的。
  • 您的加密代码是什么样的?您是否使用相同的密钥播种 rand?
  • @NathanOliver:我认为没有必要。你再次调用rand(),然后将之前生成的所有号码都退回。
  • “我的代码有效,但 [实际上没有]” 测试数据是什么? “当我运行程序时” 程序在哪里?这似乎是一个非常不完整的问题。
  • 加密代码叫decode?

标签: c++ reverse-engineering


【解决方案1】:

你需要知道随机数是如何产生的。

假设它是使用srand() 生成的,具有这样的常量种子:

unsigned int seed = 1;
srand(seed);

那么解密代码可能是这样的:

char decrypt(char aChar)
{
  srand(seed);
  int result = 1 + (rand() % 127);

  if (aChar + 128 < 0)
        aChar = aChar + 128;

   aChar = aChar + result;

  return aChar;
}

请注意,这不一定 100% 有效,因为 decode 函数中的 if 语句很难解密所有字符,因为它可能会产生需要更多工作的可能结果。

【讨论】:

  • 那是错误的代码; aChar 和 result 总是组合在一起。
  • @Adder:什么意思?
  • 现在可以了,你改代码了。
  • @Yoginth:我认为你的decode 函数也需要修改。
  • @Adder:复制/粘贴 :)。谢谢!
猜你喜欢
  • 1970-01-01
  • 2010-10-15
  • 2014-03-26
  • 2011-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 2011-09-14
  • 2013-10-14
相关资源
最近更新 更多