首页
论坛
专栏
课程

[原创]CTF2019_第一题_流浪者WriteUp

2019-3-20 04:19 320

[原创]CTF2019_第一题_流浪者WriteUp

2019-3-20 04:19
320

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);
	}



[招聘]欢迎市场人员加入看雪学院团队!

最新回复 (0)
游客
登录 | 注册 方可回帖
返回