识别反编译解密算法

逆向工程 加密 解密
2021-07-04 22:14:25

我正在尝试分析我正在逆向工程的解密算法,并且想知道是否有人会通过查看逻辑来识别人们使用的标准/通用密码之一。

我从对这些函数的调用中提取的解密代码本质上都非常相似(它们总共有大约 50 个相互调用的函数),它们都由一系列 while 循环、if 语句和非常长的 switch/case 语句,它们似乎分析了一个位置的每个位置或字节值,并决定了一个动作过程以从中生成输出。

其中一些函数的长度为 11-30k 行,这让我想知道这是否是原始代码的构建方式,或者这是否可能是编译器优化处理,将原始逻辑扩展到如此多的行。

以下是其中 2 个函数的摘录:https : //gist.github.com/robertoandrade/ac3a810b82ba48d3b136

我重命名它们只是为了便于识别,并且都具有相似的签名:(int ____________________switch_magic后跟一个数字只是为了帮助计算其中存在的数量)。

PS:我在尝试逆向工程的一系列应用程序中发现了相同的逻辑,因此我假设这是某种常见的算法,我无法通过查看混淆的反编译代码来识别。

1个回答

这是控制流扁平化混淆,可能与持续混淆、不透明谓词和所有其他花里胡哨相结合。

我的猜测是它是一个白盒加密实现,即密钥和其他常量已嵌入到混淆代码本身中,而不是作为单独的数据块出现。这是不可能的,你就可以恢复键,甚至没有算法的deobfuscating代码,但谁知道...