NewStarCTF_RE(week1,2)

[NewStarCTF 2023 公开赛道]easy_RE

ida 可能会把 一个数组或字符串拆开,可以通过计算地址,知道是一起的

也有的会藏在汇编窗口

Segments

IDA的Segments窗口 :shift+f7

https://www.cnblogs.com/sch01ar/p/9477697.html

ida 各种窗口也是需要看看

[翻译]The IDA Pro book 第5章---IDA DATA DISPLAY-外文翻译-看雪-安全社区|安全招聘|kanxue.com

 Endian

ant=[1968519710, 2069379587, 1297621516, 2068854845, 1936406553]
key=0x12345678
for i in range(5):ant[i]^=key
# for i in range(5):
#     print(str(ant[i]))
#chr((result >> (i * 8)) & 0xFF) 提取每一字节
flag=''
for i in range(5):flag+=''.join([chr((ant[i]>>(j*8))&0xff) for j in range(4)])
print(flag)
#flag{llittl_Endian_a

[NewStarCTF 2023 公开赛道]EzPE

这个EXE怎么运行不了呢?

去 010看看

修改后,就是正常 exe文件了。

AndroGenshin

就是一个简单的 RC4+变表base64

烦人的是,rc4工具没解出来,写脚本没有 Crypto 库,只能去虚拟机里运行。0-0

from Crypto.Cipher import ARC4
arr = [0x7D, 0xEF, 101, 0x97, 77, 0xA3, 0xA3, 110, 58, 230, 0xBA, 206, 84, 84, 0xBD, 0xC1, 30, 0x3F, 104, 0xB2, 130, 0xD3, 0xA4, 94, 75, 16, 0x20, 33, 0xC1, 0xA0, 120, 0x2F, 30, 0x7F, 0x9D, 66, 0xA3, 0xB5, 0xB1, 0x2F, 0, 0xEC, 106, 107, 0x90, 0xE7, 0xFA, 16, 36, 34, 91, 9, 0xBC, 81, 5, 0xF1, 0xEB, 3, 54, 150, 40, 0x77, 202, 150]
arrBytes = bytes(arr)
key = b"genshinimpact"
enc = ARC4.new(key)
base64_table = enc.decrypt(arrBytes)
print(base64_table)# b'BADCFEHGJILKNMPORQTSVUXWZYbadcfehgjilknmporqtsvuxwzy1032547698/+'
import base64str1 = "YnwgY2txbE8TRyQecyE1bE8DZWMkMiRgJW1="
string1 = "BADCFEHGJILKNMPORQTSVUXWZYbadcfehgjilknmporqtsvuxwzy1032547698/+"    #替换的表
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))
# str.maketrans(table,result) 创建映射表,将table映射给result
# str1.translate(trans) 用 trans 映射表替换 str1
# b'flag{0h_RC4_w1th_Base64!!}'

[NewStarCTF 2023 公开赛道]C?C++?

		private static void Main(string[] args){int num = 35;int[] array = new int[]{68,75,66,72,99,19,19,78,83,74,91,86,35,39,77,85,44,89,47,92,49,88,48,91,88,102,105,51,76,115,-124,125,79,122,-103};char[] array2 = new char[35];int[] array3 = new int[35];Console.Write("Input your flag: ");string text = Console.ReadLine();for (int i = 0; i < text.Length; i++){array2[i] = text[i];}string text2 = "NEWSTAR";for (int j = 0; j < num; j++){char[] array4 = array2;int num2 = j;array4[num2] += (char)j;char[] array5 = array2;int num3 = j;array5[num3] -= ' ';}for (int k = 0; k < 7; k++){char[] array6 = array2;int num4 = k;array6[num4] += (char)(k ^ (int)(-(int)(text2[k] % '\u0004')));char[] array7 = array2;int num5 = k + 7;array7[num5] += text2[k] % '\u0005';char[] array8 = array2;int num6 = k + 14;array8[num6] += (char)(2 * k);char[] array9 = array2;int num7 = k + 21;array9[num7] += (char)(k ^ 2);char[] array10 = array2;int num8 = k + 28;array10[num8] += text2[k] / '\u0005' + '\n';}for (int l = 0; l < num; l++){int num9 = (int)array2[l];array3[l] = num9;}for (int m = 0; m < 35; m++){bool flag = m == 34 && array3[m] == array[m];if (flag){Console.WriteLine("Right!");}bool flag2 = array3[m] == array[m];if (!flag2){Console.WriteLine("Wrong!");break;}}}}
}

最开始看,觉得只要满足最后条件就行了,但发现不是,应该是要最后的,也不是每一个arrayX

都对应一步操作,要逆所有的操作

v6 = 35
j = 0
v10 = [68,75,66,72,99,19,19,78,83,74,91,86,35,39,77,85,44,89,47,92,49,88,48,91,88,102,105,51,76,115,-124,125,79,122,-103]
a2 = "NEWSTAR"
for j in range(7):v10[j + 28] -= (ord(a2[j])//5) + 10v10[j + 21] -= j ^ 2v10[j + 14] -= 2 * jv10[j + 7] -= ord(a2[j]) % 5v10[j] -= j ^ -(ord(a2[j]) % 4)
for i in range(v6):v10[i] -= iv10[i] += 32print(chr(v10[i]%256), end='')

R4ndom

一个 elf 文件,42位flag,一开始打算直接动调,但想想觉得工程有点大,要42次。并且去动调的时候,发现有反调试。先想想怎么调试:

在 main 函数开头下断点,看反调试在 main 前/后;一般就是在 init_array 里。

想到ctf一般都是伪随机,去看看有没有随机数种子。

由于设置了随机数种子,所以每次rand()的结果都是一样的,这就是伪随机

一个反调试( ptrace),一个随机数种子

要用标准整数型,要引用库

#include <cstdint> 

uint8_t enc;

#include <iostream>
#include <cstdint>
using namespace std;
int main() {/*int enc[6];enc[0] = 0x3513AB8AB2D7E6EELL;enc[1] = 0x2EEDBA9CB9C97B02LL;enc[2] = 0x16E4F8C8EEFA4FBDLL;enc[3] = 0x383014F4983B6382LL;enc[4] = 0xEA32360C3D843607LL;enc[5] = 42581LL;*/__uint8_t enc[42] = { 0xEE, 0xE6, 0xD7, 0xB2, 0x8A, 0xAB, 0x13, 0x35, 0x02, 0x7B, 0xC9, 0xB9, 0x9C, 0xBA, 0xED, 0x2E,0xBD, 0x4F, 0xFA, 0xEE, 0xC8, 0xF8, 0xE4, 0x16, 0x82, 0x63, 0x3B, 0x98, 0xF4, 0x14, 0x30, 0x38,0x07, 0x36, 0x84, 0x3D, 0x0C, 0x36, 0x32, 0xEA, 0x55, 0xA6 };unsigned char Table[] ={0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01,0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D,0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4,0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, 0x04, 0xC7,0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2,0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E,0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB,0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, 0xD0, 0xEF, 0xAA, 0xFB,0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C,0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C,0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D,0x64, 0x5D, 0x19, 0x73, 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A,0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3,0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D,0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A,0xAE, 0x08, 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E,0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9,0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9,0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99,0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16};/*for (i = 0; i < strlen(input); ++i){v3 = input[i];v4 = rand();input[i] = Table[(16 * ((v3 + v4 % 255) >> 4) + 15) & (v3 + v4 % 255)];}*/srand(0x5377654Eu);for (int i = 0; i < 42; ++i) {for (int j = 0; j < 256; ++j) {if (Table[j] == enc[i]) {printf("%c", (j - rand() % 255));}}}return 0;
}

easy_enc

第一个,类似凯撒加密

第二个,通过Key相加

第三个,按位取反

第四个,相乘

可能溢出

C 的代码都有编译器的默认类型推断影响,就是可能有(隐式)转换

可以定义 uint8_t ,或者自己去截断。 

因为 input 是 char 类型,*52可能会溢出,故第四个不能逆,就只能爆破了。

#include <stdio.h>
#include <string.h>
#include <cstdint>
// 感觉比 C++好一些
int main()
{uint8_t enc[100] = { 0xE8, 0x80, 0x84, 0x8, 0x18, 0x3C, 0x78, 0x68, 0x0, 0x70, 0x7C, 0x94, 0xC8, 0xE0, 0x10, 0xEC, 0xB4, 0xAC, 0x68, 0xA8, 0xC, 0x1C, 0x90, 0xCC, 0x54, 0x3C, 0x14, 0xDC, 0x30 };char key[20] = "NewStarCTF";int len = strlen(key);uint8_t i, j;//必须是 uint8_t 限定类型for (i = 0; i < 29; i++) {for (j = 32; j < 127; j++) {uint8_t tmp = j;//这里也是。if (j < 'A' || j > 'Z'){if (j < '0' ||j > '9'){if (j >= 'a' && j <= 'z')j = (j- 89) % 26 + 97;}else{j = (j - 45) % 10 + 48;}}else{j = (j - 52) % 26 + 65;}j += key[i % len];j = ~j;j *= 52;if (j == enc[i]) {if ((tmp <= 'Z' && tmp >= 'A') || (tmp <= 'z' && tmp >= 'a')) {printf("%c",tmp);}}j = tmp;}}return 0;
}

这么简单一个脚本,却也花了一段时间,唉!

Petals

不对,就是那个 call E8 不对,

就是下标匹配的问题

enc = [0xD0, 0xD0, 0x85, 0x85, 0x80, 0x80, 0xC5, 0x8A, 0x93, 0x89,0x92, 0x8F, 0x87, 0x88, 0x9F, 0x8F, 0xC5, 0x84, 0xD6, 0xD1,0xD2, 0x82, 0xD3, 0xDE, 0x87]
longth = 25
#enc = list(map(chr, enc))
v5 = []
for i in range(256):v5.append(~(i ^ longth) & 0xff)# 遍历 enc 并打印对应的索引
for i in range(longth):#print(enc[i])if enc[i] in v5:tmp = v5.index(enc[i])print(chr(tmp),end='')else:print(f"Value {enc[i]} not found in v5")

 特别注意:

 for 操作明确是 byte ,要 &0xff

 还有就是 index()的使用

PZthon

解包,发现 python 版本是 3.8

uncompyle6只支持到py3.8

用 pycdc 或者 在线网站

代码很简单,直接秒了

AndroDbgme

放 jadx 没有什么发现,看题目名字应该是要调试

没有什么反应。

想直接在模拟器里加调试功能,结果不行,MT 有点问题

不对,最后用 MT 搞出来了,修改完 xml 文件后,保存,直接重安装。

不过这个一调试,直接就出 flag ,想知道为什么。

lazy_activtiy

要么是 data或者其他目录下藏着一个 apk 文件

或者就是存在文件里面哪里。

嗯,jeb 不好看,主要用来调试吧,还是喜欢用 jadx

不过 jeb 有一些注释还不错

两个结合用吧

嗯,这个题可以动调,也可以直接去找 editText

emmm但在我尝试动调前,AndroidKiller一把梭了

有点问题

去找一下算了

找到了。

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

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

相关文章

AMD平台,5600X+6650XT,虚拟机安装macOS 14(2024年6月)

AMD平台安装macOS 14的麻烦&#xff0c;要比Intel平台多的多&#xff0c;由于macOS从13开始&#xff0c;对CPU寄存器的读取进行了改变&#xff0c;导致AMD平台只要安装完macOS 13及以后版本&#xff0c;开机后就报五国语言错误&#xff0c;不断重启。改vmx文件&#xff0c;被证…

mongodb command

1. start and stop ./mongod --dbpath -dbpath /data/shard1/db --logpath -dbpath /data/shard1/db/logs/mongodb.log --fork mongod --shutdown --dbpath /data/shard1/db MongoDB基础篇-03-启动与关闭_mongodb启动和关闭-CSDN博客 2. 查看分片数据分布 mongo mongo01.c…

用React编写一个密码组件表单

theme: condensed-night-purple highlight: atelier-cave-light 背景介绍 我们在使用网站或者应用程序的登录界面或创建帐户界面时&#xff0c;往往避免不了需要用户输入密码这一步骤&#xff0c;而用户是否可以选择看见他们输入的密码是十分重要的一项功能。尤其是在当输入的…

Java面向对象-final关键字

Java面向对象-final关键字 一、final1、修饰变量2、修饰方法3、修饰类4、案例 一、final 可以修饰变量、方法、类 1、修饰变量 final修饰一个变量&#xff0c;变量的值不可以改变&#xff0c;这个变量就变成一个字符常量&#xff0c;约定俗称的规定&#xff1a;名字大写。 f…

【flink实战】flink-connector-mysql-cdc导致mysql连接器报类型转换错误

文章目录 一. 报错现象二. 方案二&#xff1a;重新编译打包flink-connector-cdc1. 排查脚本2. 重新编译打包flink-sql-connector-mysql-cdc-2.4.0.jar3. 测试flink环境 三. 方案一&#xff1a;改造flink连接器 一. 报错现象 flink sql任务是&#xff1a;mysql到hdfs的离线任务&…

IPTCP知识

1. IP&#xff1a; IP地址是一个32位的二进制数&#xff0c;通常被分割为4个“8位二进制数”IP地址分类&#xff1a;A类地址、B类地址、C类地址、D类地址、E类地址 A类地址分配给规模特别大的网络使用&#xff0c;B类地址分配给一般的中型网络&#xff0c;C类地址分配给小型网…

短URL服务设计

引言 在营销系统里&#xff0c;为了增加系统的活跃用户数&#xff0c;经常会有各种各样的营销活动。这类活动几乎都是为了充分利用存量用户的价值&#xff0c;促使他们分享产品或App以达到触达到更多用户的目的。又或者是出于营销目的&#xff0c;群发优惠券触达短信这种场景。…

MVC 框架安全

在现代 Web 开发中&#xff0c;使用 MVC 架构是一种流行的做法。MVC 是 Model-View-Controller 的缩写&#xff0c;它将 Web 应用分为三层&#xff0c;View 层负责用户视图、页面展示等工作&#xff1b;Controller 负责应 用的逻辑实现&#xff0c;接收 View 层传入的用户请求&…

016基于SSM+Jsp的医院远程诊断系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

HDU - 5651 xiaoxin juju needs help(Java JS Python C C++)

题目来源 Problem - 5651 (hdu.edu.cn) 题目描述 众所周知&#xff0c;小新是一位才华横溢的程序员。当他还是小学六年级的学生时&#xff0c;他就知道回文字符串了。 今年夏天&#xff0c;他在腾讯实习。一天&#xff0c;他的领导来找小新帮忙。他的领导给了他一个字符串&a…

MySQL之优化服务器设置(五)

优化服务器设置 高级InnoDB设置 innodb_old_blocks_time InnoDB有两段缓冲池LRU(最近最少使用)链表&#xff0c;设计目的是防止换出长期很多次的页面。像mysqldump产生的这种一次性的(大)查询&#xff0c;通常会读取页面到缓冲池的LRU列表&#xff0c;从中读取需要的行&…

Android 支持库迁移到AndroidX

对应官方文档&#xff1a; developer.android.com/jetpack/and… 简单点说就是&#xff0c;对App开发者而言&#xff0c;AndroidX更加友好&#xff0c;因为我们引入时&#xff0c;只需要关注AndroidX中具体的需要引入的构件版本即可。且大部分具体的构件&#xff0c;具有一致的…

Ansys Mechanical|学习方法

Ansys Mechanical是Ansys的旗舰产品之一&#xff0c;涉及的学科体系全面丰富&#xff0c;包括的力学分支主要有理论力学&#xff0c;振动理论&#xff0c;连续介质力学&#xff0c;固态力学&#xff0c;物理力学&#xff0c;爆炸力学及应用力学等。 在自媒体及数字经济飞速发展…

单例集合:Collection

一.Collection Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。 一.add添加 1.细节1 如果我们要往List系列集合中添加数据,那么方法永远返回true,因为List系列的是允许元素重复的。 2.细节2 如果要往Set系列集合中添加数据,如果当前要添加元素不…

【Linux】进程间通信1——管道概念,匿名管道

1.进程间通信介绍 进程是计算机系统分配资源的最小单位&#xff08;严格说来是线程&#xff09;。每个进程都有自己的一部分独立的系统资源&#xff0c;彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作&#xff0c;才有了进程间通信。 进程间通信&#xff0c;顾名…

如何利用 TypeScript 的判别联合类型提升错误处理与代码安全性

欢迎回到 TypeScript 高级技巧系列文章。我们之前已经讨论了Extract、Exclude和Indexed Access Types&#xff0c;接下来我们将深入探讨我最喜欢的TypeScript特性之一&#xff1a;判别联合类型&#xff08;Discriminated Unions&#xff09;。为什么我如此钟爱它呢&#xff1f;…

【ROS里程计】中部分代码解释

bool OdomNodePub::Odom_Reset(ubt_odom::odomreset::Request& req, ubt_odom::odomreset::Response& res) {if(req.cmd "reset"){OdomResetFlag true;}else{OdomResetFlag false;}res.state "success";return true; } 该函数是一个ROS节点中…

【Mybatis-Plus】根据自定义注解实现自动加解密

背景 我们把数据存到数据库的时候&#xff0c;有些敏感字段是需要加密的&#xff0c;从数据库查出来再进行解密。如果存在多张表或者多个地方需要对部分字段进行加解密操作&#xff0c;每个地方都手写一次加解密的动作&#xff0c;显然不是最好的选择。如果我们使用的是Mybati…

边缘微型AI的宿主?—— RISC-V芯片

一、RISC-V技术 RISC-V&#xff08;发音为 "risk-five"&#xff09;是一种基于精简指令集计算&#xff08;RISC&#xff09;原则的开放源代码指令集架构&#xff08;ISA&#xff09;。它由加州大学伯克利分校在2010年首次发布&#xff0c;并迅速获得了全球学术界和工…

嵌入式门槛高不高,工资怎么样?

一般来说&#xff0c;嵌入式岗位的准入门槛其实并不是特别高。通常情况下&#xff0c;只要能够熟练掌握 C 语言编程以及单片机相关知识&#xff0c;就能够去制作一些较为简单的电子产品&#xff0c;由此可见其门槛相对而言是比较低的&#xff0c;相应的薪水可能也不会特别高。 …