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;
}
}
|
程序流程
- 先将temp输入的值 取了4个放入a数组中 最后一位为13
- 第一个for循环为 key[i]**(i+1) 将自身进行次方
- 第二个for循环进行将输入的flag进行分成9组 然后和上面的key进行 相乘然后将 五个字符乘完的结果相加
- 最后与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 这样的有很多
谷歌搜索 exe4j 可以知道是一个jar-》exe的转换工具
直接去%TEMP%下找到 解出来的 jar包 打开即为flag