流浪者

流浪者

admin 2019年5月31日

搜索字符串发现pass!,ida定位:

定位到sub_401890函数:

如图示,可见他把输入的字符串进行了处理,处理方式为0-9减去48,a-z减去87,A-Z减去29,分别对应0-9,10-35,36-61

我们进入sub_4017F0:

分析可知:字符串处理后的数字序列作为了aAbcdefghiabcde这个的下标,最后将提取出来的字符与KanXueCTF2019JustForhappy字符串传进行比较。

破解代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* p = "abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ";
char* p0 = "KanXueCTF2019JustForhappy";
int find(char index) {
for (int i = 0; i < strlen(p); i++) {
if (index == p[i])
return i;
}
return -1;
}
int* find_malloc(void) {
int* q = malloc(1024);
for (int i = 0; i < 1024; i++)
q[i] = -1;
for (int i = 0; i < strlen(p0); i++) {
q[i] = find(p0[i]);
}
return q;
}
void decrypt() {
int* q = find_malloc();
for (int i = 0; q[i] != -1; i++) {
if (q[i] >= 0 && q[i] <= 9) {
printf("%c", (char)q[i] + (char)48);
}
else if (q[i] >= 10 && q[i] <= 35) {
printf("%c", (char)q[i] + (char)87);
}
else {
printf("%c", (char)q[i] + (char)29);
}
}
free(q);
}
int main() {
decrypt();
return 0;
}`

linux下运行此代码正常得到flag—->j0rXI4bTeustBiIGHeCF70DDM

windows下vs2019中断出错,有毒!!!!

发表评论

电子邮件地址不会被公开。 必填项已用*标注