攻防世界---->Newbie_calculations

news2024/11/23 15:35:55

学习笔记。

前言:试过od动态分析, 然后发现,那些函数不完全是混淆,怎么剥离 - - 不会

现在学会了。

参考:

xctf-Newbie_calculations - jane_315 - 博客园 (cnblogs.com)icon-default.png?t=O83Ahttps://www.cnblogs.com/jane315/p/13769641.html#:~:text=%E6%9F%A5%E5%A3%B3%E6%97%A0%E5%A3%B3%EF%BC%8C%E4%BD%BF

下载 查壳。

32ida打开。

先运行一下:

输入没反应,不回显。。。?

ida跟进看看。

可以得知 flag是%c一个一个打印出来的。(已老实)

函数分析前置知识:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
	/*关键点;while(X的值) 0和非0值。*/
	
	
	//对照实验:
	//第一组:
	int s = -100; //X ->负数
	int i = 0;	//i--
	int s2 = 100; //X ->正数
	int k = 0;	//k--
	//第二组:
	int s1 = -100;//X ->负数
	int j = 0;//j++
	int s3 = 100; //X ->正数
	int l = 0;//l++


	
	while (s) //符号为 “ - ”时
	{
		i--;	// i实际取值	呈自增 
		s--;
	}
	printf("i--->%d\ns--->%d\n", i, s);
	
	while (s2)	//符号为“ + ” 时
	{
		k--;	//k 呈自减
		s2--;
	}
	printf("k--->%d\ns2--->%d\n", k, s2);
	printf("\n");

	while (s1)//符号为 “ - ”时
	{
		j++;	//j实际取值呈 自减
		s1--;
	}
	printf("j--->%d\ns1--->%d\n", j, s1);
	while (s3)//符号为 “ + ”时
	{
		l++; // l呈自增。
		s3--;
	}
	printf("l--->%d\ns3--->%d\n", l, s3);
	printf("\n");
	system("pause");
	return 0;
}


运行结果:

原因:

回归本题正式:

分析:

①        sub_401100

所以 sub_401000实际ret的值就是 v120:

说的很乱 :

直白点:

sub_401220的判断分析,同上就好:

编写脚本:

 = = 

踩坑 

尼玛 ,提取main值的时候记得修改v120的范围。(改成32)

(我说,为什么我提取出来和网上wp不一样??)

脚本:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int sub_401100(int *a1, int a2) 
{
	*a1= *a1 * a2;
	return a1;
};

int sub_401000(int *a1, int a2)
{
	*a1 = *a1 + a2;
	return a1;
};

int sub_401220(int *a1, int a2)
{
	*a1 = *a1 - a2;
	return a1;
};



int main()
{
	int v3; // eax
	int v4; // eax
	int v5; // eax
	int v6; // eax
	int v7; // eax
	int v8; // eax
	int v9; // eax
	int v10; // eax
	int v11; // eax
	int v12; // eax
	int v13; // eax
	int v14; // eax
	int v15; // eax
	int v16; // eax
	int v17; // eax
	int v18; // eax
	int v19; // eax
	int v20; // eax
	int v21; // eax
	int v22; // eax
	int v23; // eax
	int v24; // eax
	int v25; // eax
	int v26; // eax
	int v27; // eax
	int v28; // eax
	int v29; // eax
	int v30; // eax
	int v31; // eax
	int v32; // eax
	int v33; // eax
	int v34; // eax
	int v35; // eax
	int v36; // eax
	int v37; // eax
	int v38; // eax
	int v39; // eax
	int v40; // eax
	int v41; // eax
	int v42; // eax
	int v43; // eax
	int v44; // eax
	int v45; // eax
	int v46; // eax
	int v47; // eax
	int v48; // eax
	int v49; // eax
	int v50; // eax
	int v51; // eax
	int v52; // eax
	int v53; // eax
	int v54; // eax
	int v55; // eax
	int v56; // eax
	int v57; // eax
	int v58; // eax
	int v59; // eax
	int v60; // eax
	int v61; // eax
	int v62; // eax
	int v63; // eax
	int v64; // eax
	int v65; // eax
	int v66; // eax
	int v67; // eax
	int v68; // eax
	int v69; // eax
	int v70; // eax
	int v71; // eax
	int v72; // eax
	int v73; // eax
	int v74; // eax
	int v75; // eax
	int v76; // eax
	int v77; // eax
	int v78; // eax
	int v79; // eax
	int v80; // eax
	int v81; // eax
	int v82; // eax
	int v83; // eax
	int v84; // eax
	int v85; // eax
	int v86; // eax
	int v87; // eax
	int v88; // eax
	int v89; // eax
	int v90; // eax
	int v91; // eax
	int v92; // eax
	int v93; // eax
	int v94; // eax
	int v95; // eax
	int v96; // eax
	int v97; // eax
	int v98; // eax
	int v99; // eax
	int v100; // eax
	int v101; // eax
	int v102; // eax
	int v103; // eax
	int v104; // eax
	int v105; // eax
	int v106; // eax
	int v107; // eax
	int v108; // eax
	int v109; // eax
	int v110; // eax
	int v111; // eax
	int v112; // eax
	int v113; // eax
	int v115; // [esp-8h] [ebp-9Ch]
	int v116; // [esp-4h] [ebp-98h]
	int v117; // [esp-4h] [ebp-98h]
	int i; // [esp+4h] [ebp-90h]
	int j; // [esp+8h] [ebp-8Ch]
	int v120[32]; // [esp+Ch] [ebp-88h] BYREF
	int v121; // [esp+8Ch] [ebp-8h]

	for (i = 0; i < 32; ++i)
		v120[i] = 1;
	v121 = 0;
	puts("Your flag is:");
	v3 = sub_401100(v120, 1000000000);
	v4 = sub_401220(v3, 999999950);
	sub_401100(v4, 2);
	v5 = sub_401000(&v120[1], 5000000);
	v6 = sub_401220(v5, 6666666);
	v7 = sub_401000(v6, 1666666);
	v8 = sub_401000(v7, 45);
	v9 = sub_401100(v8, 2);
	sub_401000(v9, 5);
	v10 = sub_401100(&v120[2], 1000000000);
	v11 = sub_401220(v10, 999999950);
	v12 = sub_401100(v11, 2);
	sub_401000(v12, 2);
	v13 = sub_401000(&v120[3], 55);
	v14 = sub_401220(v13, 3);
	v15 = sub_401000(v14, 4);
	sub_401220(v15, 1);
	v16 = sub_401100(&v120[4], 100000000);
	v17 = sub_401220(v16, 99999950);
	v18 = sub_401100(v17, 2);
	sub_401000(v18, 2);
	v19 = sub_401220(&v120[5], 1);
	v20 = sub_401100(v19, 1000000000);
	v21 = sub_401000(v20, 55);
	sub_401220(v21, 3);
	v22 = sub_401100(&v120[6], 1000000);
	v23 = sub_401220(v22, 999975);
	sub_401100(v23, 4);
	v24 = sub_401000(&v120[7], 55);
	v25 = sub_401220(v24, 33);
	v26 = sub_401000(v25, 44);
	sub_401220(v26, 11);
	v27 = sub_401100(&v120[8], 10);
	v28 = sub_401220(v27, 5);
	v29 = sub_401100(v28, 8);
	sub_401000(v29, 9);
	v30 = sub_401000(&v120[9], 0);
	v31 = sub_401220(v30, 0);
	v32 = sub_401000(v31, 11);
	v33 = sub_401220(v32, 11);
	sub_401000(v33, 53);
	v34 = sub_401000(&v120[10], 49);
	v35 = sub_401220(v34, 2);
	v36 = sub_401000(v35, 4);
	sub_401220(v36, 2);
	v37 = sub_401100(&v120[11], 1000000);
	v38 = sub_401220(v37, 999999);
	v39 = sub_401100(v38, 4);
	sub_401000(v39, 50);
	v40 = sub_401000(&v120[12], 1);
	v41 = sub_401000(v40, 1);
	v42 = sub_401000(v41, 1);
	v43 = sub_401000(v42, 1);
	v44 = sub_401000(v43, 1);
	v45 = sub_401000(v44, 1);
	v46 = sub_401000(v45, 10);
	sub_401000(v46, 32);
	v47 = sub_401100(&v120[13], 10);
	v48 = sub_401220(v47, 5);
	v49 = sub_401100(v48, 8);
	v50 = sub_401000(v49, 9);
	sub_401000(v50, 48);
	v51 = sub_401220(&v120[14], 1);
	v52 = sub_401100(v51, -294967296);
	v53 = sub_401000(v52, 55);
	sub_401220(v53, 3);
	v54 = sub_401000(&v120[15], 1);
	v55 = sub_401000(v54, 2);
	v56 = sub_401000(v55, 3);
	v57 = sub_401000(v56, 4);
	v58 = sub_401000(v57, 5);
	v59 = sub_401000(v58, 6);
	v60 = sub_401000(v59, 7);
	sub_401000(v60, 20);
	v61 = sub_401100(&v120[16], 10);
	v62 = sub_401220(v61, 5);
	v63 = sub_401100(v62, 8);
	v64 = sub_401000(v63, 9);
	sub_401000(v64, 48);
	v65 = sub_401000(&v120[17], 7);
	v66 = sub_401000(v65, 6);
	v67 = sub_401000(v66, 5);
	v68 = sub_401000(v67, 4);
	v69 = sub_401000(v68, 3);
	v70 = sub_401000(v69, 2);
	v71 = sub_401000(v70, 1);
	sub_401000(v71, 20);
	v72 = sub_401000(&v120[18], 7);
	v73 = sub_401000(v72, 2);
	v74 = sub_401000(v73, 4);
	v75 = sub_401000(v74, 3);
	v76 = sub_401000(v75, 6);
	v77 = sub_401000(v76, 5);
	v78 = sub_401000(v77, 1);
	sub_401000(v78, 20);
	v79 = sub_401100(&v120[19], 1000000);
	v80 = sub_401220(v79, 999999);
	v81 = sub_401100(v80, 4);
	v82 = sub_401000(v81, 50);
	sub_401220(v82, 1);
	v83 = sub_401220(&v120[20], 1);
	v84 = sub_401100(v83, -294967296);
	v85 = sub_401000(v84, 49);
	sub_401220(v85, 1);
	v86 = sub_401220(&v120[21], 1);
	v87 = sub_401100(v86, 1000000000);
	v88 = sub_401000(v87, 54);
	v89 = sub_401220(v88, 1);
	v90 = sub_401000(v89, 1000000000);
	sub_401220(v90, 1000000000);
	v91 = sub_401000(&v120[22], 49);
	v92 = sub_401220(v91, 1);
	v93 = sub_401000(v92, 2);
	sub_401220(v93, 1);
	v94 = sub_401100(&v120[23], 10);
	v95 = sub_401220(v94, 5);
	v96 = sub_401100(v95, 8);
	v97 = sub_401000(v96, 9);
	sub_401000(v97, 48);
	v98 = sub_401000(&v120[24], 1);
	v99 = sub_401000(v98, 3);
	v100 = sub_401000(v99, 3);
	v101 = sub_401000(v100, 3);
	v102 = sub_401000(v101, 6);
	v103 = sub_401000(v102, 6);
	v104 = sub_401000(v103, 6);
	sub_401000(v104, 20);
	v105 = sub_401000(&v120[25], 55);
	v106 = sub_401220(v105, 33);
	v107 = sub_401000(v106, 44);
	v108 = sub_401220(v107, 11);
	sub_401000(v108, 42);
	sub_401000(&v120[26], v120[25]);
	sub_401000(&v120[27], v120[12]);
	v115 = v120[27];
	v109 = sub_401220(&v120[28], 1);
	v110 = sub_401000(v109, v115);
	sub_401220(v110, 1);
	v116 = v120[23];
	v111 = sub_401220(&v120[29], 1);
	v112 = sub_401100(v111, 1000000);
	sub_401000(v112, v116);
	v117 = v120[27];
	v113 = sub_401000(&v120[30], 1);
	sub_401100(v113, v117);
	sub_401000(&v120[31], v120[30]);
	printf("CTF{");
	for (j = 0; j < 32; ++j)
		printf("%c", v120[j]);
	printf("}\n");
	return 0;
}

结果:

CTF{daf8f4d816261a41a115052a1bc21ade}

题外话:

>>>题整体不难,难点,C语言循环的理解。分析混淆代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

111.WEB渗透测试-信息收集-ARL(2)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;110.WEB渗透测试-信息收集-ARL&#xff08;1&#xff09; 2、安装ARL 1、最好先“apt-g…

创建django项目时,不同的编译类型有什么区别

这里主要提及的是 project venv 和 Custom environment 两种类型。 简单来说&#xff0c;project venv 是Python 3.3及以上版本中自带的虚拟环境管理工具&#xff0c;使用venv可以为每个项目创建一个独立的环境&#xff1a;python -m venv myprojectenv &#xff08;项目名后e…

电梯,建模的常见话题

以下是最近一则"女婿开电梯门导致岳父惨死"的新闻&#xff0c;可惜生命的同时&#xff0c;也引发了一系列联想。 不少人不了解或者了解但经常下意识忽略&#xff1a;电梯的门和轿厢是分离的部件。部件之间的协作如果有失误&#xff0c;系统就会出问题。电梯可以看作是…

JVM 基础、GC 算法与 JProfiler 监控工具详解

目录 1、引言 1.1 JVM内存与本地内存 1.2 JVM与JDK的关系 2、JVM基础 2.1 JVM&#xff08;Java Virtual Machine&#xff09; 2.2 Java与JVM的关系 2.3 JVM的内存结构 2.3.1 堆内存 2.3.2 栈内存 2.3.3 方法区 2.3.4 本地方法栈 2.3.5 程序计数器&#xff08;PC寄存…

Python+Matplotlib创建y=sinx、y=cosx、y=sinx+cosx可视化

y sin x (奇函数)&#xff1a; 图像关于原点对称。 对于任何 x&#xff0c;sin(-x) -sin(x)&#xff0c;符合奇函数定义。 y cos x (偶函数)&#xff1a; 图像关于 y 轴对称。 对于任何 x&#xff0c;cos(-x) cos(x)&#xff0c;符合偶函数定义。 y sin x cos x (既…

jQuery——对象的查找(查找孩子-父母-兄弟标签)

在已经匹配出的元素集合中根据选择器查找孩子/父母/兄弟标签&#xff0c;并封装为新的 jQuery 对象返回 children&#xff08;&#xff09; 子标签中找 find&#xff08;&#xff09; 后代标签中找 parent&#xff08;&#xff09; 父标签 prevAll&#xff08;&#xff0…

【内存池】——Nginx 内存池结构设计

目录 实现思路——分而治之 Nginx 的内存池结构图 结构体设计 内存池设计&#xff1a; 数据区属性设计&#xff1a; 大块内存区设计&#xff1a; 伪代码解释&#xff1a; 数据结构实现 实现思路——分而治之 算法结构&#xff1a;链表顺序表 1、对于每个请求或者连接都会建…

通信工程学习:什么是IGMP因特网组管理协议

IGMP&#xff1a;因特网组管理协议 IGMP&#xff08;Internet Group Management Protocol&#xff0c;因特网组管理协议&#xff09;是TCP/IP协议簇中负责组播成员管理的协议。它主要用于在用户主机和与其直接相连的组播路由器之间建立和维护组播组成员关系。以下是关于IGMP协议…

浙江工业大学《2019年+2023年828自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《浙江工业大学828自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2019年真题 2023年真题 Part1&#xff1a;2019年2023年完整版真题 2019年真题 2023年…

NVIDIA H100 GPU 上的机密计算可实现安全且值得信赖的 AI

NVIDIA H100 GPU 上的机密计算,实现安全可信的 AI 文章目录 前言1. 使用硬件虚拟化的 NVIDIA 机密计算2. 跨硬件、固件和软件保护 AI3. NVIDIA H100 GPU 的硬件安全性4. 在机密计算模式下运行 NVIDIA H100 GPU5. NVIDIA Hopper H100 机密计算为可信 AI 带来的优势6. 虚拟机上基…

68.【C语言】动态内存管理(重点)(1)

本文为数据结构打下基础 备注:数据结构需要掌握指针,结构体和动态内存管理 目录 1.内存开辟的方式 2.malloc函数 cplusplus网翻译 提炼要点 操作内存空间 01.开辟内存空间成功 02.开辟内存空间失败 如果是x64debug环境下,可能会成功 1.内存开辟的方式 01.创建变量 i…

从0到1酒店民宿管理系统

最近几天放假没事做&#xff0c;在家里就像把学过的winform技术整合下&#xff0c;一些用的技术点整理整理。想着做个什么软件那&#xff1f;无意中看到的酒店管理系统给了我思路。为啥不自己做一个那&#xff1f;说做就做。首先技术确定了使用winform为啥不用wpf那&#xff1f…

Linux环境基础开发工具使用(2)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Linux环境基础开发工具使用(2) 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. Li…

微服务_3.微服务保护

文章目录 一、微服务雪崩及解决方法1.1、超时处理1.2、仓壁模式1.3、断路器1.4、限流 二、Sentinel2.1、流量控制2.1.1、普通限流2.1.2、热点参数限流 2.2、线程隔离2.3、熔断降级2.3.1、断路器状态机2.3.2、断路器熔断策略2.3.2.1、慢调用2.3.2.2、异常比例&#xff0c;异常数…

Redis --- 第三讲 --- 通用命令

一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value &#xff1a; key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…

GIS发展趋势与国产GIS现状

地理信息系统&#xff08;GIS&#xff09;作为获取、管理、分析和可视化地理空间数据的重要工具&#xff0c;在多个领域发挥着至关重要的作用。随着技术的不断进步&#xff0c;GIS正朝着更高效、更智能的方向发展。 GIS发展趋势 1. 3D GIS与虚拟现实&#xff08;VR&#xff0…

滑动窗口--(上篇)

滑动窗口 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**。**如果不存在符合条件的子数组&#xff0c;返回 0 。 …

LLM Visualization

Brendan Bycroft的网站&#xff0c;提供了交互式的可视化工具&#xff0c;展示了大型语言模型&#xff08;LLMs&#xff09;的内部机制 通过这个 链接 https://bbycroft.net/llm 访问 借助这个交互可视化&#xff0c;能够加深对模型结构和行为的了解

国庆更新|芒果YOLOv8改进181:即插即用,最新注意力机制EMA:具有跨空间学习的高效多尺度注意力模块,ICCASSP论文

💡本篇内容:芒果YOLOv8改进135:最新注意力机制EMA:即插即用,具有跨空间学习的高效多尺度注意力模块,ICCASSP 论文 **EMA|具有跨空间学习的高效多尺度注意力模块 | 即插即用 该模块通常包括多个并行的注意力子模块,每个子模块关注于输入数据的不同尺度或分辨率。这些子模块…

【SpringCloud】优雅实现远程调⽤-OpenFeign

OpenFeign 1. RestTemplate存在问题2. OpenFeign介绍Spring Cloud Feign 3. 代码获取 1. RestTemplate存在问题 观察咱们远程调⽤的代码 RequestMapping("/{orderId}")public OrderInfo getOrderInfoById(PathVariable("orderId") Integer id) {OrderInfo…