附件下载,拖进查壳工具
Aspack壳,拖进x32dbg手动脱壳
在call处内存访问下硬件访问断点,f9找到popad,基本上就离oep不远了
脱壳,拖进ida
查看第一个if条件中的sub_CD11F0函数
长度为二的倍数,且处于0到9,A到F之间;
接着查看sub_CD1240函数
这个函数比较重要所以逐步分析:
第一个if判断长度是否为零,如果不是零就判断字符是否在0到9或者A到F的范围内,内部操作-55:例如A的ascll码值为65,所以A到F可以转化为10到15,符合十六进制,所以函数是转十六进制
下一个if内容和这个一样, v3 += 2;可以判断出v5,v6是数组中相邻的两个元素
v7 = (unsigned int)v3 >> 1;右移两位相当于除以2,v7是每组v5v6的索引
v11[v7 - 1] = v4 | (16 * v9);
:这一行计算了两个字符转换后的十六进制数,并将其存储到数组 v11
中。
重点是返回值sub_CD1000
dword_CD203C(v22, (unsigned __int8)byte_CD3020[(unsigned __int8)*(&v17 + i)] ^ 0x76);
提取byte_CD3020数组中的元素,与0x76异或可得base64原表
基本可以判断这个函数的base64加密。
解密脚本
提取x后的内容
adebdeaec7be
转成大写加上flag前缀就好