注册以来一直没在看雪发贴子,除了前两年比赛的题目提交贴.去年巨佬都隐退了,拿了个奖,今年就不打防守方了.唉,ctf没落了.发这题是经过原作者同意的.这题出得很好.准确来说,很有艺术感,能激发思考.(不然我就不会在老大任务学习之余瞎写了这么多fw代码,还写篇文章提交上来.)先说说这次比赛.好久没打ctf了.这次是我师傅的战队举办的比赛,我就征得老大的同意,以学习的目的打了这次比赛.注册了n00bzx账号,不打分,用小号上,做完签到题交完flag,就存题睡觉了,慢慢做.反正题目又不会没,是吧?他们第一次办比赛,题目难度不算太难,而且交流群气氛也很好.所以,这是十分成功的第一次.这只是我一个re菜鸡的评价.别的方向都不会,没有评价的权限.希望他们战队比赛越办越好.感谢出题师傅给我权限发这篇粗浅分析.题目附件见后文,如出题师傅不愿意我发附件,看到后请立刻告诉我,我立刻删除整篇贴子并修改后重新发布,要打要骂随便!这篇文章只算思路,不提供具体wp.ida打开不用说,c++写得,莫得符号(也没关系),在某个位置(包含反调试),计算了某个段的某种算法hash,存在全局变量中(后面干嘛用呢?),用了inline hook了crt(这个hook比较关键,后面干嘛用呢?),这个hook使用了veh(比较特别),在handler里面放了一些东西,也起到了一定的反调试器的作用,需要一定的驱动思想(注意只是思想)来绕过(我觉得).经过进一步xxxx后,就是算法了.这是我要说的.前面那些建议15分钟内解决(很久了,绝对够).15分钟后,直接来到算法部分.经过一番ida xxxx后(包含建立结构体,重命名变量,xxxx静态分析手段,说给完全没做过的师傅听的,毕竟也有比我更菜的是吧!),得到初步逻辑代码:老爹的话:还有一件事!这里的代码都有一点点bug,(不知道是不)是我故意加的(你猜),所以别直接编译运行(或许可以,但是结果一定是错的!),做题也是学习,要有自己的思路.(菜鸡浅薄之见)现在才是代码#(滑稽)我讨厌crt!所以我把默认库都禁了,这样能缩小程序大小(没卵用,之前玩最小pe玩魔怔了,当我是个sb就行了)...说实话,这段代码能正确编译运行,但是需要桌面上有程序文件...不需要任何库(包括默认库#(滑稽)),使用vs2022(没必要,都行,看你们都爱这么说,我也说下)编译,开c语言(其实也没必要,废话).总之就是不要任何设置,直接编译(又是废话).这就是主要算法逻辑.当然肯定不能用他直接爆破(4小时以上).所以要优化.第一段代码是你们可能有[只是可能,这是十分可笑(或许)]的想法.教科书式,使用z3解决.当然,代码是我事后写的,因为做的时候直接排除了这种想法,只是想告诉那些比我还菜的师傅说,这样不行.因为你也看到了,逻辑都是查表操作(再优化也有),z3是擅长解线性约束(线性规划啥的,毕竟我高中毕业也只学过这点,别的不懂也不能乱说),查表显然不是啊...所以这样会爆内存,你懂得...啥?c语言效率比python更高是吧?那我用c也写了一遍,你看看?吐槽一下,z3某些编译选项会有一些安全问题,比如某个tls中的计数器在主线程结束的时候被删了,在全局析构的时候居然还去访问他...可能我瞎开了什么选项吧#(滑稽)告诉你结果吧,内存一样爆炸,而且变化趋势都一样的#(滑稽),当然,底层的api其实是一样的.(不是显然吗)以上只是和某些比我还菜的师傅说的,其实是完全没有用的...以下为第一次优化的代码(优化了一些表啥的,基本还是原样爆破,也是事后写的)我都是单线程运行,这样要跑4小时.仍然需要本地桌面exe文件.不需要任何库.于是,菜鸡开始想办法了...我就想,simd不是很快吗(这是我当时的真实想法),还能并行,我干嘛不用simd写?不想用cl,cuda啥的,那样太开挂了,不要动不动就瞎想用gpu,能用cpu写就用cpu写,我觉得,在我没有搞清楚cpu的奥秘之前,不会天天想着玩gpu的,写光追的时候也要压榨cpu到极致,那才有利于学习!!!学得开心就完事了!!!于是代码来了(真是当时写的,别想着直接编译咯~~~):优化方法不说了,看注释就够了.有一些都是临时的乱七八糟想法.无法组织成语言...语言能力有待提高,顺便感谢公司老大,教会我写文章了...在此膜拜(这里可不能不让我膜巨啊!!!)但是这样几乎没有效率的提升.看来,我还没有参透cpu的奥秘.在intel和微软面前我仍然是个小丑.哦不对,连小丑都不是,就是一只小虾米#(滑稽)我初步瞎想,瓶颈应该出在内存访问上.毕竟,内存访问会比寄存器访问慢几百倍(大概).
登录后可查看完整内容
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290448.htm
[原创]一篇关于天命战队desctf devil.exe的贴子(非差评)
67 浏览
5 回复
一看,又臭又长.认命吧.写文章,我不适合.
最后于 2026-3-22 16:59
被n00bzx编辑
,原因:
最后于 2026-3-22 16:59
被n00bzx编辑
,原因:
这个加密算法实际上是个白盒AES256
好的,我去学习下.很早听说这个了,一直没学
我没分析exe,利用你的c++代码,使用DFA攻击,还原出key了。
input-hex(输入):
A0A8ACA7A9B69579BD767DA9295FB942
key-hex(key):
B7C2DFF87D385B0C53BB1CFC6D7C158F0D4393508C08F6AE750DB54456774A22
iv-hex(iv):
65D6CDFEFF1C4165156E184CF5B94E13
AES-CBC-256-hex(结果):
b8029ca94a2eb41ae5da94829485fe4f
input-hex(输入):
A0A8ACA7A9B69579BD767DA9295FB942
key-hex(key):
B7C2DFF87D385B0C53BB1CFC6D7C158F0D4393508C08F6AE750DB54456774A22
iv-hex(iv):
65D6CDFEFF1C4165156E184CF5B94E13
AES-CBC-256-hex(结果):
b8029ca94a2eb41ae5da94829485fe4f
愚公
我没分析exe,利用你的c++代码,使用DFA攻击,还原出key了。
input-hex(输入):
A0A8ACA7A9B69579BD767DA9295FB942
key-hex(key) ...
好耶!我的方法只是一种简单研究,不是真正最好的方法,仅代表我的探索过程,需要先装作不知道白盒aes
我没分析exe,利用你的c++代码,使用DFA攻击,还原出key了。
input-hex(输入):
A0A8ACA7A9B69579BD767DA9295FB942
key-hex(key) ...
好耶!我的方法只是一种简单研究,不是真正最好的方法,仅代表我的探索过程,需要先装作不知道白盒aes