REVERSE-PRACTICE-BUUCTF-26

REVERSE-PRACTICE-BUUCTF-26

    • [FlareOn6]FlareBear
    • [SUCTF2018]babyre
    • [GKCTF2020]WannaReverse
    • [FlareOn4]greek_to_me

[FlareOn6]FlareBear

apk文件,模拟器上运行,创建一个小熊,有三种方式交互,分别为“吃饭”,“篮球”以及“清理”
jadx-gui打开该apk,在com.fireeye.flarebear.FlareBearActivity中搜索flag,有个"danceWithFlag"
fb-dancewithflag
调用danceWithFlag的条件是isEcstatic返回真,去到isEcstatic,要判断三个变量的值
fb-isecstatic
有get(State),对应的就有set(State),来到set的地方,都是在原有的基础上加上传入的参数
fb-setstate
看看谁调用了change方法,有三个地方调用,分别是feed,play,clean,正好对应了那三种交互方式
不同的交互方式对三个State的影响不同,由传入的参数决定
fb-feed
fb-play
fb-clean
使用python的z3库解方程组,知道8次feed,4次play,2次clean

from z3 import *
feed=Int('feed')
play=Int('play')
clean=Int('clean')
s=Solver()
s.add(10*feed+(-2)*play+0*clean==72)
s.add(2*feed+4*play+(-1)*clean==30)
s.add(-1*feed+(-1)*play+6*clean==0)
if s.check():print(s.model())
# [clean = 2, play = 4, feed = 8]

8次feed,4次play,2次clean,顺序不用管,交互完即可得到flag
fb-flag

[SUCTF2018]babyre

exe程序,运行后提示了flag的格式,要求输入key,无壳,ida分析
交叉引用字符串“Please Input Key:”来到sub_7FF739422460函数
主要的逻辑为,读取输入的key,key对0x10000取模,然后进入循环给v6赋值,最后打印v6
babyre-logic
由于知道了flag的格式为"SUCTF{xxxxxxxxxxxxxxx}",写脚本爆破key,key正确时的输出即为flag

#include<stdio.h>
char v4_v5[]= {0x02, 0x03, 0x02, 0x01, 0x04, 0x07, 0x04, 0x05, 0x0A, 0x0B,
0x0A, 0x09, 0x0E, 0x0F, 0x0C, 0x0D, 0x10, 0x13, 0x10, 0x11,
0x14, 0x17, 0x16, 0x13, 0x1C, 0x19, 0x1E, 0x1F, 0x1C, 0x19,
0x1A, 0x1F, 0x24, 0x21, 0x22, 0x27, 0x24, 0x21, 0x22, 0x23,
0x28, 0x29, 0x2E, 0x2B, 0x24, 0x2D, 0x26, 0x2F, 0x38, 0x31,
0x3A, 0x3B, 0x34, 0x3D, 0x3E, 0x37, 0x30, 0x39, 0x32, 0x3B,
0x3C, 0x35, 0x36, 0x37, 0x48, 0x49, 0x42, 0x42, 0x44, 0x44,
0x46, 0x47, 0x48, 0x49, 0x4A, 0x4A, 0x4D, 0x4D, 0x4F, 0x4E,
0x50, 0x50, 0x52, 0x53, 0x55, 0x54, 0x56, 0x57, 0x59, 0x59,
0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5E, 0x60, 0x60, 0x63, 0x63,
0x64, 0x65, 0x67, 0x67, 0x69, 0x69, 0x6B, 0x6B, 0x6C, 0x6D,
0x6E, 0x6E, 0x70, 0x70, 0x72, 0x73, 0x74, 0x75, 0x77, 0x77,
0x78, 0x79, 0x7B, 0x7B, 0x7D, 0x7D, 0x7F, 0x7F, 0x81, 0x81,
0x83, 0x83, 0x8C, 0x8D, 0x8E, 0x8F, 0x88, 0x89, 0x8A, 0x8B,
0x8C, 0x8D, 0x8E, 0x87, 0x98, 0x91, 0x92, 0x93, 0x94, 0x95,
0x96, 0x97, 0x98, 0x99, 0x9A, 0x9A, 0x9C, 0x9C, 0x9E, 0x9E,
0xA0, 0xA0, 0xA2, 0xA2, 0xA4, 0xA4, 0xA6, 0xA6, 0xA8, 0xA8,
0xAA, 0xAA, 0xAC, 0xAC, 0xAE, 0xAE, 0xB0, 0xB1, 0xB2, 0xB3};
void main()
{int key = 0;for (; key < 0x10000; key++){char v6[31] = {0};v6[30] = 8;while (v6[30]){--v6[30];int v9;int v10;for (int j = 22; j; v6[j] |= v10 << v6[30]){v9 = v4_v5[22 * v6[30] + --j];v10 = (v9 >> ((key>> (2 * v6[30])) & 3)) & 1;}}if (v6[0] == 'S'&&v6[1] == 'U'&&v6[2] == 'C'&&v6[3] == 'T'&&v6[4] == 'F'&&v6[5]=='{'&&v6[21]=='}'){printf("key=%d\n", key);for (int j = 0; j < 22; j++){printf("%c", v6[j]);}printf("\n");}}
}
/*
key=12345
SUCTF{Flag_8i7244980f}
*/

[GKCTF2020]WannaReverse

勒索病毒程序,压缩包里有四个文件
WR-files
无论运行哪个exe,由提示点击"Decrypt"按钮,都会得到RSA私钥
ida分析WannaReverse.exe,交叉引用字符串"encrypto success!“来到sub_543220函数
启动clickme.exe,用0~9的十位数字生成一个32位的动态的AES密钥,然后进入sub_542D00函数进行加密
WR-sub_543220
分析sub_542D00函数,首先打开flag.txt文件流,获取文件大小,读取文件内容
WR-sub_542D00
从第147行到第174行,完成了对动态AES密钥的RSA加密
WR-sub_542D00
RSA加密的公钥在rdata段可以找到
WR-rsapubkey
往下走,这个for循环完成了对flag.txt文件内容的AES加密
WR-AESencrypt
继续向下走,将WannaReverse、经过RSA加密的32位AES密钥、经过AES加密的flag.txt文件内容写入flag.txt.Encry文件,也就是压缩包里的那个文件
WR-writefile
已知RSA的私钥和公钥,从flag.txt.Encry文件中取出经RSA加密的AES密钥,使用在线工具(https://oktools.net/rsa)解出程序使用的动态AES密钥,为"30776159143604297789676442413079”
WR-deRSA
使用010 editor抠出经AES加密的flag的密文,写脚本解AES即可得到flag
WR-cipher

from Crypto.Cipher import AES
from Crypto.Util.number import long_to_bytes
key="30776159143604297789676442413079"
cipher_data=\
"5C BC EA 89 BA 2B 18 27 79 3F 13 0A 8A 97 B4 9B\
CD 78 9B D8 35 92 05 45 4C 22 A5 69 37 EB 6E 2B\
0E BD 84 0F 91 61 38 F6 F1 BA 99 19 41 72 07 91\
F0 26 68 06 61 26 5C 20 35 DD CF FC 77 57 54 81\
F2 F2 E4 AF BF A2 1D 29 AE 6C 08 3B 76 1B 66 B8\
FE 72 CB D6 94 C3 D5 6A E7 0C 7A 28 DC BC AC 80"
cipher_str="0x"
for c in cipher_data:if c!=' ':cipher_str+=c
cipher=long_to_bytes(int(cipher_str,16))
aes=AES.new(key)
print(aes.decrypt(cipher).decode('utf-16'))
#flag{385fa869-3046-44ee-9d30-c03551273867}

[FlareOn4]greek_to_me

exe程序,运行后不能直接输入,无壳,ida分析
start->sub_401008,sub_401121函数监听本机的2222端口,接收信息存到buf,do循环做SMC,要用到接收到的buf,if语句决定发回的内容
greek-sub_401008
sub_401121函数,监听2222端口,接收一个char类型的数据
greek-sub_401121
不知道应发送的正确的char类型数据是多少,爆破,可知应发送的数据为0xa2

import os
import socket
ip = '127.0.0.1'
port = 2222
for i in range(255):os.startfile("D:\\ctfdownloadfiles\\greek_to_me.exe")s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((ip, port))s.send(chr(i))data = s.recv(1024)s.close()if 'Congratulations' in data:print(data)print ("%x" % i)break
"""
Congratulations! But wait, where's my flag?
a2
"""

在sub_sub_401008的if语句处下断点,先让exe程序跑起来,发送0xa2给程序

import sys
import os
import socket
ip = '127.0.0.1'
port = 2222
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))
s.send(chr(0xa2))
s.close()

停下后,F8单步向下,来到这个地方,填入的字符即为flag
greek-debug
greek-flag

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

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

相关文章

C#的变迁史02 - C# 2.0篇

在此重申一下&#xff0c;本文仅代表个人观点&#xff0c;如有不妥之处&#xff0c;还请自己辨别。 第一代的值类型装箱与拆箱的效率极其低下&#xff0c;特别是在集合中的表现&#xff0c;所以第二代C#重点解决了装箱的问题&#xff0c;加入了泛型。1. 泛型 - 珍惜生命&#x…

REVERSE-PRACTICE-BUUCTF-27

REVERSE-PRACTICE-BUUCTF-27[XMAN2018排位赛]Dragon Quest[羊城杯 2020]easyre[watevrCTF 2019]Repyc[2019红帽杯]calc[XMAN2018排位赛]Dragon Quest elf文件&#xff0c;无壳&#xff0c;ida分析 main函数&#xff0c;读取输入&#xff0c;start_quest函数验证输入&#xff0…

C#的变迁史03 - C# 3.0篇

C# 3.0 (.NET 3.5, VS2008) 第三代C#在语法元素基本完备的基础上提供了全新的开发工具和集合数据查询方式&#xff0c;极大的方便了开发。 1. WPF&#xff0c;WCF&#xff0c;WF 这3个工程类型奠定了新一代.NET开发的客户端模型&#xff0c;通信模型&#xff0c;工作流模型。 …

REVERSE-PRACTICE-BUUCTF-28

REVERSE-PRACTICE-BUUCTF-28[FlareOn6]Memecat Battlestation[b01lers2020]chugga_chugga[INSHack2018]Tricky-Part1[watevrCTF 2019]esreveR[FlareOn6]Memecat Battlestation .Net程序&#xff0c;运行后输入weapon code&#xff0c;用dnSpy打开 在Stage1Form直接找到第一个w…

C#的变迁史04 - C# 4.0 之多线程篇

在.NET 4.0中&#xff0c;并行计算与多线程得到了一定程度的加强&#xff0c;这主要体现在并行对象Parallel&#xff0c;多线程Task&#xff0c;与PLinq。这里对这些相关的特性一起总结一下。 使用Thread方式的线程无疑是比较麻烦的&#xff0c;于是在这个版本中有了改善的版本…

REVERSE-PRACTICE-BUUCTF-29

REVERSE-PRACTICE-BUUCTF-29[FlareOn1]Shellolololol[CFI-CTF 2018]powerPacked[INSHack2018]Tricky-Part2[CFI-CTF 2018]Automated Reversing[FlareOn1]Shellolololol exe程序&#xff0c;直接不能运行&#xff0c;无壳&#xff0c;ida分析 简单F8单步调试发现&#xff0c;在…

C#的变迁史05 - C# 4.0篇

C# 4.0 (.NET 4.0, VS2010) 第四代C#借鉴了动态语言的特性&#xff0c;搞出了动态语言运行时&#xff0c;真的是全面向“高大上”靠齐啊。 1. DLR动态语言运行时 C#作为静态语言&#xff0c;它需要编译以后运行&#xff0c;在编译的过程中&#xff0c;编译器要检查语法的正确性…

REVERSE-PRACTICE-BUUCTF-30

REVERSE-PRACTICE-BUUCTF-30[RCTF2019]DontEatMe[b01lers2020]little_engine[NPUCTF2020]你好sao啊[MRCTF2020]Shit[RCTF2019]DontEatMe exe程序&#xff0c;运行后输入&#xff0c;无壳&#xff0c;用ida分析 交叉引用字符串来到sub_401260函数&#xff0c;读取输入&#xff…

C#的变迁史06 - C# 4.0 之并行处理篇

前面看完了Task对象&#xff0c;这里再看一下另一个息息相关的对象Parallel。 Parallel对象 Parallel对象封装了能够利用多核并行执行的多线程操作&#xff0c;其内部使用Task来分装多线程的任务并试图将它们分配到不同的内核中并行执行。请注意“试图”这个词&#xff0c;Par…

REVERSE-PRACTICE-BUUCTF-31

REVERSE-PRACTICE-BUUCTF-31[羊城杯 2020]login[羊城杯 2020]Bytecode[羊城杯 2020]babyre[ACTF新生赛2020]fungame[羊城杯 2020]login exe程序&#xff0c;运行后输入&#xff0c;无壳&#xff0c;ida分析 没找到主要逻辑&#xff0c;在字符串窗口看到一些“py”的字样&#…

C#的变迁史07 - C# 4.0 之线程安全集合篇

作为多线程和并行计算不得不考虑的问题就是临界资源的访问问题&#xff0c;解决临界资源的访问通常是加锁或者是使用信号量&#xff0c;这个大家应该很熟悉了。 而集合作为一种重要的临界资源&#xff0c;通用性更广&#xff0c;为了让大家更安全的使用它们&#xff0c;微软为我…

PWN-PRACTICE-BUUCTF-1

PWN-PRACTICE-BUUCTF-1test_your_ncripwarmup_csaw_2016ciscn_2019_n_1test_your_nc 附件的main函数直接system("/bin/sh")&#xff0c;nc直接连即可cat flag rip main函数中&#xff0c;gets函数读取一行会造成栈溢出 构造payload覆盖rip&#xff0c;使得return…

C#的变迁史08 - C# 5.0 之并行编程总结篇

C# 5.0 搭载于.NET 4.5和VS2012之上。 同步操作既简单又方便&#xff0c;我们平时都用它。但是对于某些情况&#xff0c;使用同步代码会严重影响程序的可响应性&#xff0c;通常来说就是影响程序性能。这些情况下&#xff0c;我们通常是采用异步编程来完成功能&#xff0c;这在…

REVERSE-PRACTICE-CTFSHOW-1

REVERSE-PRACTICE-CTFSHOW-1逆向签到题re2逆向4逆向5逆向签到题 ida打开即可得到明文flag re2 附件是一个加密过的flag文本和勒索病毒exe 运行程序&#xff0c;输入1&#xff0c;回车&#xff0c;直接退出&#xff0c;ida分析 选项1的逻辑为&#xff0c;打开flag.txt和enfl…

C#的变迁史09 - C# 5.0 之调用信息增强篇

Caller Information CallerInformation是一个简单的新特性&#xff0c;包括三个新引入的Attribute&#xff0c;使用它们可以用来获取方法调用者的信息&#xff0c; 这三个Attribute在System.Runtime.CompilerServices命名空间下&#xff0c;分别叫做CallerMemberNameAttribute&…

REVERSE-PRACTICE-CTFSHOW-2

REVERSE-PRACTICE-CTFSHOW-2re3红包题 武穆遗书数学不及格flag白给re3 main函数&#xff0c;分析可知&#xff0c;将输入的字符串按十六进制转成数字&#xff0c;写到v5&#xff0c;赋给v17[6] 当i等于6时&#xff0c;v16会加上输入的值&#xff0c;然后进入循环&#xff0c;最…

C#的变迁史10 - C# 5.0 之其他增强篇

1. 内置zip压缩与解压   Zip是最为常用的文件压缩格式之一&#xff0c;也被几乎所有操作系统支持。在之前&#xff0c;使用程序去进行zip压缩和解压要靠第三方组件去支持&#xff0c;这一点在.NET4.5中已有所改观&#xff0c;Zip压缩和解压功能已经内置于框架本身。这个功能使…

REVERSE-PRACTICE-CTFSHOW-3

REVERSE-PRACTICE-CTFSHOW-3签退神光签到baby_gay签退 .pyc文件&#xff0c;uncompyle6反编译&#xff0c;得到python源码&#xff0c;分析写在源码注释中 先变表base64&#xff0c;再凯撒加密&#xff0c;向后移动2位 import string c_charset string.ascii_uppercase str…

REVERSE-PRACTICE-CTFSHOW-4

REVERSE-PRACTICE-CTFSHOW-4encodeEasyBJD hamburger competitionJustREencode elf文件&#xff0c;upx脱壳&#xff0c;ida分析 交叉引用字符串"Please input your flag:"&#xff0c;来到sub_804887C函数 输入经过三次变换&#xff0c;先是变表base64&#xff0c;…

CSS 基础框盒模型介绍

当对一个文档进行布局&#xff08;lay out&#xff09;的时候&#xff0c;浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型&#xff08;CSS basic box model&#xff09;&#xff0c;将所有元素表示为一个个矩形的盒子&#xff08;box&#xff09;。CSS 决定这些盒子的大小…