-
-
CTF2019 第六题:消失的岛屿
-
发表于: 2019-6-10 17:38 2262
-
分析很简单,来水一把



首先看了程序是无壳程序,然后运行要求输入注册码,直接IDA 加载程序定位到main函数,直接F5代码很清晰

看代码结构就是,输入的注册码,在base64编码以后直接跟字符串 !NGV%,$h1f4S3%2P(hkQ94== 比较,如果相同都成功,否则失败
但是看这个字符串好奇怪,在正常base64中不可能出现%,( 这类字符,所以这个base64肯定有问题(或者只是替换了表呢/偷笑)
双击进入 base64_encode 函数,发现流程都跟base64正常一样,其中 charEncrypt 特别奇怪,所以再进去分析 :

代码同样很清晰,其中 替换表 为:
aTuvwxtulmnopqr db 'tuvwxTUlmnopqrs7YZabcdefghij8yz0123456VWXkABCDEFGHIJKLMNOPQRS9+/',0
在base64替换编码以后又字符串又重新加减了一下,所以写个程序反过来倒退即可:
#include <stdio.h>
int main()
{
char buf[] = {"!NGV%,$h1f4S3%2P(hkQ94"};
for (int i=0; i<strlen(buf); i++)
{
char ch = 0;
if (buf[i]>=0x21 && buf[i]<=0x41)
{
ch = buf[i]+64;
}
else if (buf[i]>=0x41 && buf[i]<=0x5A)
{
ch = 155 - buf[i];
}
else if (buf[i]>=0x62 && buf[i]<=0x6B)
{
ch = buf[i]-50;
}
else if (buf[i]=='w')
{
ch = '+';
}
else if (buf[i]=='y')
{
ch = '/';
}
printf("%c", ch);
}
printf("\n");
} 结果得到字符串: aMTEeld6q4tHserKh69Jyt
最后,再用一个可以修改编码表的base64工具还原即可(其中替换表为
tuvwxTUlmnopqrs7YZabcdefghij8yz0123456VWXkABCDEFGHIJKLMNOPQRS9+/):

至此,就得到了最终注册码为: KanXue2019ctf_st
[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!
赞赏
赞赏
雪币:
留言: