GHCTF2024 reverse wp
CS1.6
以前遇到的C#都是unity游戏的类型,这是第一次看到编译成exe的
这里用ilspy比dnspy好用
运行之后出现提示

搜索'失败'

拿到密文之后CyberChef竟然可以直接出

Ez_asm
感觉magic_flag2函数有点奇怪
magic_flag1 是异或0x17
magic_flag3 是加索引
magic_flag2 有一个判断,if (flag[i] == 36 + i) flag[i] += i
在逆向的时候我觉得应该是if(36+i==a[i]-i)这样判断的,但这样不行
验证了一下
加密逻辑:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char flag[] = "NSSCTF{ASM_In_Rev3rs3_i3_e333z333}";
for(int i=0;i<36;i++){
flag[i] ^= 0x17;
if(36+i==flag[i]) flag[i]+=i;
flag[i]+=i;
printf("%d,",flag[i]);
}
}//89,69,70,87,71,86,114,93,76,99,82,105,-123,85,83,-127,113,53,119,119,56,93,-108,59,96,-117,62,63,64,-118,66,67,68,-117,57,8
解密逻辑:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int a[] = {89,69,70,87,71,86,114,93,76,99,82,105,133,85,83,129,113,70,119,119,76,93,148,82,96,139,88,90,92,138,96,98,100,139,34};
for(int i=0;i<36;i++){
a[i]-=i;
int m = 36+i;
if(a[i]==m) a[i]-=i;
printf("%c",(a[i])^0x17);
}
}//NSSCTF{ASM_In_Rev3rs3_i3_e333z333}
所以说确实题目有点问题

浙公网安备 33010602011771号