2017年陕西省网络空间安全技术大赛——人民的名义-抓捕赵德汉2——Writeup

  • 下载下来的文件是一个jar包,用die和binwalk检查,确实是一个纯正的jar包

  • java -jar FileName运行jar包,观察文件的外部特征,发现也是判断password的题目

    ?

  • 用查看jar包的工具jd-gui查看反编译的代码
  • 大致浏览打码,发现UnitTests中的main函数很可疑,该段代码如下:

 public static void main(String[] args)
  {
    JFrame frame = new JFrame("Key check");
    JButton button = new JButton("Click to activate");

    button.addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent ae)
      {
        String str = JOptionPane.showInputDialog(null, "Enter the product key: ",
          "xxxx-xxxx-xxxx-xxxx", 1);
        if (????????????.???(str)) {
          JOptionPane.showMessageDialog(null, "Well done that was the correct key",
            "Key check", 1);
        } else {
          JOptionPane.showMessageDialog(null, "               Sorry that was the incorrect key \nRemember it is a crime to use software without paying for it",
            "Key check", 1);
        }
      }
    });

? 虽然我不懂java,但也大致能看出这是突破点,str为输入的字符串,且应为xxxx-xxxx-xxxx-xxxx形式 ,只需要让????????????.???(str)的返回值为1即可

  • 跟进????????????.???(str)函数

 public static boolean ???(String 和咊)
  {
    if ((和咊 != null) && (和咊.length() == 19))
    {
      a?_ = System.arraycopy(_?a, 0, a?_, 5, 5);

      boolean keyGuessWrong = true;
      int ? = 0;
      for (int ? = 0; ? < 4; ?++)
      {
        for (int ? = 0; ? < 4; ?++) {
          if (和咊.charAt(? + ?) != a?_.charAt(Start.????????????(? + ?, a?_))) {
            keyGuessWrong = false;
          }
        }
        ? += 5;
      }
      return keyGuessWrong;
    }
    return false;
  }

百度了charAt等函数的作用后,可以得到这段代码的逻辑

  • 跟进Start.????????????(? + ?, a?_) ,相关代码如下:

  public static int ????????????(int ?, String ?)
  {
    return ???(?) % ?.length();
  }

  private static int ???(int ?)
  {
    if (? > 2) {
      return ???(? - 1) + ???(? - 2);
    }
    return 1;
  }

可以看出这个函数的逻辑:

  • ???返回num[0] = num[1] = num[2] = 1的斐波那契数列
  • ????????????返回斐波那契数列模?.length()的值
  • 于是再分析字符串?(即为传递的参数a?_) , 发现a?_ 是由a?_ = System.arraycopy(?a, 0, a?, 5, 5); 产生的;

java中有名为System.arraycopy的函数,但跟进去System.arraycopy函数可以发现这里的System.arraycopy函数是出题者自己定义的,这是本题最大的坑点

  • 跟进System.arraycopy函数

public static String arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
  {
    return Start.main(null);
  }

--------------分割线-----------
   public static String main(String... args)
  {
    String x = "";
    for (int $ : "vè?¤êê???êvì¤ê2ê2à?¤¨??".toCharArray()) {
      x = x + (char)(($ >> 1) + 15);
    }
    return x;
  }

可以看出arraycopy函数是伪装成库函数的自定义函数,并且返回值与传递的参数无关,返回的x字符串是固定的

  • 根据百度到的java语法规则分析上段代码逻辑:

    x是由一段乱码vè?¤êê???êvì¤ê2ê2à?¤¨?? 中的每两位经过(char) ( (ch >> 1) + 15 )操作得来的,这段乱码转化成unicode格式为v\u00C8\u00BE\u00A4\u00CA\u00CA\u00AC\u00C6\u00C6\u00CAv\u00CC\u00A4\u00CA\u00B2\u00CA\u00B2\u00C0\u00CE\u00A4\u00A8\u00B8\u00AC

Help -> preference 中转化为unicode

着重解释为什么是每次去了两位:

Java中的编码规则是utf-8,每个字符占两个字节,int占四个字节,因此每次循环中,取了这段字符串中的4/2=2位,然后按照小端存储的规则,将取出的两位代入运算

大小端存储参考资料

http://www.cnblogs.com/WangAoBo/p/6369979.html

如果直接分析的话,在字节转化这里会遇到问题,当然这个问题可以用一种很直接的方法来解决,请拉倒文末。

  • 即可解题,由上述分析得到脚本:

    
    import sys
    key = ‘JsnatterrtJuaththovacke‘#unicode码经过处理后的字符串
    num = [1, 1, 1]
    
    for i in range(3,26):
    	num.append( num[i - 1] + num[i - 2] )
    	num[i] %= 23
    
    #print len(key)
    
    sys.stdout.write(‘flag{‘) #"flag{",
    Z = 0
    for a in range(4):
    	for b in range(4):
    		sys.stdout.write(key[ num[Z + b] ]) #key[ num[Z + b] ],
    
    	Z += 5
    
    	if Z != 20:
    		sys.stdout.write(‘-‘)# ‘-‘,
    
    sys.stdout.write(‘}‘) #‘}‘
    

    ?



这个题更直接的做法是像官方的Writeup一样直接利用逆出的java代码写脚本,这样就不用考虑字节之间、编码之间的转换问题了。

同时可用JD—GUI的src导出功能,用eclipse导入sec文件方便分析

附官方writeup脚本


public class test {
    //static String arr1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    //static String arr2 = "ZYXWVUTSRQPONMLKJIHGFEDCBA";
    public static void main(String args[]){
        String arr1 = "JsnatterrtJuaththovacke";
      for(int i=0;i<19;i++){
          if(i==4||i==9||i==14||i==19){
              System.out.print(‘-‘);
          }else{
              System.out.print(arr1.charAt(check(i,arr1)));
          }
      }
    }
    public static int check(int i,String arg){
        return te(i)%arg.length();
    }
    public static int te(int i){
        if(i>2){
            return te(i-1)+te(i-2);
        }
        return 1;
    }
}

最后得到flag为flag{sssn-trtk-tcea-akJr}

时间: 2024-10-16 21:53:57

2017年陕西省网络空间安全技术大赛——人民的名义-抓捕赵德汉2——Writeup的相关文章

2017年陕西省网络空间安全技术大赛WP

前言 为提高大学生的网络安全技术水平,培养大学生的团队协作能力,由陕西省兵工学会主办,西安工业大学承办的"2017年第三届陕西省网络空间安全技术大赛"即将于2017年4月15-16日进行线上初赛,2017年5月13日进行线下总决赛.文章为本次大赛第一名的队伍Mirage的writeup. web 签到题 直接源代码代码审计,php弱类型 然后第二关 构造 1 <?php class a{ var $key; } $b = new a(); $b->key=0; $c=jso

2017年网络空间安全技术大赛部分writeup

作为一个bin小子,这次一个bin都没做出来,我很羞愧. 0x00 拯救鲁班七号 具体操作不多说,直接进入反编译源码阶段 可以看到,只要2处的str等于a就可以了,而str是由1处的checkPass返回,于是进入checkPass函数. 从代码看,这是调用了so库里的函数,并且我们知道so库的名字叫humen 于是找到so库,拖进ida静态分析 找到checkPass函数,直接F5,通过分析,2中的代码最为关键 这段代码把我们输入的密码做了非常复杂的变换,变换后得到的字符串为[email pr

2016中国国际网络空间安全技术与设备博览会发展趋势

2016中国(上海)国际网络空间安全技术与设备博览会  China (Shanghai) international network space security technology and Equipment Expo2016  大会主题:"网络安全--健康发展"        时间:2016年11月1日-5日   地点:国家会展中心(上海市崧泽大道333号) 展会简介:         随着国家"互联网+"战略的推行,以云计算.物联网.大数据.智能制造为代表的

陕西省第三届网络空间技术大赛心得

有幸参加了这次线下awd模式的攻防赛,记录一下.自己参加过两次这种比赛,第一次是安徽省的蓝盾杯,当时比赛开始时一脸懵逼,不知道线下赛有如何的套路.被大佬们吊打了一路,扫出来端口却不知道可能存在的漏洞,(2049可能存在的nfs漏洞).web上的漏洞却没有权限利用.这次比赛没有通过扫端口上出现的服务漏洞,每个队有两台web服务器,一台opensns的cms,一台phpcmsv9.我负责的是第一个,我的另外两个师傅负责第二个,百度对应漏洞,只找到openssns一个是前台getshell的,但是利用

第三届“百越杯”福建省高校网络空间安全大赛writeup--Do you know upload?

一打开网址,可以看出应该是文件上传漏洞,查看源码,也有可能是文件包含 上传个图片,成功,然后上传一句话木马 通过bp进行上传绕过 , 开始菜刀连接http://e00b6eca3c9c4e14a31cf6ce409fab9006d33f25aeda472e.game.ichunqiu.com/upload/2.php,密码为a 发现有ctf.sql,but打不开,所以用数据库管理 用户名密码在config.php中 原文地址:https://www.cnblogs.com/ls-pankong/

2019-2020-1学期 20192403 《网络空间安全专业导论》第八周学习总结

2019-2020-1学期 20192403 <网络空间安全专业导论>第八周学习总结 第一章 学习收获 生活中常见的网络空间安全问题:账号密码被盗.信用卡被盗刷 工作中常见的网络空间安全问题 网络设备面临的威胁:路由器是企业内部网络与外界通信的出口,掌握了路由器就掌握了控制内部网络访问外部网络的权利. 操作系统面临的威胁:操作系统本身有漏洞.黑客用非法手段获取操作系统权限. 应用程序面临的威胁 数据安全包括:数据安全.数据存储与备份 网络空间安全技术架构:物理安全.网络安全.系统安全.应用安全

【影视系列】盘点《人民的名义》

本文地址 原文地址--微信 点击关注 微信公众号 终于把<人民的名义>这部热播的反腐大剧看完了,还有点意犹未尽的感觉,脑海里还是汉东官场的模样,也想起来跟大家絮叨絮叨,分享一下了. 名义·强大演员阵容 故事情节 故事讲述了最高人民检察院反贪总局侦查处处长侯亮平代理汉东反贪局长,在汉东官场展开了一场查办贪腐案件的惊心动魄的大戏. 名义·反贪侯亮平办案    1)帮派 在汉东省政坛,以汉东省委副书记.政法委书记高育良为代表的“政法系”,以汉东省委常委.京州市委书记李达康为代表的“秘书帮”相争多年,

「2017年教育部-永信至诚产学合作协同育人网络空间安全专业课程教学研讨会」参会总结

「2017年教育部-永信至诚产学合作协同育人网络空间安全专业课程教学研讨会」参会总结 网络空间安全导论 欢迎关注"rocedu"微信公众号(手机上长按二维码) 做中教,做中学,实践中共同进步! 原文地址:http://www.cnblogs.com/rocedu/p/7898629.html](http://www.cnblogs.com/rocedu/p/7898629.html) 推荐网站:博客园.新浪微博.扇贝背单词.DKY背单词小组.有道云笔记.豆瓣读书 版权声明:自由转载-非

蓝盾杯网络空间安全攻防对抗大赛小记

9月17日带队在山东大学软件学院参加了山东省第六届蓝盾杯网络攻防对抗大赛,这是第一次参加蓝盾杯的比赛,本来只是想去实战练兵,没想到竟然拿了一等奖,确实有些意料之外的惊喜. 这次比赛分为挑战赛和对抗赛两个环节,挑战赛是标准的CTF试题,比如Web.逆向.隐写等等,这些内容基本都与高职的技能大赛没什么关系,因而只在考试的前两天才安排学生临阵磨了下枪,这部分的比赛结果也挺糟糕,30道题目只做出了2道. 我们重点准备参与的是对抗赛,所有对抗赛的模式基本都大同小异,一方面要加固自己的靶机,同时要攻击别人的