使用给定的.exe GUI逆向解密算法

问题描述

我正在使用Keygen应用程序(.exe)。它的GUI中有两个字段:

  1. p1-10位数字
  2. p2-12个字符

按下generate按钮会产生一个键x

我对它的加密算法很感兴趣。

是否可以对算法进行逆向工程?

我想到了两种方法:

  1. 反编译。我使用了snowman,但是输出太脏了。反编译后的代码可能包含不相关的部分,例如GUI。
  2. 输入和输出分析。我想知道是否有任何选项可以通过分析一组f(p1,p2) = x结果来确定使用的加密算法。

解决方法

正如您提到的,使用雪人或其他一些反编译工具可能是可行的方法。

我怀疑您是否能够仅通过查看输入输出组合来确定算法,因为可以编写任何类型的任意算法,可以以任何方式运行。

也许你可以问问作者他们使用的是什么算法?

,

除非事情真的很简单,否则我会排除您尝试通过查看输入和输出对来弄清楚的选项 2。

对于静态二进制文件的反编译/逆向工程,您应该首先确定它是 .NET 应用程序还是其他应用程序。如果它是用 .NET 编写的,你可以试试这个进行反编译:

https://www.jetbrains.com/decompiler/

它真的很容易使用,除非二进制文件被混淆了。

如果应用程序不是 .NET 应用程序,您可以尝试 Ghidra 和/或 Cutter,它们都内置了令人印象深刻的反编译器:

https://ghidra-sre.org/

https://cutter.re/

如果静态代码分析还不够,可以添加调试器。 Ghidra 和 x64dbg 可以很好地协同工作,并且可以通过安装在两者中的插件进行同步。

如果您对此不熟悉,我可以建议您查看 x86 平台的基本汇编程序,以便对 CPU 的工作原理有一个大致的了解。另一种入门方式是来自 CTF 比赛的“crackme”风格挑战。通常会有关于解决方案的精彩文章,因此您可以找到问题和答案。

祝你好运!

,

输入 p1 和 p2。扫描该字节字符串的进程。然后在其上放置一个用于内存访问的硬件断点。生成密钥,它将命中该硬件断点。然后你就有了访问它的地址,并在 Ghidra 中从那里开始反转(不要忘记使用 BASE + OFFSET),因为 ghidra 的输出不会与正在运行的应用程序具有相同的基数。相关代码必须访问输入。所以你知道算法在哪里。因为它要么直接访问它,要么访问该调用链中的某个地方相对较快。没有实际看到可执行文件,没有人会知道。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...