180827 逆向-网鼎杯(3-1)

本文介绍了参与网鼎杯比赛的经历,重点解析了SimpleSMC题目。通过分析函数0x400aa6,确定其为自修改代码(SMC)。关键解密过程涉及函数字节码异或,使用IDC脚本进行解密。尽管词频统计方法不适用于本题,但通过观察加密函数的常见开头,找到了解密的关键。最终揭示了比较字符串的库函数 strcmp 的使用,并成功解密出目标字符串。
摘要由CSDN通过智能技术生成

这两周比赛接着比赛打到头爆。。。。
网鼎杯的题目质量感觉都还行,也练习到了不少东西

SimpleSMC


这里的0x400aa6函数点过去一看就可以发现它是乱的字节无法执行,根据题目SMC(Self-Modifying Code)可以猜到这个函数就是被修改的目标了

查看它的交叉引用可以发现有两个函数有调用
sub_400c48
关键代码如下

 for ( i = 0; *((_BYTE *)sub_400AA6 + i) != 0xC3u; ++i )
  {
    v1 = *((unsigned __int8 *)sub_400AA6 + i);
    *((_BYTE *)sub_400AA6 + i) = v1 ^ *((_BYTE *)sub_41E1B0 + i);
  }

是一个函数字节码异或的固定调用,直接写个IDC脚本解就行
查看这个函数的交叉引用是在init_array中,所以是在调用之前调用的

sub_400bac

signed __int64 __fastcall sub_400BAC(char *key)
{
  int i; // [rsp+Ch] [rbp-Ch]

  for ( i = 0; *((_BYTE *)sub_400AA6 + i) != 0xC3u; ++i )
    *((_BYTE *)sub_400AA6 + i) ^= key[i % 7];
  return 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值