CTF中的代码变形技术和难度分析.pdf

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C T F 中 的 代 码 变 形 技 术 和 难 度 分 析 王晨男(大龙猫) 鲁大师 2021 SDC分会场-公开课 本讲内容 1,简单案例,理论方法初体验 2,方案设计和难度分析的理论工具 3,攻与守的常见套路介绍和分析 4,一种实践成功的套路 5,总结 简单案例 方案场景:Base64 编码/解码,已知输出求输入。 保护方案:采用自定义编码符号 + 代码膨胀。 简单案例 方案场景:Base64 编码/解码,已知输出求输入。 保护方案:采用自定义编码符号 + 代码膨胀。 攻击手法1:黑盒方法。我们发现改变输入的一个位,对输出的影响极为局部化 ,所以对输出的每4位 (如果是Base64解码,那么用3位)可以蛮力穷举出局部输入。整体输入是局部输入的简单拼接,复 杂度相对于输入数据长度是线性的。 攻击手法1.X(真实实战案例):无脑操作。对输出的每1位,蛮力穷举输入,就行了。 如果是编码,求输入每次遇到多解,下一步匹配会自动丢弃错误解;如果是解码,每次蛮力确定1到2 位输入 简单案例 方案场景:Base64 编码/解码,已知输出求输入。 保护方案:采用自定义编码符号 + 代码膨胀。 攻击手法2:人肉蛮力。汇编层面,逐层逆推。 假设场景为编码,代码膨胀是汇编指令的等价替换,那么构成单输入单输出双射 ,即回推过程中一个 a的6bits对应一个已知的b,只需机械操作,无需人工分析。 假设场景为解码,找到构成双射的局部代码块,或者局部处理一下小规模多解,问题也不难。 简单案例 方案场景:标准AES,已知输出求输入。KCTF方案2. 保护方案: 简易类Themida虚拟机。 为Sub, ShiftRow, MixColumn, Xor分配handler. handler内部采用代码膨胀, 由于RoundKey固定,AddRoundKey的密钥逐字节 Xor转化为查表。 https://xilinx.github.io/Vitis_Libraries/security/2020.1/_images/original_flow.png 简单案例 方案场景:标准AES,已知输出求输入。KCTF方案2. 攻击方法: 根据示例答案的数据流得到执行顺序,重建算法Sub Shift, MixColumn, AddRoundKey, 循环的分层。 逐层逆推。 AddRoundKey逆映射简单,直接求得逆映射,无需 关心密钥是什么。 https://xilinx.github.io/Vitis_Libraries/security/2020.1/_images/original_flow.png

文档评论(0)

优选文档 + 关注
实名认证
内容提供者

专注于发布优质文档,喜欢的可以关注一下哦~

1亿VIP精品文档

相关文档