如何对算法进行逆向工程?

2023-11-22

我想知道如何反转一种算法,例如用于存储登录名或个人识别码的算法。

假设我有大量数据,其中:

7262627 -> ? -> 8172

5353773 -> ? -> 1132

等等。这只是一个例子。或者说将一个十六进制字符串转换为另一个字符串。

&h8712 -> &h1283或类似的东西。

我该如何开始弄清楚该算法是什么?一个人从哪里开始?

你会开始尝试不同的转变、异或并希望有什么脱颖而出吗?我确信有更好的方法,因为这看起来就像在黑暗中刺伤。

是否有可能对这种算法进行逆向工程?

抱歉,如果这是一个愚蠢的问题。感谢您的帮助/指点。


人们尝试了一些事情:

  • 获取源代码,或反汇编可执行文件。
  • 根据其他人使用的哈希函数进行猜测。例如,由 32 个十六进制数字组成的哈希很可能是 MD5 的一个或多个重复,如果您可以获得单个输入/输出对,那么很容易确认或反驳这一点(尽管请参阅下面的“盐”) 。
  • 对大量输入和输出对进行统计分析,寻找任何类型的模式或相关性,并将这些相关性与已知散列函数的属性和/或系统设计者可能使用的可能操作相关联。这超出了单一技术的范围,并且进入了一般密码分析的领域。
  • 询问作者。安全系统通常不依赖于它们所使用的哈希算法的保密性(即使这样做,通常也不会长时间保持安全)。不过,您给出的示例非常小,并且密码的安全散列总是涉及盐,而您的显然没有。所以我们可能不会谈论作者有信心做到这一点的那种系统。

对于输出仅为 4 位十进制数字的散列,您可以简单地通过构建每个可能的 7 位输入及其散列值的表来攻击它。然后,您可以反转该表并进行(一对多)去哈希操作。您永远不需要知道哈希值的实际计算方式。如何获得输入/输出对?好吧,如果局外人可以以某种方式指定要散列的值,并查看结果,那么您就拥有了所谓的“选择明文”,而依赖于此的攻击就是“选择明文攻击”。因此,如果 7 位 -> 4 位哈希的使用方式允许选定的明文攻击生成大量输入/输出对,那么它确实会非常弱。我意识到这只是一个例子,但它也只是逆转它的技术的一个例子。

请注意,对哈希进行逆向工程和实际反转它是两件不同的事情。您可能会发现我正在使用 SHA-256,但这不会帮助您反转它(即,给定输出,计算出输入值)。没有人知道如何完全反转 SHA-256,尽管当然总是有彩虹表(参见上面的“盐”)<conspiracy>至少没有人承认他们这样做,所以这对你我都没用。</conspiracy>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对算法进行逆向工程? 的相关文章

  • 查找重叠事件/时间的算法

    在处理自定义日历时 我不知道如何找到与任何其他时间段重叠的时间段 时段从 0 点至 720 点 上午 9 点至晚上 9 点 每个像素代表一分钟 var events id 1 start 0 end 40 an event from 9 0
  • 将数字 n 拆分为 k 个不同数字的总和

    我有一个数字 n 我必须将它分成 k 个数字 使得所有 k 个数字都是不同的 k 个数字的总和等于 n 并且 k 最大 例如 如果 n 为 9 则答案应为 1 2 6 如果 n 为 15 则答案应为 1 2 3 4 5 这就是我尝试过的 v
  • 带有元数据的 scipy kdtree

    我目前正在寻找一种方法来构建几个 kd 树以快速查询一些 n 维数据 但是 我对 scipy KD 树算法有一些问题 我的数据包括id gt data somedata coordinate x y 我希望能够基于坐标和 k 最近邻居的 i
  • 算法:找到圆中的峰值

    Given n排列成圆圈的整数显示了一种可以找到一个峰值的有效算法 峰值是不小于它旁边的两个数字的数字 一种方法是遍历所有整数并检查每个整数以查看它是否是峰值 这产生O n 时间 似乎应该有某种方法来分而治之 以提高效率 EDIT 好吧 基
  • iOS SecKeyRef(公钥)将其发送到服务器[重复]

    这个问题在这里已经有答案了 现在我的公钥有问题 我使用 SecKeyGeneratePair 来生成公钥和私钥 现在我必须将我的公钥发送到服务器 我使用下面的方法将 SecKeyRef 转换为 NSData 我总是得到相同的公钥 不过我将其
  • 最低共同祖先算法

    所以我一直在研究实现最低共同祖先算法 我研究了许多不同的算法 主要是 Trajan 解决方案的变体或 RMQ 的变体 我正在使用非二叉树 我的树经常会在查询之间发生变化 因此预处理不一定值得 树的节点数不应超过 50 75 个 我想知道的是
  • 算法 - 树中所有节点的最大距离

    所以 找到树中两个节点之间的最长路径相当容易 但我想要的是找到从节点出发的最长路径x到树中的另一个节点 对于所有x 这个问题也可以用以下方式表达 计算从给定的树中可以生成的所有有根树的高度 One way of course is to j
  • Java简单加密

    我想加密存储在磁盘上的文本 配置 文件 尝试使用DES http en wikipedia org wiki Data Encryption Standard加密 我在客户端计算机上遇到了致命错误 后来我发现该算法无法处理重音字符 我怀疑这
  • 查找数组中的重叠数据

    我们正在编写一个 C 应用程序 它将有助于删除不必要的数据重复器 只有在以下情况下才可以移除中继器 all它接收到的数据被其他中继器接收 我们第一步需要做的事情解释如下 例如 我有 int 数组的集合 A 1 2 3 4 5 b 2 4 6
  • 没有 ssl 的 Web 加密 API

    我编写了一个用于安全消息传输的小网络应用程序 以了解有关加密的更多信息 并想向我的朋友展示它并让他们玩一下 所以我将它托管在我的小服务器上 并惊讶地发现 Web Crypto API 我竭尽全力开始工作 因为它的错误消息不是很具体 需要 S
  • 如何解密 BigQuery 中的列?

    我在 BigQuery 中有一些加密列 我想使用 BigQuery 函数对其进行解密 用于加密它们的机制是 AES 256 使用的向量以 UTF8 编码 生成的数据采用 Base64 加密 我想要做的是使用函数解密 BigQuery 中传递
  • 读取4个点的坐标。他们做一个正方形吗?

    我计算点之间的距离 如果距离相等 则点构成一个正方形 否则不 仅当我按以下顺序读取坐标 A x y B x y C x y D x y 或相反时 我的代码才有效 但是如果我这样读 例如 A x y B x y D x y C x y 它将不
  • 如何从列中创建对称矩阵?

    例如 我想转动以下列 90 175 600 650 655 660 代入矩阵 90 175 600 650 655 660 175 600 650 655 660 655 600 650 655 660 655 650 650 655 66
  • 为什么我的代码不能根据字典解码加密字符串?

    我有一本字典 其中包含代表字母的键和值 例如一个简单的 DICT CODE b g n a p o x d t y 我收到了一个加密代码 并将该字符串转换为一个列表 其中每个项目都是一个单词 我需要根据字典中的项目来解决它 代码示例是 wo
  • H2数据库:如何进行加密保护,而不暴露文件加密密钥

    我们在服务器模式下使用Java H2数据库 因为我们不希望用户访问数据库文件 为了对数据库文件添加更多保护 我们计划使用 AES 加密 将 CIPHER AES 添加到数据库 URL 以防存储被盗 但是 每个用户在连接时还需要提供文件保护密
  • openssl_decrypt 标签值

    我在网站中使用 openssl encrypt decrypt 方法 但在使用 tag 选项时遇到了一些问题 openssl encrypt data method key options iv tag openssl decrypt da
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • 解密 TLS 1.2 AES-GCM 数据包

    我正在开发一个 Java 程序来解密TLS 1 2正在使用的会话TLS RSA WITH AES 128 GCM SHA256密码 我使用wireshark 录制了一个测试会话 这大师秘密是已知的 No Time Protocol Leng
  • 从数字列表中生成所有唯一对,n 选择 2

    我有一个元素列表 假设是整数 我需要进行所有可能的两对比较 我的方法是 O n 2 我想知道是否有更快的方法 这是我在java中的实现 public class Pair public int x y public Pair int x i

随机推荐

  • 避免应用程序激活并在单击其上的按钮时集中注意力 - Windows API 或 Qt

    情况 无边框 QDialog 成功地保持在其他应用程序之上 问题是当单击此始终位于顶部的应用程序窗口时 会发生以下情况 单击的始终位于顶部的应用程序被激活 单击的始终位于顶部的应用程序窗口会窃取先前活动 聚焦的应用程序的焦点 是否有可能当单
  • YouTube API loadVideoById startSeconds 不起作用

    我为我嵌入的一些 YouTube 视频创建了一个章节选择器 此方法曾经有效 但最近已停止 我不明白发生了什么事 我使用他们推荐的格式 但使用 loadVideoById 来显示每一章 div class wrapper div div di
  • 具有 MVVM 模式的数字文本框

    我见过数字的实现TextBox后面的代码WPF 我们如何做到这一点MVVM图案 在 WPF 中 如果将 TextBox 绑定到 Decimal 或 Int 属性 它将仅接受该 int 或decimal 否则它将显示红色边框 表明它在绑定中没
  • 什么是真与假?它与 True 和 False 有何不同?

    我刚刚了解到有truthy and falsypython 中的值与正常值不同True and False 有人可以深入解释一下什么吗truthy and falsy价值观是 我应该在哪里使用它们 有什么区别truthy and True价
  • 为什么 ${basedir} NLog 配置不起作用?

    为什么我无法在生产服务器中使用 basedir nlog config 如果我使用fileName basedir logs shortdate log nlog 不记录消息信息 但是如果我更改为类似的内容fileName C logs s
  • dockerfile中的EXPOSE和服务YAML中的TARGETPORT与Pod中实际运行的端口有什么关系?

    dockerfile中的EXPOSE和服务YAML中的TARGETPORT与Pod中实际运行的端口有什么关系 在我的 dockerfile 中 expose 8080 在我的部署中 ports containerPort 8080 在我的服
  • fork() 后 libCurl SSL 错误

    我正在开发一个 FUSE 驱动程序 当我将其作为守护进程运行时 没有 f 或 d 标志 通过 libcurl 发出的所有 https 请求都会失败 我能够通过发出 https 请求 分叉并返回父进程 然后从新进程发出第二个请求来重现该错误
  • 查找关联记录存在的位置

    如何仅选择那些具有关联标签记录的员工 换句话说 仅选择具有一个或多个与其关联的标签记录的员工记录 class Employee lt ActiveRecord Base has and belongs to many tags end cl
  • 在 ASP.NET 中正确执行锁定

    我有一个 ASP NET 站点 其搜索功能相当慢 我想通过使用查询作为缓存键将结果添加到缓存一小时来提高性能 using System using System Web using System Web Caching public cla
  • Spring Boot应用程序立即退出

    当我运行我的spring bootapplication 它立即退出 与exit code 0 有了这个 Spring Boot v2 1 0 RELEASE 2018 11 27 14 08 31 219 INFO 94920 resta
  • iOS 检测蓝牙连接/断开

    即使我的应用程序处于后台 当蓝牙设备与 iOS 连接或断开连接时 是否可以收到通知 在 Android 上 我使用ACTION ACL CONNECTED and ACTION ACL DISCONNECTED事件 但我找不到 iOS 的等
  • Chrome 特定的 CSS 问题将表格单元格设置为显示:块

    I found 这个问题那似乎有我想要的 我正在使用 chrome 32 0 1700 102 甚至fiddle第一个答案对我来说效果很好 但是 当我将以下 html 放入新文件并在 chrome 中打开它时 tds 的 计算样式 选项卡仍
  • Flutter 中是否有任何回调告诉我“构建”功能何时完成?

    我的屏幕上有一个 listView 我已经给它附加了一个控制器 我能够调用我的端点 接收响应 解析它并插入行中 ListView 应该自动滚动 确实如此 但不是以完美的方式 我总是落后一个项目 这是我的代码 override Widget
  • Serilog :选择在运行时记录哪个接收器

    我将在 net 标准 2 0 库中实现 Serilog 我正在寻找一种方法来选择每个日志行应使用哪个接收器 假设我们在配置中定义了 2 个接收器 控制台和文件 Log Logger new LoggerConfiguration Minim
  • 为什么用c源代码调试时GDB会“跳回来”

    我正在调试 goldfish android 内核 版本 3 4 带有内核源代码 现在我发现 gdb 有时会在行之间来回跳转 例如考虑如下 c 源代码 char XXX int a if 当我到达if子句 我输入n它会跳回到int a部分
  • Ruby on Rails / PostgreSQL - 启动服务器时出现库未加载错误

    嘿哟 如果这个问题已在另一个线程中得到回答 我提前表示歉意 我搜索过该网站 但没有找到答案 然而 最接近的相关问题是Ruby on Rails PostgreSQL 启动服务器时出现库未加载错误 libq 5 dylib 但它从未解决 答案
  • 如何获得带有空格和大小写混合的随机字符串?

    我需要生成一个带有空格和混合大小写的随机字符串 This到目前为止我所得到的就是
  • 删除 groupby 中不包含元素的组 (Python Pandas)

    让数据框如下所示 import pandas as pd df pd DataFrame name A A B B C C nickname X Y X Z Y Y 如何对 df 进行分组并删除那些不至少包含一个 X 的组 C 谢谢 您可以
  • 通过文件共享、用户身份验证通过网络复制文件

    我正在构建一个 net C 控制台程序来将文件部署到 Windows 文件共享服务器 正在共享的文件夹 路径是 192 168 0 76 htdocs public 运行时我收到错误 09 35 29 Step 1 3 Unhandled
  • 如何对算法进行逆向工程?

    我想知道如何反转一种算法 例如用于存储登录名或个人识别码的算法 假设我有大量数据 其中 7262627 gt gt 8172 5353773 gt gt 1132 等等 这只是一个例子 或者说将一个十六进制字符串转换为另一个字符串 h871