@TOC

Resmc

Smc动调即可,找到加密函数,恢复栈帧,即可看到加密函数,变异的base64

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
28
29
30
31
32
33
34
35
36
37
#include<stdio.h>
#include<string.h>
unsigned char a[100]={"H>oQn6aqLr{DH6odhdm0dMe`MBo?lRglHtGPOdobDlknejmGI|ghDb<4"};
unsigned char s[100]={ 0xE4, 0xC4, 0xE7, 0xC7, 0xE6, 0xC6, 0xE1, 0xC1, 0xE0, 0xC0,
0xE3, 0xC3, 0xE2, 0xC2, 0xED, 0xCD, 0xEC, 0xCC, 0xEF, 0xCF,
0xEE, 0xCE, 0xE9, 0xC9, 0xE8, 0xC8, 0xEB, 0xCB, 0xEA, 0xCA,
0xF5, 0xD5, 0xF4, 0xD4, 0xF7, 0xD7, 0xF6, 0xD6, 0xF1, 0xD1,
0xF0, 0xD0, 0xF3, 0xD3, 0xF2, 0xD2, 0xFD, 0xDD, 0xFC, 0xDC,
0xFF, 0xDF, 0x95, 0x9C, 0x9D, 0x92, 0x93, 0x90, 0x91, 0x96,
0x97, 0x94, 0x8A, 0x8E};
char q[100]={"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"};
int p[100];
int main(){
//int n=strlen(a);
//printf("%d ",n);
for(int i=0;i<56;i+=4){
a[i]^=0xa6;
a[i+1]^=0xa3;
a[i+2]^=0xa9;
a[i+3]^=0xac;
}

for(int i=0;i<56;i++){
//printf("%x ",a[i]);
for(int j=0;j<64;j++){
if(a[i]==s[j]){
printf("%d ",j);
p[i]=j;
}
}
}
for(int i=0;i<56;i++){
printf("%c",q[p[i]]);
}

return 0;
}

找到对应的顺序后,用base64解密即可

reverse1

key长度64位 sm3加密
爆破可以拿到key ,然后输入后文件自动加密即可拿到flag
在这里插入图片描述

1
2
3
4
5
6
7
8
9
10
11
from gmssl import sm3, func
from Crypto.Util.number import *
if __name__ == '__main__':
#key = long_to_bytes(0x32)
#print(key)
for i in range(33,127):
key2=long_to_bytes(i)
key = b'wel30m_t0_sm3!!!'+key2
y = sm3.sm3_hash(func.bytes_to_list(key))
print(y,chr(i))

2048小游戏

2048小游戏
玩2048 成功后有判断
在这里插入图片描述

Patch判断后 就可以到加密环节
把16格格的总和数作为参数参与加密 满足这个式子等于0x1a8cd即可拿到总和数
在这里插入图片描述

直接解密,发现数据太大,弄不出来
可以动调解密,这个式子是一个线性关系,夹逼即可
Patch掉动调和这里
在这里插入图片描述

不断尝试,8448成功过掉判断
后面的两个简单的加密 前四位和剩下的,动调可以拿到flag