- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)