第二届广东省大学生网络攻防大赛 simple_re

2023-05-16

第二届广东省大学生网络攻防大赛 simple_re

流程总结:(思路原文出自 JANlittle 师傅)
程序将关键函数以对象元素的形式存在对象里,然后在申请内存中搭配指针间接调用,关键是把内存空间中对应位置的函数和变量用流程图梳理清除。
sub_140002110 有反调试,主要是 IsDebuggerPresent 和获取 ThreadContext 并检测是否有硬件断点。
加密流程为先打乱每个字节的比特顺序,其实就是把比特串倒过来;然后利用打乱比特顺序的前 4 字节输入 SMC 解密一段代码,并开一个线程检测 SMC 解密后的代码段是否有 0xcc,有的话说明前 4 字节输入错误;之后调用上述代码段进行魔改 XTEA 加密。
.
.
下载程序,照例扔入 exeinfope 中查看信息:
在这里插入图片描述
.
.
64 位 exe 文件,无壳,照例扔入 IDA64 中查看伪代码,有 main 函数看 main 函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
.
.
第一部分是输入字符比特流倒序,接下来我们看第二部分:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
.
.
第二部分的 SMC 解密处后面再说,因为要用到第三部分的数据,所以卡住不要紧张,说不定答案在后面呢。现在我们来看第三部分:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
.
.
第三部分——用 Str1 的前 4 个字节生成 SMC 代码:

b=[  0x27, 0x44, 0x7F, 0xEB, 0x3A, 0x8F, 0x1A, 0x2E, 0xFB, 0x41, 
  0xE6, 0x46, 0xFB, 0x59, 0xEE, 0x42, 0xFB, 0x49, 0xD6, 0x46, 
  0xF9, 0x49, 0xEE, 0x85, 0x72, 0x85, 0xB3, 0xF6, 0x3A, 0x87, 
  0xB3, 0x16, 0xF9, 0x4C, 0xF2, 0x87, 0x37, 0xF8, 0x31, 0x4B, 
  0x82, 0x0C, 0xF6, 0x0E, 0x72, 0xCB, 0xB3, 0xE2, 0x0D, 0xA0, 
  0x9C, 0x89, 0xB5, 0x49, 0x0A, 0x0E, 0x72, 0x0C, 0xF6, 0x85, 
  0x37, 0xF0, 0xCD, 0x4B, 0x62, 0x03, 0x75, 0x8A, 0x72, 0x0C, 
  0xF6, 0x85, 0x37, 0xF8, 0x7B, 0x1A, 0xB7, 0x0C, 0xF6, 0x0E, 
  0x72, 0x87, 0xB3, 0xFA, 0xB3, 0xE4, 0xF0, 0x3F, 0xB0, 0x87, 
  0xB3, 0xFA, 0x73, 0xCE, 0x7D, 0x4B, 0x82, 0x8F, 0x16, 0x0D, 
  0x3A, 0x81, 0xFA, 0x8B, 0x72, 0x0C, 0xF6, 0x0E, 0x3A, 0x87, 
  0xB3, 0x2E, 0x3A, 0x0D, 0x3E, 0x85, 0x7A, 0x87, 0xB3, 0xFE, 
  0x73, 0xC4, 0xC7, 0xDE, 0x73, 0x49, 0x0E, 0x85, 0x37, 0xE0, 
  0xF7, 0x4B, 0x82, 0x87, 0xB3, 0xF6, 0xFF, 0x18, 0x33, 0x0E, 
  0x72, 0x0C, 0xF6, 0x85, 0x37, 0xF4, 0x37, 0xE6, 0x74, 0x3D, 
  0x34, 0x85, 0x37, 0xF4, 0xF7, 0xCC, 0xF9, 0x49, 0x06, 0xCF, 
  0x9A, 0x07, 0x7F, 0xCE, 0xF1, 0xEC, 0xF5, 0x46, 0xFF, 0x00, 
  0x73, 0x0E, 0x72, 0x0C, 0xF6, 0x46, 0xF9, 0x49, 0xD6, 0x46, 
  0x73, 0xC4, 0x7D, 0x06, 0xF9, 0x49, 0x06, 0x0F, 0xBA, 0x3D, 
  0x26, 0x0F, 0x37, 0xF8, 0x75, 0x4B, 0x8E, 0x0D, 0x1F, 0x7E, 
  0x8D, 0xF3, 0x09, 0x46, 0xF9, 0x49, 0xEE, 0x85, 0x27, 0xF4, 
  0x7F, 0x1E, 0x3A, 0x87, 0xB3, 0x16, 0x3A, 0x8F, 0x36, 0x0A, 
  0xF9, 0x59, 0x02, 0x87, 0x62, 0x9C, 0xBE, 0x8D, 0xB6, 0x2C, 
  0xAB, 0xCD]

Str1=[0x72, 0x0C, 0xF6, 0x0E]

address=0x140042000
for i in range(232):
    patch_byte(address+i,Str1[i%4]^b[i])
    
print("success")

在这里插入图片描述
在这里插入图片描述
.
.
最后梳理流程,写解密代码:(代码出自 JANlittle 师傅)**
请添加图片描述
请添加图片描述

#include <stdio.h>
#include <stdint.h>

void decipher(unsigned int num_rounds,uint32_t v[2],uint32_t const key[4]){
	unsigned int i;
	uint32_t v0 = v[0], v1 = v[1], delta = 0x78955381, sum = delta * -num_rounds;
	for(i = 0; i < num_rounds; i++){
	v1 -= (((v0 << 3) ^ (v0 >> 6))+v0) ^ (sum + key[(sum >> 11) & 3]);
	sum += delta;
	v0 -= (((v1 << 3) ^ (v1 >> 6)) + v1) ^ (sum + key[sum & 3]);
	} 
	v[0] = v0; v[1] = v1;
}

uint8_t rebits(uint8_t n)
{
	uint8_t count = 0;
	for(int i = 0; i < 8; i++)
	{
		count = count *2 + n % 2;		 
		n /= 2;
//超简便的 bit 逆序算法, + n % 2 就是取 8 bit 最后一位,搭配  *2 就是从 0 开始不断把最后一位往前移动,n / 2 是无余数的也就是不断舍弃最后一位 
	}
	return count;
}
 
 int main(){
	uint8_t enc[]={0x72, 0x0C, 0xF6, 0x0E, 0x8C, 0x69, 0x23, 0x69, 0x59, 0xA8, 0x06, 0xEF, 0x2A, 0x1A, 0x56, 0xB6, 0x96, 0xAC, 0xEE, 0x92,0x5C, 0xF2, 0xED, 0x0A, 0x5F, 0x36, 0x8E, 0x41, 0xA6, 0x36, 0x86, 0x72, 0x56, 0xD2, 0x54, 0xC2, 0x00, 0xC8, 0xA8, 0x00};
    uint8_t key1[33] = "Welcome to the g";							//适用于 IDA 单 bit 或字符串取数 
    uint8_t key2[32] = "ame!\nYour key: ";		
	unsigned int r=12;				//这里是加密轮数,自己设置 
	decipher(r,(uint32_t *)(enc+4),(const uint32_t *)key1);			//适用于 IDA 单个 bit 取数的类型强制转换法 
	decipher(r,(uint32_t *)(enc+20),(const uint32_t *)key2);
	for(int i =0; i < 40; i++)
		enc[i]=rebits(enc[i]);
	printf("%s",enc);
	return 0;
}

在这里插入图片描述
.
.
在这里插入图片描述
.
.
参考博客:
http://blog.leanote.com/post/xp0int/2022-%E5%B9%BF%E4%B8%9C%E7%9C%81%E5%A4%A7%E5%AD%A6%E7%94%9F%E7%BD%91%E7%BB%9C%E6%94%BB%E9%98%B2%E5%A4%A7%E8%B5%9B%E9%83%A8%E5%88%86#p-4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第二届广东省大学生网络攻防大赛 simple_re 的相关文章

随机推荐

  • 【选择排序的稳定版本与非稳定版本】

    选择排序 非稳定版本与稳定版本 排序过程中选择一个比较大 xff08 大到小排序 xff09 的数 xff0c 然后把它放到数组中指定的位置 xff1b 这时候可以直接与数组中指定位置交换数据 xff0c 但是可能会导致同值的数据的顺序发生
  • 机器人路径规划_人工势场法

    机器人路径规划 人工势场法 原理 人工势场法是由Khatib提出的一种虚拟力法 原理是 xff1a 将机器人在环境中的运动视为一种机器人在虚拟的人工受力场的运动 障碍物对机器人产生斥力 xff0c 目标点对机器人产生引力 xff0c 引力和
  • python中调用 imread 报错: ImportError: cannot import name imread

    现象 xff1a from scipy misc import imread imresize 报错 提示错误 ImportError cannot import name imread 但是import scipy的时候 显示正确 解决方
  • 改变python的默认路径为当前的工作路径

    改变python的默认路径为当前的工作路径 通过os模块来进行python中路径的更改 默认路径为 xff1a span class hljs prompt gt gt gt span span class hljs keyword imp
  • 无人驾驶技术——无人车的感官(激光雷达,雷达,摄像机)

    文章目录 激光雷达LIDAR什么是LIDARLIDAR原理LIDAR优点LIDAR缺点Velodyne激光雷达传感器HDL64每秒大约收集多少点 xff1f 雷达 RADARRADAR工作原理RADAR优点RADAR缺点 激光雷达 xff0
  • 机器学习——KNN

    机器学习算法 KNN KNN算法和KD Tree 思维导图
  • MATLAB:执行程序时调用bin文件夹下的.m文件,却显示找不到该文件

    在运行程序时 xff0c 明明要被调用的函数脚本就在当前文件夹bin 下面 xff0c 但是程序出错找不到对应的文件 xff0c 经过查询发现 xff1a 在命令行窗口输入 xff1a rehash toolboxcache 即可
  • 什么是定时器计数器

    定时器 计数器实际就是加1计数器 1 定时器和计数器的区别 xff1a 区别很小 xff0c 本质上都是计数器 xff0c 但定时器只是计数固定周期的脉冲 xff0c 所以根据频率可以计算出准确的时间 定时器模式 xff1a 对内部机器周期
  • 面试中问到动态库和静态库相关知识

    1 动态库相比较于静态库的优缺点 xff1f 动态库优点 xff1a 节省内存和代码重用 xff0c 当应用程序使用动态链接库时 xff0c 多个应用程序可以共享磁盘上的DLL xff08 windows xff09 和so linux 副
  • 【c++语法大全】

    C 43 43 基础入门 xff08 转载自黑马程序员 xff09 1 C 43 43 初识 1 1 第一个C 43 43 程序 编写一个C 43 43 程序总共分为4个步骤 创建项目创建文件编写代码运行程序 1 1 1 创建项目 Visu
  • Ubuntu20.04 USB网卡驱动安装 - MT7601u

    型号 xff1a TL WN725N 1 0 免驱版 芯片 xff1a MT7601u 具体型号可使用 96 lsusb 96 命令查看 确认型号为mt7601u后 执行如下命令 sudo apt install git build ess
  • 【浅谈插入排序】

    浅谈插入排序 插入排序 xff0c 是把无序数列中的数一个个插入到有序数列中 xff0c 直到无序数列没有数为止 比如有这么一个数列 xff1a 2 4 6 1 3 5 14 2 0 10 一共有10个数 xff0c 我们可以把第一个数当做
  • Meta Learning(元学习)详解

    元学习 概述基本概念基本分类 基本流程模型结构 概述 元学习 xff08 Meta Learing xff09 的提出是针对传统神经网络 模型的泛化性能不足 对信种类任务适应性较差的特点 主要表现为通过少量的计算和新训练数即可用于模型上实现
  • 2022 *CTF REVERSE 的 NaCl

    2022 CTF REVERSE 的 NaCl 下载附件 xff1a 照例扔入 exeinfope 中查看信息 xff1a 照例扔入虚拟机中运行一下 xff0c 查看主要回显信息 xff1a 照例扔入 IDA64 中查看伪代码 xff0c
  • python编码问题的一点笔记

    Python编码 xff1a 中文乱码问题 xff1a 如果开头不声明保存编码的格式是什么 xff0c 那么它会默认使用 ASCII 码保存文件 这时如果你的代码中有中文就会出错了 xff0c 即使你的中文是包含在注释里面的 声明中文编码格
  • 对 IDA 结构体操作的一些理解

    对 IDA 结构体操作的一些理解 前言 xff1a 刚学逆向时把 IDA pro 权威指南过了一遍 xff0c 但读得并不是很细 xff0c 满足日常使用还是没问题的 xff0c 但是对于一些细节的操作或提高效率的方法倒是没能掌握 比如 I
  • 第二届广东省大学生网络攻防大赛 pyre

    第二届广东省大学生网络攻防大赛 pyre 以前做过 pyc 逆向 xff0c 直接的 python exe 逆向还是第一次 xff1a 第一种方法 xff1a 用 pyinstxtractor py 将 exe 文件转换成 pyc 文件 用
  • 2022 年网刃杯 ez_algorithm

    2022 年网刃杯 ez algorithm 下载附件 xff1a 照例扔入 exeinfope 中查看信息 xff0c 64 位无壳 xff1a 照例运行一下 xff0c 查看主要回显信息 xff1a 照例扔入 IDA64 中查看伪代码
  • Base-N 算法加密解密实现:

    目录 Base N 算法加密解密实现 xff1a Base64 加密解密 xff1a xff08 C 语言 python xff09 Base32 加密解密 xff1a xff08 C 语言 xff09 Base N 算法加密解密实现 xf
  • 第二届广东省大学生网络攻防大赛 simple_re

    第二届广东省大学生网络攻防大赛 simple re 流程总结 xff1a xff08 思路原文出自 JANlittle 师傅 xff09 程序将关键函数以对象元素的形式存在对象里 xff0c 然后在申请内存中搭配指针间接调用 xff0c 关