知识点回顾:部分题目解析(以base64解码为主)-程序员宅基地

技术标签: 算法  

本次题目出自平台NSSCTF平台

题目链接:主页 | NSSCTFicon-default.png?t=N7T8https://www.nssctf.cn/index

以此题为例子

将其下载(ps:由于程序容易被识别为危险文件,要保留之后才能下载下来)

HDCTF easy_re 

首先我们要注意有以下几个标签:

这就说明需要进行脱壳操作以及basa64字符的处理

知识延申:

upx壳处理

【逆向】UPX工具使用及加壳_upx.exe-程序员宅基地icon-default.png?t=N7T8https://blog.csdn.net/qq_43633973/article/details/102573376#:~:text=%E5%B0%9D%E8%AF%95%E5%A6%82%E4%B8%8B%EF%BC%9A%20%E6%89%93%E5%BC%80cmd%E5%91%BD%E4%BB%A4%E8%A1%8C%E8%BF%9B%E5%85%A5%E5%88%B0upx.exe%E6%89%80%E5%9C%A8%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%8C%E8%BE%93%E5%85%A5upx.exe%20-h%20%E6%9C%89%E5%A6%82%E4%B8%8B%E5%8F%8D%E5%BA%94%EF%BC%9A%20%E9%9A%8F%E4%BE%BF%E6%89%BE%E4%BA%86%E4%B8%80%E4%B8%AAexe%E7%A8%8B%E5%BA%8F%EF%BC%88%E4%B9%8B%E5%89%8D%E4%B8%8A%E8%AF%BE%E7%9A%84%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81%EF%BC%8CC%2B%2B%E7%BC%96%E5%86%99%E7%9A%84%EF%BC%89%20sampe_mal.exe%E6%94%BE%E5%9C%A8%E8%BF%99%E4%B8%AAupx.exe%E7%9A%84%E5%90%8C%E7%BA%A7%E7%9B%AE%E5%BD%95%E4%B8%8B%EF%BC%9A%EF%BC%88%E8%BF%99%E6%A0%B7%E5%B0%B1%E4%B8%8D%E7%94%A8%E6%95%B2%E7%BB%9D%E5%AF%B9%E5%9C%B0%E5%9D%80%E4%BA%86%EF%BC%89,%E8%BE%93%E5%85%A5%E5%8A%A0%E5%A3%B3%E5%91%BD%E4%BB%A4%EF%BC%9Aupx%20sample_mal.exe%20%3A%E6%98%BE%E7%A4%BA%E5%8A%A0%E5%A3%B3%E6%88%90%E5%8A%9F%E3%80%82%20%E5%8F%AF%E4%BB%A5%E7%94%A8PEiD%E6%9F%A5%E7%9C%8B%E4%B8%8B%EF%BC%9A%E5%8F%91%E7%8E%B0%E5%8A%A0%E5%A3%B3%E6%88%90%E5%8A%9F%E3%80%82%20%E4%BD%BF%E7%94%A8%E8%84%B1%E5%A3%B3%E5%91%BD%E4%BB%A4%EF%BC%9Aupx%20-d%20sample_mal.exe%3A%E6%8F%90%E7%A4%BA%E8%84%B1%E5%A3%B3%E6%88%90%E5%8A%9F%E3%80%82UPX 可执行文件压缩工具的介绍与使用 - 掘金 (juejin.cn)icon-default.png?t=N7T8https://juejin.cn/post/7273803674789593127在我们将其进行查壳的过程当中我们可以发现

我们可以看到,这里有upx的提示信息,我们因此可以推断出该程序进行过upx的加壳处理

为啥要进行脱壳呢?

如果你没有脱壳,那将是这样的情况:

找不到main函数,无法对函数进行逆向的脚本编辑

那么如何进行脱壳处理呢?

首先,你得有一个upx插件(这个在网上应该都能找得到)

经过解压操作,将你要脱壳的文件夹复制到该文件夹当中

在上方的搜索栏里面,输入cmd

 回车,进入这个界面

先输入 

upx - d  + 文件名

如果你希望这个脱壳的文件会换成新的,那么在上述的基础上,再输入 -o 新的文件名

将脱壳后的文件拖到ida64位中

main函数就能被找到了

按F5,跳转到main函数的界面

得到了如下的伪C代码

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int i; // [rsp+2Ch] [rbp-4h]

  _main(argc, argv, envp);
  func(a, encode_a);
  puts("Please input your flag:");
  scanf("%s", s);
  for ( i = 1; i <= 32; ++i )
    f3(s);
  func(s, encode_s);
  if ( !strcmp(encode_s, a) )
    puts("Congratulations! You get the flag");
  else
    puts("Sorry,try again");
  return 0;
}

注意,伪C代码和C语言的代码类似,也是能将其识别和运行的

我们进入上方的func函数进行观察

发现有这样一串之后会跟常见的字符串

经过跟踪,我们发现了一串字符串

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

这个是base64的加密算法

base64加密算法

Base64 是一种常用的编码方式,它可以将二进制数据转换为可打印的 ASCII 字符串。下面是 Base64 加密的过程:

  1. 准备待加密的二进制数据。
  2. 将待加密的二进制数据按每 3 个字节(24 位)进行分组。
  3. 将每个字节转换为对应的 8 位二进制数。
  4. 将这 24 位二进制数按每 6 位进行分组,得到 4 个 6 位的组。
  5. 将每个 6 位的组转换为十进制数,作为索引查表获取相应的 Base64 字符。
  6. 将获得的 4 个 Base64 字符连接在一起,得到加密后的字符串。

在这个过程中,需要使用到一个 Base64 编码表,其中包含了 64 个字符(A-Z、a-z、0-9、+ 和 /),用于将 6 位的二进制数转换为相应的 Base64 字符。

请注意,Base64 只是一种编码方式,而不是加密算法。它是公开的、可逆的,主要用于将二进制数据在网络传输或存储时转换为 ASCII 字符串。

 SERDVEZ7WTB1X2hAdjJfL1wvXEA1N2VyM2RfN2hlX3IzdjNyczN9

进行base64解密之后

但是,这个并不是我们要找的最后的flag

我们发现,在点击进来这个f3(s)里面之后,我们就能发现该fag进行了一定的加密运算操作,运算操作步骤如下:

这里是一个典型的交换操作,将前后进行互换的一种操作,也就是说,将其进行一定的反向操作,我们就可能得到相应的flag

这段代码实现了对称交换(symmetric swap)的操作。具体来说,在循环中,每次都将字符串的前半部分和后半部分对称位置的字符进行交换,从而实现了对整个字符串进行对称交换的效果。

通过这种方式,最终实现了将字符串逆序排列的功能。这种对称交换是一种常见的字符串操作,可以用于许多不同的应用场景中。

那么,将其进行对称交换回来就能得到相应的结果(也就是我们所谓的flag)

但是,我们要注意的是这个for循环经历了32次,每2次就相当于没变

先交换过来+再交换过去=没变

所以,我们得到的经过base64解码的答案就是我们所需要的flag

HDCTF{Y0u_h@v2_/\/\@57er3d_7he_r3v3rs3}

解码过后,这个就是我们得到的flag(经过base64解密的)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2302_81097378/article/details/136661136

智能推荐

874计算机科学基础综合,2018年四川大学874计算机科学专业基础综合之计算机操作系统考研仿真模拟五套题...-程序员宅基地

文章浏览阅读1.1k次。一、选择题1. 串行接口是指( )。A. 接口与系统总线之间串行传送,接口与I/0设备之间串行传送B. 接口与系统总线之间串行传送,接口与1/0设备之间并行传送C. 接口与系统总线之间并行传送,接口与I/0设备之间串行传送D. 接口与系统总线之间并行传送,接口与I/0设备之间并行传送【答案】C2. 最容易造成很多小碎片的可变分区分配算法是( )。A. 首次适应算法B. 最佳适应算法..._874 计算机科学专业基础综合题型

XShell连接失败:Could not connect to '192.168.191.128' (port 22): Connection failed._could not connect to '192.168.17.128' (port 22): c-程序员宅基地

文章浏览阅读9.7k次,点赞5次,收藏15次。连接xshell失败,报错如下图,怎么解决呢。1、通过ps -e|grep ssh命令判断是否安装ssh服务2、如果只有客户端安装了,服务器没有安装,则需要安装ssh服务器,命令:apt-get install openssh-server3、安装成功之后,启动ssh服务,命令:/etc/init.d/ssh start4、通过ps -e|grep ssh命令再次判断是否正确启动..._could not connect to '192.168.17.128' (port 22): connection failed.

杰理之KeyPage【篇】_杰理 空白芯片 烧入key文件-程序员宅基地

文章浏览阅读209次。00000000_杰理 空白芯片 烧入key文件

一文读懂ChatGPT,满足你对chatGPT的好奇心_引发对chatgpt兴趣的表述-程序员宅基地

文章浏览阅读475次。2023年初,“ChatGPT”一词在社交媒体上引起了热议,人们纷纷探讨它的本质和对社会的影响。就连央视新闻也对此进行了报道。作为新传专业的前沿人士,我们当然不能忽视这一热点。本文将全面解析ChatGPT,打开“技术黑箱”,探讨它对新闻与传播领域的影响。_引发对chatgpt兴趣的表述

中文字符频率统计python_用Python数据分析方法进行汉字声调频率统计分析-程序员宅基地

文章浏览阅读259次。用Python数据分析方法进行汉字声调频率统计分析木合塔尔·沙地克;布合力齐姑丽·瓦斯力【期刊名称】《电脑知识与技术》【年(卷),期】2017(013)035【摘要】该文首先用Python程序,自动获取基本汉字字符集中的所有汉字,然后用汉字拼音转换工具pypinyin把所有汉字转换成拼音,最后根据所有汉字的拼音声调,统计并可视化拼音声调的占比.【总页数】2页(13-14)【关键词】数据分析;数据可..._汉字声调频率统计

linux输出信息调试信息重定向-程序员宅基地

文章浏览阅读64次。最近在做一个android系统移植的项目,所使用的开发板com1是调试串口,就是说会有uboot和kernel的调试信息打印在com1上(ttySAC0)。因为后期要使用ttySAC0作为上层应用通信串口,所以要把所有的调试信息都给去掉。参考网上的几篇文章,自己做了如下修改,终于把调试信息重定向到ttySAC1上了,在这做下记录。参考文章有:http://blog.csdn.net/longt..._嵌入式rootfs 输出重定向到/dev/console

随便推点

uniapp 引入iconfont图标库彩色symbol教程_uniapp symbol图标-程序员宅基地

文章浏览阅读1.2k次,点赞4次,收藏12次。1,先去iconfont登录,然后选择图标加入购物车 2,点击又上角车车添加进入项目我的项目中就会出现选择的图标 3,点击下载至本地,然后解压文件夹,然后切换到uniapp打开终端运行注:要保证自己电脑有安装node(没有安装node可以去官网下载Node.js 中文网)npm i -g iconfont-tools(mac用户失败的话在前面加个sudo,password就是自己的开机密码吧)4,终端切换到上面解压的文件夹里面,运行iconfont-tools 这些可以默认也可以自己命名(我是自己命名的_uniapp symbol图标

C、C++ 对于char*和char[]的理解_c++ char*-程序员宅基地

文章浏览阅读1.2w次,点赞25次,收藏192次。char*和char[]都是指针,指向第一个字符所在的地址,但char*是常量的指针,char[]是指针的常量_c++ char*

Sublime Text2 使用教程-程序员宅基地

文章浏览阅读930次。代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大、灵活的编辑器,相信你和我一样,都不会例外。我用过的编辑器不少,真不少~ 但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !如果说“神器”是我能给予一款软件最高的评价,那么我很乐意为它封上这么一个称号。它小巧绿色且速度非

对10个整数进行按照从小到大的顺序排序用选择法和冒泡排序_对十个数进行大小排序java-程序员宅基地

文章浏览阅读4.1k次。一、选择法这是每一个数出来跟后面所有的进行比较。2.冒泡排序法,是两个相邻的进行对比。_对十个数进行大小排序java

物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)_网络调试助手连接阿里云连不上-程序员宅基地

文章浏览阅读2.9k次。物联网开发笔记——使用网络调试助手连接阿里云物联网平台(基于MQTT协议)其实作者本意是使用4G模块来实现与阿里云物联网平台的连接过程,但是由于自己用的4G模块自身的限制,使得阿里云连接总是无法建立,已经联系客服返厂检修了,于是我在此使用网络调试助手来演示如何与阿里云物联网平台建立连接。一.准备工作1.MQTT协议说明文档(3.1.1版本)2.网络调试助手(可使用域名与服务器建立连接)PS:与阿里云建立连解释,最好使用域名来完成连接过程,而不是使用IP号。这里我跟阿里云的售后工程师咨询过,表示对应_网络调试助手连接阿里云连不上

<<<零基础C++速成>>>_无c语言基础c++期末速成-程序员宅基地

文章浏览阅读544次,点赞5次,收藏6次。运算符与表达式任何高级程序设计语言中,表达式都是最基本的组成部分,可以说C++中的大部分语句都是由表达式构成的。_无c语言基础c++期末速成