2017年陕西省网络空间安全技术大赛Mobile部分WriteUp

中职高职网络空间安全python题目源码 高职的也有 但是包含的不算多 包含: 端口扫描,arp dos,arp欺骗,arp数据监控,dic字典,dos land,ftp连接,mac地址泛红,mssql爆破,PCAP数据监控,ping扫描,socket远连,ssh连接,tcpdos 立即下载

0x0 拯救鲁班七号

载入jeb,在Mainactivity里面可以看到程序将输入放到checkPass函数中验证

 protected void onCreate(Bundle arg3) {
        super.onCreate(arg3);
        this.setContentView(2130903040);
        this.findViewById(2131165184).setOnClickListener(new View$OnClickListener() {
            public void onClick(View arg4) {
                MainActivity.this.checkPass(MainActivity.this.findViewById(2131165185).getText().toString().trim());
            }
        });
    }

在这个checkPass函数里面会调用CheckUtil的checkPass函数验证是否正确,此函数为humen.so文件中的函数,将humen放到ida中进行分析。无用代码比较多,下面只将关键代码发出来。

length = strlen(input);
  while ( 1 )
  {
    v23 += 2;
    if ( length <= v23 )
      break;
    v7 = input[v23 - 2];
    input[v23 - 2] = input[v23 - 1];
    v8 = 0;
    input[v23 - 1] = v7;
    if ( length > 4 )
    {
      for ( i = 4; ; i += 4 )
      {
        v10 = (char *)&input[v8];
        v9 = v10;
        v11 = *v10;
        v10 += 4;
        *v9 = *v10;
        *v10 = v11;
        v8 = i;
        if ( length <= i + 4 )
          break;
      }
    }
  }
 v14 = (&t_ptr)[v4 - 12208];
  v15 = 0;
  if ( *input == *v14 )
  {
    do
      v16 = v14[v15++ + 1];
    while ( input[v15] == v16 );
  }

程序将输入的字符串奇数和偶数做交换并且前八位的0,4,8,位分别与4,8,12,做交换,最后与t进行比较,直接附上脚本。

stt="S!@#@1FD23154A34"
st=list(stt)
v6=len(st)
for j in range(14,0,-2):
    if v6>4:
        for i in range(12,1,-4):
            st[i-4],st[i]=st[i],st[i-4]
    st[j-1],st[j-2]=st[j-2],st[j-1]

flag=''
for i in range(len(st)):
    flag+=st[i]
print flag

0X1 The Marauder’s Map

依照惯例,拖进jeb分析。发现和数据库有关,最近刚好了解了一下安卓连接数据库,只能说好巧。

package com.example.icontest;

public class ReadSe {
    private boolean a;

    static {
        System.loadLibrary("test");
    }

    public ReadSe() {
        super();
        this.a = false;
    }

    public final boolean a(String arg3, String arg4) {
        boolean v0 = false;
        if(arg3 != null && arg3.length() > 0 && arg4 != null && arg4.length() > 0 && (arg4.equals(this.readbin(arg3)))) {
            v0 = true;
        }

        return v0;
    }

    private native String readbin(String arg1) {
    }
}

代码简单明了,将readbin函数的返回值与arg4进行比较,arg4为user数据库中读到的id为2的生日列。

 public a() {
        super();
        this.a = "";
        this.b = "dGVzdA==";
        this.c = "WWVhaH4h";
        this.d = "dXNlcnM=";
        this.e = "Mg==";
    }

    public final String a(Context arg10) {
        String v0 = a.a(this.b);
        String v1 = a.a(this.d);
        a.a(this.c);
        String v6 = a.a(this.e);
        SQLiteDatabase v0_1 = new b(arg10, v0, null, 1).getReadableDatabase();
        Cursor v1_1 = v0_1.query(v1, new String[]{"userid", "age", "birthday", "id"}, "id=?", new String[]{v6}, null, null, null);
        while(v1_1.moveToNext()) {
            v1_1.getString(v1_1.getColumnIndex("userid"));
            v1_1.getString(v1_1.getColumnIndex("age"));
            this.a = v1_1.getString(v1_1.getColumnIndex("birthday"));
        }

        v0_1.close();
        return this.a;
    }

    private static String a(String arg3) {
        return new String(new String(Base64.decode(arg3.getBytes(), 0)).toCharArray());
    }
}

数据库可以通过sqlitebrowser软件查看。
然后,我们分析一下readbin函数,
关键代码在sub_1220()中

 s = (char *)a1;
  v7 = strlen(a1);
  v5 = 0;
  v6 = 0;
  src = (char *)operator new[](2 * v7 + 1);
  do
  {
    v1 = (unsigned __int8)s[v5];
    src[v6] = sub_1078(~(_BYTE)v1 & 0xF);
    v2 = v6 + 1;
    src[v2] = sub_1078((v1 >> 4) ^ 0xE);
    ++v5;
    v6 = v2 + 1;
  }
  while ( v5 < v7 );
  src[2 * v7] = 0;
  strncpy(s, src, 2 * v7 + 1);
  return s;

代码如上,只能说算法还是挺简单的
将输入的每一位经过运算化为src的两位,然后返回得到的字符串。
逻辑大概就是这样,flag可以经过爆破得出,直接上脚本。

s="9838e888496bfda98afdbb98a9b9a9d9cdfa29"
st=list(s)
def subl(a):
    v1=0
    if(a>9 or a<0):
        if(a<=9 or a>15):
            v1=255
        else:
            v1=a+87
    else:
        v1=a+48
    return v1
print len(s)
key=""
for i in range(0,38,2):
    for j in range(32,128):

        if subl(~j&0xF)==ord(st[i]) and subl((j>>4)^0xE)==ord(st[i+1]):
            key+=chr(j)
            break;
print key

0x2取证密码

输入在GetString.encrypt函数里面进行验证,encrypt为XTU.so文件的函数,代码如下

v3 = a1;
  _JNIEnv::NewStringUTF(a1, "yInS567!bcNOUV8vwCDefXYZadoPQRGx13ghTpqrsHklm2EFtuJKLzMijAB094W");
  _JNIEnv::NewStringUTF(v3, "Welc0meT0XTUCTF");
  v4 = (const char *)_JNIEnv::GetStringUTFChars((int)v3);
  str = (const char *)_JNIEnv::GetStringUTFChars((int)v3);
  input = (char *)_JNIEnv::GetStringUTFChars((int)v3);
  v7 = j_j_strlen(v4);
  v8 = j_j_strlen(str);
  temp = (char *)j_operator new[](v7 + 1);
  v10 = (char *)j_operator new[](v8 + 1);
  v11 = j_j_strlen(input);
  v15 = (char *)j_operator new[](v11 + 1);
  j_j_memcpy(&dest, &unk_2018, 0x3Cu);
  j_j_strcpy(temp, v4);
  j_j_strcpy(v10, str);
  j_j_strcpy(v15, input);
  for ( i = 0; i < j_j_strlen(v4); ++i )
    temp[i] = v10[*((_DWORD *)&dest + i)];
  v13 = 0;
  while ( (unsigned __int8)v15[v13] == (unsigned __int8)temp[v13] )
  {
    if ( ++v13 == 15 )
      return 1;
  }
  return 0;

看见这个代码开始我是蒙逼的,,找不到代表输入的临时变量是哪个,,
只能大胆的猜测,v15既input为输入,str为yInS567!bcNOUV8vwCDefXYZadoPQRGx13ghTpqrsHklm2EFtuJKLzMijAB094W,取dest的值作为str的下标赋值给temp,然后与input进行比较,脚本如下。

s="yInS567!bcNOUV8vwCDefXYZadoPQRGx13ghTpqrsHklm2EFtuJKLzMijAB094W"
dest=[0x39,0x20,7,0xA,0x20,0x29,0x13,2,0x3A,0xC,0x11,0x31,0x3B,0xB,7]
s=list(s)
flag=""
for i in range(len(dest)):
    flag+=s[dest[i]]
print flag

没想到真的是这样,,getflag。

0x3 人民的名义-抓捕赵德汉1

由于是jar文件,所以直接用jd-gui软件打开。
将输入的字符串载入checkPassword函数验证。
无用代码比较多,差点就被迷惑了~~

将输入的字符串进行md5加密,然后与fa3733c647dca53a66cf8df953c2d539进行比较。
由于以前做的md5加密的题比较多,这个题还挺简单的。
将fa3733c647dca53a66cf8df953c2d539解密md5即可。

0x4 人民的名义-抓捕赵德汉2

程序载入jd-hui后乱码比较多,这个题难度比上一个题提升了不少。

 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);
        }
      }
    });
    JPanel panel = new JPanel();
    panel.add(button);
    frame.add(panel);
    frame.setSize(300, 100);
    frame.setDefaultCloseOperation(3);
    frame.setVisible(true);
  }
}

这里需要注意的一点就是,输入是以xxxx-xxxx-xxxx-xxxx格式进行输入的!
将验证函数修改一下如下,

public class iiiiiiiiiiii
{
  static String key1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  static String _ii = "ZYXWVUTSRQPONMLKJIHGFEDCBA";

  public static boolean iii(String str)
  {
    if ((str != null) && (str.length() == 19))
    {
      key1 = System.arraycopy(_ii, 0, key1, 5, 5);

      boolean keyGuessWrong = true;
      int i = 0;
      for (int i = 0; i < 4; i++)
      {
        for (int j = 0; j < 4; j++) {
          if (str.charAt(i + j) != key1.charAt(Start.operate(i + j, key1))) {
            keyGuessWrong = false;
          }
        }
        i += 5;
      }
      return keyGuessWrong;
    }
    return false;
  }

将i+j,和key1放到operate函数进行变换,然后与输入进行比较。
其中key1为start.main()得到的字符串。

public static String main(String... args)
  {
    String x = "";
    char[] arrayOfChar;
    int j = (arrayOfChar = "v??��??????v?��??????����??".toCharArray()).length;
    for (int i = 0; i < j; i++)
    {
      int $ = arrayOfChar[i];
      x = x + (char)(($ >> 1) + 15);
    }
    return x;
  }

但是这有个乱码,,,很是难为了一番。最后经Simp1er表哥提示换种别工具可以得到这一个字符串,如下图。
image
最后,按照惯例附上脚本

key1="JsnatterrtJuaththovacke"
li=[0x76,0xC3,0x88,0xC2,0xBE,0xC2,0xA4,0xC3,0x8A,0xC3,0x8A,0xC2,0xAC,0xC3,0x86,
    0xC3,0x86,0xC3,0x8A,0x76,0xC3,0x8C,0xC2]
key=""
for i in li:
    key+=chr((i>>1)+15)
s=list(key1)
def digui(a):
    if a>2:
        return digui(a-1)+digui(a-2)
    else:
        return 1
flag=""
for i in range(4):
    a=i*5
    for j in range(4):
        flag+=s[digui(a+j)%len(s)]
    if i!=3:    
        flag+="-"
print flag

附上题目及工具:http://pan.baidu.com/s/1eRI2HSA
密码:xpxn

Python在网络空间安全中的应用初探.pdf 立即下载

相关推荐

手把手教你接入京东购物小程序:从领券到下单的全流程解析

本文详细解析了如何从API申请到领券下单,手把手教你接入京东购物小程序的全流程。涵盖京东联盟账号注册、商品信息获取、优惠券链接转换等关键技术实践,帮助开发者高效实现电商功能集成,提升用户购物体验。

g5h6i的博客 911

2017年陕西省网络空间安全技术大赛·Mobile T1

0x00拯救鲁班七号CM下载网址:链接: https://pan.baidu.com/s/10EPc2KCWqcaT9wLw5eyxWw 密码: swkn界面流程:一个输入框,一个按钮。0x01JAVA层分析反汇编代码逻辑分析加载了humen.so文件,说明这是写在native层的加密方法。说明已在代码注释中,不再重复。 static { System.loadLibrary("hu...

Locksk的博客 845

在STM32上运行小波变换及神经网络算法——(一)单片机中小波算法编写

在单片机上实现离散小波变换的C代码,通过确定信号长度、小波分解层数、小波基名称后进行编写,并改写成了方便调用的结构体格式。

weixin_45400202的博客 986

ctf 抓捕赵德汉_2017年网络空间安全技术大赛部分writeup

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

weixin_39960793的博客 180

利用 Openocd 和 FT2232H 实现 ARMv8(Coretex-A53)高效调试方案

本文详细介绍了如何利用开源工具OpenOCD与高性能USB转接芯片FT2232H,构建一套针对ARMv8架构(如Cortex-A53)的高效、低成本调试方案。内容涵盖从环境搭建、驱动配置、核心调试架构解析到实战问题排查的全过程,帮助开发者实现对多核处理器的透明、可控调试,是嵌入式Linux及底层开发的实用指南。

weixin_29163581的博客 280

PotPlayer终极画质调校:深入MadVR渲染器设置,让你的显示器发挥100%潜力

本文深入探讨了如何通过MadVR渲染器优化PotPlayer的画质设置,充分发挥高端显卡和显示器的潜力。从色彩空间匹配、色深优化到HDR元数据处理,提供了一套完整的配置指南,帮助用户实现影院级视觉体验。特别适合拥有NVIDIA RTX或AMD RX系列显卡的用户进行精细调校。

weixin_42530458的博客 600

2017年陕西省网络空间安全技术大赛·Mobile T2

0x00The Marauder's Mapapk链接: https://pan.baidu.com/s/1KxRb7NbR8-z5_rgD4ADI9Q 密码: y7sc0x01Java层分析略,参考:https://www.52pojie.cn/thread-603169-1-1.html0x02Native层分析用32位IDA打开test.so文件来带readbin()函数,内部调用了三处函数...

Locksk的博客 900

【COMSOL超材料和超表面仿真设计】

超材料和超表面的设计通常需要自定义材料属性。在COMSOL中,可以通过定义介电常数和磁导率的张量来模拟超材料的特性。对于超表面,通常需要定义表面阻抗或等效电路模型。

weixin_51101456的博客 1665

ctf 抓捕赵德汉_第三届网络空间安全技术大赛WriteUp(cstc2017)

web 1 签到题1.看源码发现是php隐士转换直接 Username=QNKCDZO,password=240610708 ,得到下一个地址 http://117.34.111.15:84/json.php2.继续右键看源码2.继续右键看源码QQ20170418-131112.png (32.74 KB, 下载次数: 269)2017-4-18 13:15 上传3.又是弱类型Web2 抽奖看到 ...

weixin_33304686的博客 982

傻白入门芯片设计,指令集架构、微架构、处理器内核(十一)

通俗理解指令集架构、微架构和处理器内核的关系

qq_46675545的博客 6014

电源完整性分析:PDN阻抗与去耦电容设计——目标阻抗计算与电容选型深度实战

摘要:随着嵌入式处理器主频突破 GHz、多核架构普及,电源完整性(Power Integrity, PI)已成为高速 PCB 设计中不可忽视的关键环节。本文从 PDN(电源分配网络)阻抗模型出发,系统讲解目标阻抗计算方法、去耦电容选型策略、反谐振抑制技术,并结合 STM32F4 核心板的完整设计实例,提供一套可落地的电源完整性工程实践方案。电源完整性设计是一项系统工程,需要从目标阻抗计算电容选型反谐振抑制PCB 布局目标阻抗是设计的起点,由电源电压、纹波要求和瞬态电流决定去耦电容。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 1万+

网络空间安全技术大赛 misc2 writep

msic2 xiyangyang.rar解压发现是喜洋洋的音乐,然后就猜是不是音频隐写,不过用了一大堆工具查看.并没有发现什么.然后....然后就没有解出来了&gt;_&lt;----------------------------------分割线----------------------------------比赛结束后,看到群上大佬讨论.问了一波自己动手做了一下,题目提示是在windows...

L1am3s 2412

100:vue+cesium: 加载glb文件,随机位置加载2000架飞机

本示例在 Vue + cesium 项目中随机位置加载2000架飞机,飞机是glb文件,每个大小为571kb。这个示例属于性能优化的范畴内,通常如果用entity加载glb只能显示几个飞机,这里采用primitive的方法来加载。直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果.

大剑师兰特的GIS世界 706

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

推一波我的博客 Marsguest’s Blog 第三届“百越杯”福建省高校网络空间安全大赛Do you know upload?Writeup 首先,直接上传一句话木马1.php文件 &lt;?php eval($_POST['cmd']);?&gt; //文件内容 发现如图弹窗 初步判断是前台直接判断文件类型,这种绕过相对简单,更改传输时文件类型即可 再次上传1.php的...

驻足 4005

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

2017年陕西省网络空间安全技术大赛·Mobile T5

0x00前言由于第四题较直接,一个md5的比较,fa3733c647dca53a66cf8df953c2d539通过md5查询解密出来是monkey99,然后真码就是monkey99了。这个第五题是混淆。理清逻辑还是不算难的。0x01java代码分析1.没有apk文件,只有一个jar文件【补充:JFrame是指一个计算机语言-java的GUI程序的基本思路是以JFrame为基础,它是屏幕上wind...

Locksk的博客 1779

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

第三届全国网络空间安全技术大赛 Web补题 By Assassin(持续更新)

最近比较忙,可能补题的速度慢一些些~签到题首先进入界面发现如下代码 然后就知道用==弱匹配,构造一个纯数字串和一个纯字母串,让他们的MD5值形如0exxx且0e后面全是纯数字。就构成科学记数法0==0,payloadUsername:QNKCDZO password:240610708进去后发现还有一个简单的绕过 我们看到又是==,有一个参考表,大家一看便知~ post的payload构造如下

Assassin 4014

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

下载文件,die和binwalk都显示文件确实是jar包 运行,观察外部特征: 是一个要求输入正确password的程序 jd-jui打开jar包,分析代码逻辑,找到两端关键代码: x public static void main(String[] ...

baikeng3674的博客 502

网络空间安全基础 第1天

1. 虚拟机的两种架构

EEEEEEcho的博客 360

2019年 网络空间安全国赛真题 赛题分析

2019年全国职业院校技能大赛中职组 “网络空间安全”赛卷八 没有错,国赛用的就是赛卷八 一、竞赛阶段 题目与实际环境差别还是蛮大的,可以说给你题目,没有环境你也不会做滴 PC机环境: 物理机:Windows7;(外机已经开启防火墙) 虚拟机1:Ubuntu Linux 32bit(用户名:root;密码:123456),安装工具集:Backtrack5,安装开发环境:Python3; 虚拟机2...

正在成为 code ape 2万+

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

作为一个bin小子,这次一个bin都没做出来,我很羞愧。 0x00 拯救鲁班七号 具体操作不多说,直接进入反编译源码阶段 可以看到,只要2处的str等于a就可以了,而str是由1处的checkPass返回,于是进入checkPass函数。 从代码看,这是调用了so库里的函数,并且我们知道so库的名字叫humen 于是找到so库,拖进ida静态分...

weixin_30902251的博客 364

Bugku逆向题目解析

Bugku逆向 2018年11月27日 10:37 1.入门逆向 拖入IDA分析 发现有一大串mov,后面的 66h 6ch 61h 67h 为ASCII字符:flag,的16进制表示,下进行 进制转换 https://www.rapidtables.com/convert/number/hex-to-ascii.html 66h6ch61h67h7BH52H65H5FH31H73H5FH53H30H5FH43H30H4FH4CH7DH 得到flag flag{Re_1s_S0_C0OL} 2.Easy_v

北观止的博客 2105

BugkuCTF~Mobile~WriteUp

最近,开始记录一篇关于 Android 逆向分析的 WriteUp 方便有需要的人学习,也欢迎大家相互交流, 发现不 一样的世界。 一、signin 考点:反编译、静态分析 Topic Link:https://ctf.bugku.com/files/109fa055c682e810684427c123a0833b/sign_in.zip signin 软件介绍: 1....

weixin_30387799的博客 861

攻防世界 CTF mobile 新手《app1》

apk直接拖入jadx找到入口文件MainActivity 找到关键代码,versionName与versionCode进行异或操作 找到BuildConfig中的versionName与versionCode 代码略。。。

江湖人称Boss沈的博客 1555

攻防世界mobile之app1 write up

1.app1 拖进模拟器效果: 上dex2jar,得到代码如下: package com.example.yaphetshan.tencentgreat; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; im...

克格莫(有需要的私信) 1097

攻防世界mobile新手区之app2 write up

0x00拖进模拟器查看: 0x01上dex2jar: 查看MainActivity.class: package com.tencent.testvuln; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import androi...

克格莫(有需要的私信) 2690
上一篇: JarvisOJ-You-Need-Python-wp
下一篇: PWN学习之[Rookiss]-[echo1]
Magic1an
博客等级 码龄9年 7粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值