引言
本次分享PolarCTF靶场中所有[easy]re题目的WP。
由于文章篇幅较长(一共有22道题目),分为两期发表,本期先分享上半部分内容,适合刚接触逆向的朋友。如果你也对逆向感兴趣,或者正在准备CTF比赛,希望这些内容能给大家一些帮助。
发现是Aspack壳,用工具脱壳:
32位:用IDA打开。直接shift+f12发现关键字符“Enter password:”
直接跟进函数看看:
-
关键函数:
sub_401738
。继续跟进去看看:-
大概逻辑就是:
input
逐个和0xC
进行异或,然后和Str2
进行比较 -
所以
input = Str2 ^ 0xC
-
Str2 = >4i44oo4?i=n>:m;8m4=oo4i;>?4>h9m
编写解密脚本:
int main() {
char str[] = ">4i44oo4?i=n>:m;8m4=oo4i;>?4>h9m";
for (int i = 0; i < 32; i++) {
str[i] ^= 0xC;
}
printf("%s", str);
return 0;
}
// 28e88cc83e1b26a74a81cc8e72382d5a
查壳发现是NsPack,用工具脱壳:
32位,用IDA打开。直接搜索函数,找到main
函数:
很长,但实际上很简单,步骤大概是:
-
和几个数组逐个进行比较,且异或不同的数
-
例如第一个
for
循环,input[i]
和aNqt[i] ^ 0xBu
的结果进行比较 -
第二个
for
循环,input[i+len(aNqt)]
和aKixs[i] ^ 0xCu
的结果进行比较 -
...
-
aNqt = nqT
-
aKixs = kixS
-
aKa9jr = ka9jR
-
aHCq = h|>cQ
-
aG = g<}<
编写解密脚本:
int main() {
char str1[] = "nqT";
char str2[] = "kixS";
char str3[] = "ka9jR";
char str4[] = "h|>cQ";
char str5[] = "g<}<";
for (int i = 0; i < sizeof(str1)-1; i++) {
str1[i] ^= 0xBu;
}
printf("%s", str1);
for (int i = 0; i < sizeof(str2) - 1; i++) {
str2[i] ^= 0xCu;
}
printf("%s", str2);
for (int i = 0; i < sizeof(str3) - 1; i++) {
str3[i] ^= 0xDu;
}
printf("%s", str3);
for (int i = 0; i < sizeof(str4) - 1; i++) {
str4[i] ^= 0xEu;
}
printf("%s", str4);
for (int i = 0; i < sizeof(str5) - 1; i++) {
str5[i] ^= 0xFu;
}
printf("%s", str5);
return 0;
}
//ez_get_fl4g_fr0m_h3r3
// 需要md5 32位小写加密后再提交
查壳发现是upx
工具脱壳:upx -d [FilePath]
32位,IDA打开,shitf+F12
发现关键字符串。跟进去看看
F5反编译直接看到!
不是PE文件?根据题目,大概可以猜到,是想让我们修复PE结构。winhex打开看看
上来就发现不是MZ!notepad++修改一下(别问为什么不是winhex,notepad用起来顺手一点QAQ)
再打开,发现OK了。
直接运行试试:
32位,直接用IDA打开,发现脸上就是main函数,手直接就挪F5上了啊!
嗯······这拼接在,嗯。哈哈。
32位,IDA打开。main函数又在脸上,直接F5:
看眼逻辑:input
每位都--
,然后与str2
进行比较。
所以str2
每位都++
,就是flag
int main() {
char str2[] = "ek`fz5123086/ce7ac7/`4a81`6/87b`b28a5|";
for (int i = 0; i < strlen(str2); i++) {
str2[i]++;
}
printf("%s", str2);
return 0;
}
upx壳,工具脱掉:
32位,因为是注册机,所以先运行看看:
跟进去发现关键:
pawd会被打印,所以可以x64嗯调到打印的地方? 哦不行,试了一下发现,只会打印输入的东西,还是得自己对照QAQ
复制下来试试:
int main() {
char v11[20];
v11[0] = 'C';
v11[15] = 'X';
v11[1] = 'Z';
v11[14] = 'A';
v11[2] = '9';
v11[13] = 'b';
v11[3] = 'd';
v11[12] = '7';
v11[4] = 'm';
v11[11] = 'G';
v11[5] = 'q';
v11[10] = '9';
v11[6] = '4';
v11[9] = 'g';
v11[7] = 'c';
v11[8] = '8';
v11[16] = '
评论