Contents

【CTFSHWO_月饼杯_re】re

re

re1._西北望乡

64 位 无壳

因为比较简单就 直接看汇编 逆出来

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
_arr={11377526307,11291274669,10667335421,12105207237,12005384512,10853488462,12005544354,10651566902,5399147315,11333307};
char c[]="mm";  //输入的flag
int x[];
int key[5];
key[0]=c[3];
key[1]=c[6];
key[2]=c[13];
key[3]=c[36];
key[4]=13;
for(int i=0;i<5;i++){
    int temp1=1;
    for(int j=0;j<5-i;++j){
        key[4-i]*=temp1;
        temp1=key[4-i];
    }
    key[i]=temp1;
}
for(int i=0;i<9;i++){
    temp3=0;
    for(int j=0;j<5;j++){
        key[j]=c[i*5+j]*key[j] +temp3;  
        temp3=key[j];
    }
    if(temp3!=arr[i]){
        break;
    }

}

程序流程

  1. 先将temp输入的值 取了4个放入a数组中 最后一位为13
  2. 第一个for循环为 key[i]**(i+1) 将自身进行次方
  3. 第二个for循环进行将输入的flag进行分成9组 然后和上面的key进行 相乘然后将 五个字符乘完的结果相加
  4. 最后与arr数组进行对比

解密流程

由于flag由"flag{“开头 可以爆破的到key 然后再用key继续爆破后续 内容

脚本:

 0
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import string
dic=string.ascii_lowercase+'_'+string.ascii_lowercase+string.digits #字典
arr=[11377526307,11291274669,10667335421,12105207237,12005384512,10853488462,12005544354,10651566902,5399147315,11333307]

x=[13,'e','e','k','g']
y=""
for i in arr:
    for x1 in dic:
        for x2 in dic:
            for x3 in dic:
                for x4 in dic:
                    for x5 in dic:
                        temp=(ord(x1)*13**5+ord(x2)*ord(x[1])**4+ord(x3)*ord(x[2])**3+ord(x4)*ord(x[3])**2+ord(x5)*ord(x[4])**1)
                        if(temp==i):
                            print(x1,x2,x3,x4,x5)

RE2.归心

无壳 64位 ida 打开 查看字符串 发现字符串为 exe4j.unextractedPosition 这样的有很多 https://s2.loli.net/2023/08/27/7Vf8oR3TGNlMiUa.png 谷歌搜索 exe4j 可以知道是一个jar-》exe的转换工具

直接去%TEMP%下找到 解出来的 jar包 打开即为flag