首页 > 其他分享 >NUAACTF-2017-Reverse题目nuaactf解题思路

NUAACTF-2017-Reverse题目nuaactf解题思路

时间:2024-12-27 16:55:22浏览次数:7  
标签:NUAACTF Reverse nuaactf int StringBuilder 密码 length static combinations

导语
  题目链接https://ctf.bugku.com/challenges/detail/id/239.html,这是一道CTF逆向的的题目。

文章目录

题目分析

  那倒题目之后解压题目发现只有一个Jar包,如下所示。
在这里插入图片描述
  也就是说我们要对这个Jar包进行反编译,找到解决问题的关键。这里我们介绍一款Java反编译的工具jd-gui-1.6.6,如下所示。
在这里插入图片描述
  接下来我们就来反编译一下上面的Jar包。结果如下所示。
在这里插入图片描述

分析主类

  反编译完成之后,接下来我们来分析一下主类信息。
在这里插入图片描述
  从主类信息结果来看,首先需要我们输入一个四位长度的密码,然后通过如下的逻辑来判断密码是否正确才能进入到后续的类加载逻辑中。
在这里插入图片描述
  接下来就需要我们研究一下如何进行破解这个密码了,经过分析可以看到,对于这个数据的加密应该是一个类似于MD5的加密方式。既然我们知道了这个密码是一个四位长度的字符组合,所以通过遍历爆破力破解的方式也可以得到密码。
在这里插入图片描述

爆破密码

  第一步,就需要我们列出所有的四位字母组合的内容,数据量大概是52的4次方7311616个,数据量不是太大,如下所示。

public class FourDigitCombinations {
   
    // 定义所有可能的字符:数字0-9和字母A-Z
    //private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklimopqrstuvwxyz";
    private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklimopqrstuvwxyz";
    private static final int STRING_LENGTH = 5; // 字符串长度

    public static List<String> combinationsReturn() {
   
        List<String> combinations = generateAllCombinations(CHARACTERS, STRING_LENGTH);
        return combinations;
    }

    // 生成所有可能的指定长度的字符串组合
    public static List<String> generateAllCombinations(String characters, int length) {
   
        List<String> combinations = new ArrayList<>();
        char[] charArray = characters.toCharArray();
        generateCombinations(charArray, length, 0, new StringBuilder(length), combinations);
        return combinations;
    }

    // 递归生成组合
    private static void generateCombinations(char[] charArray, int length, int index, StringBuilder current, List<String> combinations) {
   
        if (index == length) {
   
            combinations.add(current.toString());
            return;
        }
        for (char c : charArray) {
   
            // 使用append而不是setCharAt
            StringBuilder newCurrent = new StringBuilder(current); // 复制当前的StringBuilder以避免并发修改问题
            newCurrent.append(c); // 添加当前字符到新的StringBuilder中
            generateCombinations(charArray, length, index + 1, newCurrent, combinations); // 递归调用,传入新的StringBuilder
        }
    }
}

  第二步、接下来就是通过上面反编译之后的代码中的加密逻辑来暴力破解一下这个密码,逻辑就是根据生成的所有可能的密码组合来通过上面给出的加密方式加密之后对比加密之后的数据是否是我们需要的数据。

public class TestMain {
   
    // 将十六进制字符串转换成Byte数组
    public static byte[] hexStringToByteArray(String hexString) {
   
        int len = hexString.length();
        byte[] byteArray = new byte[len / 2];
        for (int i = 

标签:NUAACTF,Reverse,nuaactf,int,StringBuilder,密码,length,static,combinations
From: https://blog.csdn.net/nihui123/article/details/144771258

相关文章

  • 如何使用reverse使数组倒序但不影响原数组?
    在前端开发中,JavaScript是最常用的编程语言。如果你想反转一个数组,但又不想改变原数组,你可以使用数组的slice()方法来创建一个原数组的副本,然后使用reverse()方法来反转这个副本。这样,原数组就不会被改变。以下是一个示例代码:letoriginalArray=[1,2,3,4,5];letrev......
  • BUUCTF-reverse3
     一、查壳把文件拖入查壳工具发现是c++, 由exeinfope可知此程序无壳。二、静态分析(IDA) 把文件拖到IDA中 接下来寻找main函数 点击图片中的main,得到 反编汇点击f5进行反汇编,得到伪代码进行分析 分析伪代码从上往下进行一步步分析一下,进行一下注释......
  • 关于攻防世界-Reverse-game的三种解法的探讨
    1.直接玩游戏输入12345678即可出flag2.动态调试下载下来是一个exe文件,可以用IDA打开这种题我更倾向于动调直接得到flag我们查壳没有保护壳,直接32打开进入字符串界面,找到显示的那部分int__cdeclmain_0(intargc,constchar**argv,constchar**envp){i......
  • Reverse花指令及反混淆
    花指令及反混淆1.花指令  花指令是反调试的一种基本的方法。其存在是干扰选手静态分析,但不会影响程序的运行。实质就是一串垃圾指令,它与程序本身的功能无关,并不影响程序本身的逻辑。在软件保护中,花指令被作为一种手段来增加静态分析的难度。IDA并不能正常识别花指令,导致可看可......
  • HECTF网络安全挑战赛个人题解,主Reverse部分
    ReverseezAndroid比较难的一个题。java层用rc4解出一张图片知道flag的格式so层注册了d0func和stringFromJNI两个函数其中d0func给两个全局变量赋了值,还有两个小函数也对这两个变量进行了操作,交叉引用全部找出来即可解密得到1vxyzmissonD1key和go1denG08aTJYcxk在stringFro......
  • 第9天:基础入门-反弹Shell&渗透命令&Reverse反向&Bind正向&利用语言&文件下载&多姿势
    #知识点:1、反弹Shell-项目&命令&语言等2、系统渗透命令-网络&文件&操作等一、反弹Shell的前提条件:已知存在漏洞利用或执行命令的地方,怎么去已知,则需用到第8天的判断方式,进行判断是否存在命令执行的地方,在这个前提下,再去执行shell反弹;二、为什么要反弹Shell?往......
  • reverse学习总结(11)
    一.[ACTF新生赛2020]usualCrypt1查壳ida分析shitf+f12字符串查找int__cdeclmain(intargc,constchar**argv,constchar**envp){intv3;//esiintv5[3];//[esp+8h][ebp-74h]BYREF__int16v6;//[esp+14h][ebp-68h]charv7;//[esp+16h][ebp-66......
  • newstar2024 reverse
    Newstar2024--Reversebase64无壳shiftf12查找字符串换表的base64加密Simple_encryption打开主函数直接查看buffer,逆向破解enc=[0x47,0x95,0x34,0x48,0xA4,0x1C,0x35,0x88,0x64,0x16,0x88,0x07,0x14,0x6A,0x39,0x12,0xA2,0x0A,0x37,0x5C,0......
  • 【有啥问啥】逆向工程(Reverse Engineering,RE):深度解析与技术方法
    逆向工程(ReverseEngineering,RE):深度解析与技术方法引言逆向工程(ReverseEngineering,简称RE),作为现代科技领域中的一项重要技术,其影响力已远远超越了传统的硬件拆解范畴。在软件安全、产品设计优化、知识产权保护,以及教育与研究等多个领域,逆向工程都展现出了其独特的价值和......
  • [1065] Reverse geocoding in python
    ToimplementreversegeocodinginPython,youcanusethegeopylibrary,whichprovidesaconvenientinterfaceforvariousgeocodingservices.Here’sastep-by-stepguidetohelpyougetstarted:Step-by-StepGuideInstallthegeopylibrary:pipinstall......