强网杯-JustRe

这篇博客介绍了参与强网杯遇到的一个32位无壳程序,主要涉及SSE指令的复杂运算以及三重DES加密的解密过程。作者通过分析check函数的SSE运算,确定输入必须为10字节的十六进制字符。通过模拟SSE运算并使用z3求解,得到前10字节输入。接着分析函数发现调用了三次0x401000(DES密钥扩展),并最终在0x401500进行加密,0x401250作为加密核心。通过理解加密模式,成功解密了密文。
摘要由CSDN通过智能技术生成

Windows32位程序,无壳,编译器版本还算高。

主函数除了CFG有点诡异外,流程十分简单。

进入第一个check函数,可以看到大量SSE指令,前面一些基本的判断很不好看,直接调试看结果

.text:00401682 060                 movd    xmm0, eax
.text:00401686 060                 pshufd  xmm5, xmm0, 0
.text:0040168B 060                 test    ecx, ecx
.text:0040168D 060                 jz      loc_401

到达以上基本块时可以发现,第一行eax的结果是string2hex(input[0:8]),刚好32字节,这说明我们的输入必须为十六进制字符。之后可以看到一堆复杂的运算,且都是通过xmm寄存器来实现的

 

这里操作的变量均为128位,v21是input[8:10]两个字符一直重复8次的hex值,而v9则是之前所说的前8个字符的hex值。最终运算的结果会与一个函数的数据进行比较,如果完全匹配则将这些数据写入到另一个函数中,如下

也就是说&#x

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值