-
-
[原创]CTF2019_第一题_流浪者WriteUp
-
2019-3-20 04:19 2199
-
CTF2019_第一题_流浪者WriteUp
1 工具
OD:逆向分析
Eclipse:
编写解密代码
2 分析
a 丢入OD,直接搜索字符串,如图:
经过测试,KanXueCTF2019JustForhappy及abcdefghi...都不是key;
b F8向后跳,输入测试字符串“123456”找到提示错误之前的判断位置,如图:
发现程序是通过一个函数strcmp进行字符串对比,来判断对错的,这时可以查看寄存器如下图,发现进行对比的字符串为
KanXueCTF2019JustForhappy和bcdefg,而bcdefg不是我输入的内容,所以程序一定有地方对输入进行了转码,后又输入“123456789”、“abcdefg”等测试,发现程序是通过将输入的字符串在“abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ”字符串中进行对应位置的替换来进行编码的。
对应关系为:输入:0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
输出:
abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ
3 解密
在已经知道编码规则和目标字符串的基础上,直接编码实现:
public static void main(String[] args) { String sour="KanXueCTF2019JustForhappy"; String str1="abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ"; String str2="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; String des=""; for(int i=0;i<sour.length();i++) { String x=sour.substring(i,i+1); for(int j=0;j<str1.length();j++) { if(str1.substring(j,j+1)==x||x.equals(str1.substring(j,j+1))) { des=des+str2.substring(j,j+1); break; } } } System.out.println(des); }
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。
赞赏
看原图