roger 发表于 2020-4-22 16:11:51

xuenixiang_2018_re_Reverse5

### 题目:cut

##### 前言:这题是自己当时敲了2个钟C语言,搞出来的,是用于校赛招新小朋友的,因为要检测测试,还找人试着解了下,OK,起函数名有些头疼,就随意些啦,哈哈哈,莫见怪。

#### 开始分析:

首先拖进ida分析一波:

!(?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

v7是我们的输入,然后可以改写成input,memset初始化不管,重点函数就是_substr666,0x233333和0x666666,还有0x8048000(嗯,认真点),v4是判断条件,看v4如果是1,就是成功congratulation,0就是失败tryagain~把v4改成check,于是:

!(?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

这样就舒服些,首先进去_substr666看看是干嘛的,因为对input进行了操作:

!(?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

a3是0,a4是6,a1是新申请的空间,看for循环,判断出是个复制函数,把input输入中下标从0到5的6个字符填充到a1中存起来,很清晰,这样就很清晰了,_substr666(存储数组,输入,起始下标,长度),就是个字符串裁剪函数嘛,于是很快懂了,substr666(v8, &input, 0, 6);substr666(v14, &input, 6, 1); substr666(v11, &input, 7, 6);就是把输入切割成了三段分别存到v8,v14和v11中。

接下来看if判断可以知道,要让check为1,那么3个if要同时满足条件,而且是对我们的输入切片进行处理的~

#### 先进第一关:

!(?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

看到又是substr666这个切片函数,这次是str字符,我们去把它取出来:

!(C:\Users\12192\AppData\Roaming\Typora\typora-user-images\1552386666634.png)

str = vosng%_Ngemkt,看逻辑就是说对str切6个字节,下标从7开始,复制到s2中,然后分别对6位输入进行异或加密,存到s1中,比较s1和s2,相同即可,我们知道异或是可以解密的,这里不难。

#### 进入第二关:

!(?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

这里很明显,就是把str的前面6个字节放到s再放到a2中,然后把输入进行加密存到v7中(简单的加减法加密),最后比较a2和v7的每一位,6位都相同即可,逆向的话也OK。

#### 最后第三关:

!(?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

简单,就是判断第7个字符是不是等于“_”

这样解密脚本就可以写出来了,如下:

```c++
#include<iostream>
#include<cstring>
using namespace std;
//str = {vosng%_Ngemkt}
int main()
{
char input1 = {""};
char input2 = {""};
char input3 = {""};
char a = {"vosng%"};
char b = {"Ngemkt"};

for(int i = 0;i<strlen(b);i++)
{
      input1 = char(int(b^2)-4);
}
input2 = '_';
for(int i = 0;i<strlen(a);i++)
{
      input3 = char(int(a)+1-i);
}

cout<<input1<<input2<<input3;
return 0;
}
```

跑出来是这个:

!(?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

我们去试试对不对吧:

!(?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

正确,再加个前缀,那么这一道题就完事了:

flag{Hacker_world!}**** Hidden Message *****
页: [1]
查看完整版本: xuenixiang_2018_re_Reverse5