• 下载下来的文件是一个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))
{
ªı_ = System.arraycopy(_ıª, 0, ªı_, 5, 5); boolean keyGuessWrong = true;
int ȥ = 0;
for (int ƶ = 0; ƶ < 4; ƶ++)
{
for (int ẓ = 0; ẓ < 4; ẓ++) {
if (和咊.charAt(ȥ + ẓ) != ªı_.charAt(Start.₪₪₪₪₪₪₪₪₪₪₪₪(ȥ + ẓ, ªı_))) {
keyGuessWrong = false;
}
}
ȥ += 5;
}
return keyGuessWrong;
}
return false;
}

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

  • 跟进Start.₪₪₪₪₪₪₪₪₪₪₪₪(ȥ + ẓ, ªı_) ,相关代码如下:

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()的值
  • 于是再分析字符串₢(即为传递的参数ªı_) , 发现ªı_ 是由ªı_ = System.arraycopy(ıª, 0, ªı, 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̤ʲʲÀΤ¨¸¬".toCharArray()) {
x = x + (char)(($ >> 1) + 15);
}
return x;
}

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

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

    x是由一段乱码vȾ¤ÊʬÆÆÊv̤ʲʲÀΤ¨¸¬ 中的每两位经过(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}

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

  1. 2017年陕西省网络空间安全技术大赛——种棵树吧——Writeup

    2017年陕西省网络空间安全技术大赛——种棵树吧——Writeup 下载下来的zip解压得到两个jpg图片,在Kali中使用binwalk查看文件类型如下图: 有两个发现: 1111.jpg 隐藏了一 ...

  2. 2017年陕西省网络空间安全技术大赛——一维码——Writeup

    <!doctype html> 2017年陕西省网络空间安全技术大赛——一维码——Writeup 先判断下载的文件flag.png确实是png格式的图片后(binwalk, file命令均 ...

  3. 陕西省网络空间安全技术大赛部分题目writeup

    签到-欢迎来到CSTC2017 10 欢迎来到CSTC2017 ZmxhZ3tXZWlTdW9GeXVfQmllTGFuZ30= Base64解密:flag{WeiSuoFyu_BieLang} 种棵 ...

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

    作为一个bin小子,这次一个bin都没做出来,我很羞愧. 0x00 拯救鲁班七号 具体操作不多说,直接进入反编译源码阶段 可以看到,只要2处的str等于a就可以了,而str是由1处的checkPass ...

  5. 2016第二届陕西省网络空间安全大赛WriteUp

    2016年5月28号(正式比赛) 有选择题和实践题,俩队员在弄选择题时,我去拿了web1的一血. 0x01 web 是一道代码审计题,发包,返回了源代码: <?php if (isset($_G ...

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

    题目在i春秋的ctf训练营 既然是上传,那就直接抓包 二话不说上来先给个00截断传个一句话助助兴 直接就成功了.... 赶紧操起菜刀去连接 进去之后发现ctf.sql是个空文件,那么flag应该在数据 ...

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

    一打开网址,可以看出应该是文件上传漏洞,查看源码,也有可能是文件包含 上传个图片,成功,然后上传一句话木马 通过bp进行上传绕过 , 开始菜刀连接http://e00b6eca3c9c4e14a31c ...

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

    进去提示有提示文件包含漏洞 拿到源码发现这里上传验证只有MIME验证 可直接抓包改 image/gif 绕过 接下来就是这次学到的点了 菜刀连接过后怎么都找不到flag文件,但是这里找到了数据库配置文 ...

  9. 2019寒假训练营寒假作业(二) MOOC的网络空间安全概论笔记部分

    视频课程--MOOC的网络空间安全概论笔记 第一章 网络空间安全概述 2001年,网络空间概念被首次提出: 网络空间安全框架: 1.设备层安全: 可通过截获电磁辐射获取计算机信息.通过硬件木马(恶意电 ...

随机推荐

  1. layui table 超出自动换行

    个人博客 地址:http://www.wenhaofan.com/article/20181120180507 layui 的table的的cell默认是超出hidden的,如果希望超出长度自动换行便 ...

  2. python3练习100题——029

    原题链接:http://www.runoob.com/python/python-exercise-example29.html 题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出 ...

  3. HDU1010 --- Tempter of the Bone(dfs+剪枝)

    小明做了一个很久很久的梦,醒来后他竟发现自己和朋友在一个摇摇欲坠的大棋盘上,他们必须得想尽一切办法逃离这里.经过长时间的打探,小明发现,自己所在的棋盘格子上有个机关,上面写着“你只有一次机会,出发后t ...

  4. 连接本地mysql报错

    报错信息如下: 原因为未启动本地mysql,没设置开机自启动.

  5. Java EE开发课外事务管理平台

    Java EE开发课外事务管理平台 演示地址:https://ganquanzhong.top/edu 说明文档 一.系统需求 目前课外兴趣培训学校众多,完善,但是针对课外兴趣培训学校教务和人事管理信 ...

  6. 第四篇,JavaScript面试题汇总

    JavaScript是一种属于网络的脚本语言,已经被广泛用于web实用开发,常用来为网页添加各种各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚本是通过嵌入在HTML中来实现 ...

  7. 开发板上如何配置apahe2+mysql+php7

    1,安装apache2 sudo apt-get install apache2 修改webroot vim /etc/apache2/apache2.conf #在其中复制最后一个 <Dire ...

  8. Java之字符串替换replace()

    replace(char oldChar, char newChar)返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的 import java.uti ...

  9. HTML的图像标签

    网页的图像标签 常见的图像格式 JPG GIF PNG BMP 图像标签可以带属性,格式为: <img src="path" alt="text" tit ...

  10. zabbix监控规划及实施

    一.规划监控拓扑 二.主机分组 例:交换机.Nginx.Tomcat.MySQL 三.监控对象识别: 1.使用SNMP监控交换机 a.交换机开启snmp config -t snmp-server c ...