-
-
CTF2019 第六题:消失的岛屿
-
发表于: 2019-6-10 17:38 2047
-
分析很简单,来水一把
首先看了程序是无壳程序,然后运行要求输入注册码,直接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
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
看原图
赞赏
雪币:
留言: