[Re221127周任务]对称加密

发布时间 2023-12-04 02:33:33作者: wakappxc

1.载入ida查看逻辑

 在主函数里面我们看到上图中其实很奇怪,我们根本就没有用到v7,而v8[i%v6-8]数组中的索引会变负,而v7中正好有7个字符(包括/0的话就有8个),

所以我们不妨大胆的想象,v8[i%v6-8]代表的是v[i%v6]下移8个地址而代表的是v7呢?

 其实在这里我们已经是可以确定答案了 确实是这样的 [rbp-20h-8h]=[rbp-28h]

当然我这里在动态调试验证一下哈~~~

答案是非常鲜明的~因此我们可以大胆的写脚本了

2.exp 

注意写脚本的话如果直接从main函数提取的话要注意大小端和转义字符的问题,我在这里的转义字符这里坑了好久发现居然是不用转移直接复制的。。。

当然我是更喜欢直接动态调试直接提取的(这样就不用手打了,当然多了动态调试了)

#include<iostream>
using namespace std;
int main()
{
unsigned char a[] =
{
  ":\"AL_RT^L*.?+6/46"
};
unsigned char ida_chars[] =
{
  58, 34, 65, 76, 95, 82, 84, 94, 76, 42, 
  46, 63, 43, 54, 47, 52, 54
};
char b[8]={"harambe"};
int v=7;
for(int i=0;i<17;i++)
{
    
    printf("%c",b[i%7]^ida_chars[i]);
}
}

还要注意是17个哦~