我正在使用Keygen应用程序(.exe)。它的GUI中有两个输入字段:
p1 -至少1位数,10位数最大- ^0-9{1,10}$p2 -12个字符最大值-大写字母/数字/下划线- ^A-Z0-9_{0, 12 }$按generate按钮会产生一个键x。
x - 20位准确- ^0-9{20}$
对于每对(p1,p2),只有一个x (换句话说:f(p1,p2) = x是一个函数)
我对它的加密算法感兴趣。
有什么方法可以反向工程这个算法吗?
我想到了两种方法:
f(p1,p2) = x结果来确定所使用的加密算法。发布于 2021-01-02 03:24:11
正如您所提到的,使用雪人或其他反编译工具可能是一条路。
我怀疑您是否能够通过查看输入输出组合来确定算法,因为可以编写任何类型的任意算法,这些算法可以以任何方式运行。
也许你可以问问作者他们使用的是什么算法?
发布于 2021-01-04 11:51:16
除非是非常简单的事情,否则我将排除您的第2种选择,即通过查看输入和输出对来找出它。
对于静态二进制文件的反编译/反向工程,您应该首先确定它是.NET应用程序还是其他什么。如果它是用.NET编写的,您可以尝试使用它进行反编译:
https://www.jetbrains.com/decompiler/
它确实很容易使用,除非二进制文件被混淆了。
如果应用程序不是.NET应用程序,您可以尝试Ghidra和/或Cutter,两者都内置了相当令人印象深刻的反编译器:
如果静态代码分析不够,可以向其添加调试器。Ghidra和x64dbg很好地结合在一起,并且可以通过安装在两个插件中的插件来同步。
如果您是新手,我可以建议您查看x86平台的基本汇编程序,以便对CPU的工作方式有一个大致的了解。另一个开始的方法是CTF比赛中的“破解”风格的挑战。通常有很好的解决方案,所以你有问题也有答案。
祝好运!
发布于 2021-01-04 15:55:06
输入p1和p2。扫描进程中的字节字符串。然后在上面放置一个硬件断点,用于访问内存。生成键,它就会击中那个硬件断点。然后您就有了访问它的地址,并在ghidra中开始反转(不要忘记使用BASE +偏移),因为ghidra的输出将不具有与正在运行的应用程序相同的基础。相关代码必须访问输入。所以你知道算法在哪里。因为它要么直接访问它,要么在调用链中的某个地方被相对较快地访问。没有人能够不实际看到可执行文件就知道。
https://stackoverflow.com/questions/64585950
复制相似问题