热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

信息安全综合训练RE_lab3(自用、记录)

RE_lab3Question11.1题目要求1.2解答Question22.1题目要求2.2解答Question33.1题目要求3.2解答3.2.1修改exe使得出现成功提示3.

RE_lab3

  • Question 1
    • 1.1 题目要求
    • 1.2 解答
  • Question 2
    • 2.1 题目要求
    • 2.2 解答
  • Question 3
    • 3.1 题目要求
    • 3.2 解答
      • 3.2.1 修改exe使得出现成功提示
      • 3.2.2 不修改exe输入正确的密码达到成功的目的
  • Question 4(选做)
    • 4.1 题目要求
    • 4.2 解答
  • Question 5
    • 5.1 题目要求
    • 5.2 解答


组长组员组员
E41714007E41714001E41714020

Question 1

1.1 题目要求


  1. 阅读
    然后回答问题:
    What does this code do?
    在这里插入图片描述
    一样的代码,只不过换成了Java语言

Java 1.8 compiler:public boolean f(char);descriptor: (C)Zflags: ACC_PUBLICCode:stack=2, locals=2, args_size=20: iload_11: bipush 973: if_icmplt 146: iload_17: bipush 1229: if_icmpgt 1412: iconst_113: ireturn14: iload_115: bipush 6517: if_icmplt 2820: iload_121: bipush 9023: if_icmpgt 2826: iconst_127: ireturn28: iconst_029: ireturn

1.2 解答

由于Java语言类似,故以下只解释一种

Optimizing csc .NET compiler from MSVS 2015 (/o switch), ildasm output:.method public hidebysig static bool f(char a) cil managed{// Code size 26 (0x1a) //代码大小 26(0x1a).maxstack 8 //计算出计算堆栈的能存几个值(8个)IL_0000: ldarg.0 //把this指针压入栈中IL_0001: ldc.i4.s 97 //把int32的值(97)推送到计算堆栈IL_0003: blt.s IL_000c //如果第一个值<第二个值,跳转到IL_000c位置IL_0005: ldarg.0 //把this指针压入栈中IL_0006: ldc.i4.s 122 //把int32的值(122)推送到计算堆栈IL_0008: bgt.s IL_000c //如果第一个值>第二个值,跳转到IL_000c位置IL_000a: ldc.i4.1 //把int32的值(1)推送到计算堆栈IL_000b: ret //把1从调用方的计算堆栈推送到被调用方的计算堆栈上IL_000c: ldarg.0 //把this指针压入栈中IL_000d: ldc.i4.s 65 //把int32的值(65)推送到计算堆栈IL_000f: blt.s IL_0018 //如果第一个值<第二个值,跳转到IL_0018位置IL_0011: ldarg.0 //把this指针压入栈中IL_0012: ldc.i4.s 90 //把int32的值(90)推送到计算堆栈IL_0014: bgt.s IL_0018 //如果第一个值>第二个值,跳转到IL_0018位置IL_0016: ldc.i4.1 //把int32的值(1)推送到计算堆栈IL_0017: ret //把1从调用方的计算堆栈推送到被调用方的计算堆栈上IL_0018: ldc.i4.0 //把int32的值(0)推送到计算堆栈IL_0019: ret //把0从调用方的计算堆栈推送到被调用方的计算堆栈上} // end of method some_class::f/*
根据上面的代码解释,可以知道以下几点:
1. 若字符>97且<122,返回1,判断字符是否是小写字母
2. 若字符>65且<90, 返回1,判断字符是否是大写字母
3. 上述两条都不满足,返回0
综上所述,该程序的功能是: 判断一个字符是否是英文字母,是返回1,不是返回0
*/


Question 2

2.1 题目要求


  1. 2017bath这张图片有一些文字片段&#xff0c;可能简单加密了&#xff0c;是某人说的&#xff0c;此人的姓名是什么&#xff1f;
    hint&#xff1a;hex editor

2.2 解答

尝试打开2017bath.jpg文件,发现可以以图片格式正常打开
在这里插入图片描述
根据题目所给的提示信息,通过十六进制编辑器(hex editor)打开2017bath.jpg文件
我使用的是notepad&#43;&#43;的HEX-Editor插件
在这里插入图片描述
一直看到文件末尾,发现出现Rail-Fence字样,因此,我们可以知道,图片的某些信息可能采用了栅栏密码加密的方式
根据上面的分析,将2017bath.jpg文件的后缀名修改为zip,并且进行解压,得到以下文件
在这里插入图片描述
打开可以发现以下内容
在这里插入图片描述
即一串字符串,具体内容如下
CrudreasrsheheanaulhfouCmhlaopiaeifltouermrtdpiyeCntpmafhnpbgmbaoagspeuteuwtecwokpetwutileolctnreoicottievhetepriogoseIretodaiithgottfeorhersnueualtebtfamtnseetehrnieipooilrshashyhsrmttmanariaictntgutdeeonmotaudeowuselctnfeoghrtsbaCrgarhtbprthcirarQktodbeatees
接下来,根据得到的文本内容,破解栅栏密码,此处采用暴力破解
代码如下

//Rail-Fence_attack.c
#define _CRT_SECURE_NO_WARNINGS
#include //printf()
#include //system()
#include //strlen()
#include //ceil()int main(void)
{char c[] &#61; "CrudreasrsheheanaulhfouCmhlaopiaeifltouermrtdpiyeCntpmafhnpbgmbaoagspeuteuwtecwokpetwutileolctnreoicottievhetepriogoseIretodaiithgottfeorhersnueualtebtfamtnseetehrnieipooilrshashyhsrmttmanariaictntgutdeeonmotaudeowuselctnfeoghrtsbaCrgarhtbprthcirarQktodbeatees";int len &#61; strlen(c);char tmp_c[50][50] &#61; { 0 };int index &#61; 0;int i, j, k;for (i &#61; 1; i < 11; &#43;&#43;i){printf("ตฺ%dื้:\n", i);index &#61; 0;for (j &#61; 0; j < len % i; &#43;&#43;j){for (k &#61; 0; k < ceil(len / (double)i); &#43;&#43;k){tmp_c[j][k] &#61; c[index];&#43;&#43;index;}}for (; j < i; &#43;&#43;j){for (k &#61; 0; k < ceil(len / (double)i) - 1; &#43;&#43;k){if (index > len){break;}tmp_c[j][k] &#61; c[index];&#43;&#43;index;}}index &#61; 0;for (k &#61; 0; k < ceil(len / (double)i); &#43;&#43;k){for (j &#61; 0; j < i; &#43;&#43;j){if (index > len){break;}printf("%c", tmp_c[j][k]);&#43;&#43;index;}}printf("\n\n");}printf("\n");system("pause");return 0;
}

运行结果如下
在这里插入图片描述
根据运行结果可以知道,只有第9组最符合逻辑思维,所以可以知道,解密后明文如下
CppisahorriblelanguageItsmademorehorriblebythefactthatalotofsubstandardprogrammersuseittothepointwhereitsmuchmucheasiertogeneratetotalanduttercrapwithitQuitefranklyevenifthechoiceofCweretodonothingbutkeeptheCppprogrammersoutthatinitselfwouldbeahugereasontouseC
为了方便阅读,适当断句
Cpp is a horrible language Its made more horrible by the fact that a lot of substandard programmers use it to the point where its much much easier to generate total and utter crap with it Quite frankly even if the choice of C were to do nothing but keep the Cpp programmers out that in itself would be a huge reason to use C
通过断句,阅读之后,可以发现这句话是Linux之父Linus Torvalds说的,所以本题的答案就是Linus Torvalds

Question 3

3.1 题目要求


  • 运行CrackMe1.exe&#xff0c;提示 “嗯&#xff0c;对了” 代表成功。首先修改exe使得出现成功提示&#xff0c;其次不修改exe输入正确的密码达到成功的目的。
    hint

3.2 解答

首先尝试运行CrackMe1.exe,发现出现以下结果
在这里插入图片描述
随便输入一些信息,看看出现什么结果
在这里插入图片描述

3.2.1 修改exe使得出现成功提示

使用IDA分析CrackMe1.exe,根据题目的提示信息,可以知道”嗯,对了”是我们需要跳转的地方
在这里插入图片描述
根据查看,可以知道,需要跳转到指定的位置,就需要修改判断语句brtrue.s的跳转条件

  • brtrue.s表示如果value的值为true/非空/非零,则将控制转移到目标指令&#xff08;短格式&#xff09;
  • brfalse.s表示如果value的值为false/空引用/零,则将控制转移到目标指令

所以&#xff0c;把此处brtrue.s改为brfalse.s就可以了
修改之前
在这里插入图片描述
在这里插入图片描述
brtrue.s的十六进制是2D&#43;跳转地址, brfalse.s的十六进制是2C&#43;跳转地址
由于跳转地址是不会改变的,只需要将2D修改为2C即可
使用十六进制编辑器修改,修改之后的文件另存为CrackMe1_1.exe
在这里插入图片描述
修改之后
在这里插入图片描述
在这里插入图片描述
运行程序CrackMe1_1.exe,输入一样的信息,发现已经修改了
在这里插入图片描述

3.2.2 不修改exe输入正确的密码达到成功的目的

用.NET Reflector软件分析CrackMe1.exe&#xff0c;在button1_Click函数中里能看到
在这里插入图片描述
可以知道,只要字符串加密的结果和给定的一致,就会成功,所以接下来查看加密函数
在这里插入图片描述
由于分析之后可以知道加密方式是3DES加密,使用在线解密工具进行解密
在线解密工具
在这里插入图片描述
所以可以知道输入wctf{dotnet_crackme1}就可以成功了,接下来进行尝试
在这里插入图片描述

Question 4(选做)

4.1 题目要求


  1. &#xff08;选做&#xff09;修改CrackMe1.exe使得&#xff1a;只有输入你的学号才能出现成功提示。并且把“大家好…net”这段话全部换成自己自定义的英文。

4.2 解答

首先使用在线工具,将学号E41714007使用3DES加密
在这里插入图片描述
加密结果为fGnUImcGhy9TEXPa7W2bZw&#61;&#61;
通过十六进制编辑器将密码判断处的字符串修改为fGnUImcGhy9TEXPa7W2bZw&#61;&#61;
在这里插入图片描述
使用十六进制编辑器修改,修改之后的文件另存为CrackMe1_2.exe
修改前
在这里插入图片描述
需要注意的是,加密字符串的前一个字节表示的是加密字符串的长度&#43;结束标志0x01,最后还有一个结束标志符00
修改后
在这里插入图片描述
运行,输入学号进行检测,发现成功
在这里插入图片描述
接下来进行自定义字符串的修改
首先将需要的字符串的16进制表示出来(此处用的是notepad&#43;&#43;插件)
在这里插入图片描述
接下来开始转换
字符串“大家好&#xff01;我是”修改为“hello!”&#xff1a;
在这里插入图片描述
字符串“&#64;无所不能的魂大人”修改为“huang_xm!”&#xff1a;
在这里插入图片描述
微博链接“http://weibo.com/woldy”修改为“http://baidu.com/huang”&#xff1a;
在这里插入图片描述
字符串“编点练习题太TMD难了。。欢迎投稿哦&#xff01;投稿地址king&#64;woldy.net”修改为“hahaE41714007huang_xin_mingE41714007HELLO”&#xff1a;
在这里插入图片描述
修改后进行测试,输入学号,发现正确,而且界面也被修改
在这里插入图片描述
点击huang_xm!处的链接,显示如下,因为网页是随便填的
在这里插入图片描述

Question 5

5.1 题目要求


  1. 运行login.exe&#xff0c;提示 “You Get It!” 代表成功。

5.2 解答

尝试运行login.exe,随便输入信息,显示如下
在这里插入图片描述
用.NET Reflector分析login.exe&#xff0c;在button1_Click函数中里能看到
在这里插入图片描述 在这里插入图片描述
根据代码分析,要想得到"You Get It!",密码需要满足以下三个条件

  1. 密码长度为9
  2. 所有字符的ASCII码算术运算加后是0x1d8
  3. 所有字符的ASCII码逻辑运算与后是0x42

满足条件的密码有很多,根据提示知道是学号,接下来采用暴力破解,查找正确的密码
(此处根据信息安全专业学号特点可以知道前几位为E41X140XX)

破解代码如下

//Login_attack.c
#include //printf()
#include //strlen()
#include //system()int main()
{char str[] &#61; "0123456789E";int len &#61; strlen(str);char login[9];int num1 &#61; 0, num2 &#61; 0;login[0] &#61; &#39;E&#39;;login[1] &#61; &#39;4&#39;;login[2] &#61; &#39;1&#39;;login[4] &#61; &#39;1&#39;;login[5] &#61; &#39;4&#39;;login[6] &#61; &#39;0&#39;;for(int i3 &#61; 0; i3 < len; &#43;&#43;i3){login[3] &#61; str[i3];for (int i8 &#61; 0; i8 < len; &#43;&#43;i8) {login[7] &#61; str[i8];for (int i9 &#61; 0; i9 < len; &#43;&#43;i9) {login[8] &#61; str[i9];for (int i &#61; 0; i < 9; &#43;&#43;i) {num1 &#61; num1 &#43; (int)login[i];num2 ^&#61; (int)login[i];}if (num1 &#61;&#61; 472 && num2 &#61;&#61; 66) //0x1d8 &#61; 472,0x42 &#61; 66{for (int j &#61; 0; j < 9; &#43;&#43;j)printf("%c", login[j]);printf("\n");}num1 &#61; 0;num2 &#61; 0;}}}printf("\n");system("pause");return 0;
}

运行结果如下
在这里插入图片描述
随便挑4个密码进行验证,均成功,结果如下
在这里插入图片描述

在这里插入图片描述 在这里插入图片描述


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • C# WPF自定义按钮的方法
    本文介绍了在C# WPF中实现自定义按钮的方法,包括使用图片作为按钮背景、自定义鼠标进入效果、自定义按压效果和自定义禁用效果。通过创建CustomButton.cs类和ButtonStyles.xaml资源文件,设计按钮的Style并添加所需的依赖属性,可以实现自定义按钮的效果。示例代码在ButtonStyles.xaml中给出。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
author-avatar
潘景洪Phant_255
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有