网站制作的销售对象,李沧网站建设,做美食软件视频网站有哪些,手机发博客wordpressREVERSE-PRACTICE-CTFSHOW-1逆向签到题re2逆向4逆向5逆向签到题
ida打开即可得到明文flag
re2
附件是一个加密过的flag文本和勒索病毒exe 运行程序#xff0c;输入1#xff0c;回车#xff0c;直接退出#xff0c;ida分析 选项1的逻辑为#xff0c;打开flag.txt和enfl…
REVERSE-PRACTICE-CTFSHOW-1逆向签到题re2逆向4逆向5逆向签到题
ida打开即可得到明文flag
re2
附件是一个加密过的flag文本和勒索病毒exe 运行程序输入1回车直接退出ida分析 选项1的逻辑为打开flag.txt和enflag.txt要求输入正确的密钥然后使用密钥对明文flag进行RC4加密密文写到enflag.txt 分析check_key部分简单的异或运算和比较 写脚本可得到密钥
sDH~mqqvqxB^||zllJq~jkwpmvez{
key
for c in s:keychr(ord(c)^0x1f)
print(key)
#[Warnning]Access_Unauthorized程序用密钥对明文flag进行RC4加密现已知密文和密钥写RC4解密脚本即可得到flag
#includestdio.h
void rc4_init(unsigned char* s, unsigned char* key, unsigned long Len_k) //初始化函数
{int i 0, j 0;char k[256] { 0 };unsigned char tmp 0;for (i 0; i 256; i) {s[i] i;k[i] key[i % Len_k];}for (i 0; i 256; i) {j (j s[i] k[i]) % 256;tmp s[i];s[i] s[j];s[j] tmp;}
}
void rc4_crypt(unsigned char* Data, unsigned long Len_D, unsigned char* key, unsigned long Len_k) //加解密
{unsigned char s[256];rc4_init(s, key, Len_k);int i 0, j 0, t 0;unsigned long k 0;unsigned char tmp;for (k 0; k Len_D; k) {i (i 1) % 256;j (j s[i]) % 256;tmp s[i];s[i] s[j];s[j] tmp;t (s[i] s[j]) % 256;Data[k] Data[k] ^ s[t];}
}
void main()
{unsigned char key[] [Warnning]Access_Unauthorized;unsigned long key_len sizeof(key) - 1;unsigned char data[] { 0xC3,0x82,0xA3,0x25,0xF6,0x4C,0x36,0x3B,0x59,0xCC,0xC4,0xE9,0xF1,0xB5,0x32,0x18,0xB1,0x96,0xAe,0xBF,0x08,0x35};rc4_crypt(data, sizeof(data), key, key_len);for (int i 0; i sizeof(data); i){printf(%c, data[i]);}printf(\n);return;
}
//flag{RC4-ENc0d3F1le}逆向4
exe程序要求输入正确的数字ida分析 静态看不明白起调试 可以看到输入作为第一个参数传入了sub_7FF62E5010E0函数 F7步入sub_7FF62E5010E0函数先分析第一部分 21行和22行合并后可以理解为输入的数字对26取余余数作为下标在一个table里取值然后输入的数字除以26得到新的数字再用新的数字对26取余余数作为下标在table取值以此类推直到最后的数字除以26为0终止取出的值放到一块连续的内存 然后分析第二部分 index是上面取出的值的数目也就是说v7是从高地址向低地址依次取值的 因为上面先用余数作的下标再做的除运算于是每次取出的值可以理解为是按输入的数字的较小的部分取出的 暂时忽略在table里取值这一步实际上就是小值存储在小地址小端序的特点 v7依次取值和7异或一下结果存储到一块内存 sub_7FF62E501220函数是check的部分最后要比较的字符串是明文可知的每次循环比较两个字符 最后写脚本即可得到正确的输入数字
table)(*^%489$!057#:2163qwe
ans/..v4p$$!Y59-
ans_s
for c in ans:ans_schr(ord(c)^7)
print(ans_s)
num0
for c in ans_s:num * 26indextable.find(c)numindex
print(num)
#())q3w##9^2*
#2484524302484524302逆向5
附件是一个dll和一个exeexe运行直接弹窗点击确定后直接退出ida分析 main-sub_4015BD 可以看到这里判断Str[1]是否等于1而Str是给定的明文且Str[1]!1于是这个判断不成立 分析sub_401520函数这里加载了另一个附件1.dll然后找到了H 循环体中依次取Str中的值然后作为参数传入H 最后sub_40163E函数里有个putchar打印H处理Str[i]后的内容 因为之前Str[1]!1所以不会执行sub_401520函数 起调试停在那条if语句处在执行jnz之前把ZF标志为由0改为1 修改后在下图所示语句处下断点F9运行到此处再F8执行sub_40163E函数即可在黑窗看到flag