-
-
CTF2019 第六题:消失的岛屿
-
发表于: 2019-6-10 17:38 2036
-
分析很简单,来水一把
首先看了程序是无壳程序,然后运行要求输入注册码,直接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
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
看原图
赞赏
雪币:
留言: