2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用

0x00 前置技能及工具

C语言,Python,JAVA,IDA,JADX,adb,虚拟机,安卓模拟器,ELF、PE文件结构,汇编语言,…如果发现错误或有更好的解决方案,望各位师傅不吝指出!

0x01 easy_RE

Hint:打开就有

题目附件是一个exe文件,也就是windows下的可执行文件

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第1张图片

打开发现要你输入flag,随便输入会输出wrong。放进ExeinfoPE检查程序的位数和壳。

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第2张图片

无壳,64位。放进IDA64看到

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第3张图片

flag{we1c0m    这是flag的前半段。函数表里有很多函数,伪代码也乱糟糟(估计是用c++写的),但是在main函数按F5查看伪代码看到了运行程序时显示的字符串,和flag的后半段:e_to_rev3rse!!}。

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第4张图片

所以完整的flag是:flag{we1c0me_to_rev3rse!!}打开题目附件验证:

注意题目附件是控制台应用,且不会pause,所以要在cmd中运行以确保看到验证结果。确实是打开就有。

0x02 咳

Hint:壳壳壳

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第5张图片

64位exe程序,但是有upx壳。利用upx.exe去壳2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第6张图片

原文件会被替换更改,直接拖进IDA分析

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第7张图片发现这是一个加密函数,会对输入进行加密后与特定字符串enc进行对比。双击enc查看密文:

明文开头是flag,密文开头是gmbh,一眼位移密码且位移为1,加密算法中++Str1[i]也能看出每个字符的ascii值都加了一,只需要写脚本恢复即可:2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第8张图片

得到flag{C0ngratu1at10ns0nPa221ngTheF1rstPZGALAXY1eve1}。验证flag正确:2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第9张图片

顺带一提:如果不去壳拖进IDA会发现函数很少很少,也看不到想要的信息2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第10张图片

UPX的简单介绍:https://juejin.cn/post/7273803674789593127

0x03 Segmnets

Hint:IDA的Segments窗口要怎么打开呢

题目附件叫shift_f7,提示已经太明显了,按快捷键就可以进入segments窗口

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

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第11张图片

题目附件没有后缀,猜测是ELF文件,用checksec查看一下程序的位数

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第12张图片放进IDA64,并按shift+f7(main函数也有提示),点击base使其按升序排列,注意到Name一列就有flag,复制下来得到flag_You_ar3_g0od_at_f1nding_ELF_segments_name_,将前后的下划线改成大括号即可:flag{You_ar3_g0od_at_f1nding_ELF_segments_name}。

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第13张图片(不能显示大括号是IDA的原因,实际上该段名称确实存在大括号) 官方给了一种用脚本的解法,可以直接得到带大括号的flag。

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第14张图片

0x04 ELF

Hint:好像不是Windows的文件呢

ELF是linux可执行文件,checksec一下

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第15张图片放到IDA看看2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第16张图片加密函数首先将输入的字符串通过encode函数加密,再base64加密,最后与特定字符串对比。思路就是通过写脚本将字符串base64解码后再放入与encode算法相应的解密算法得到flag。Encode函数:

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第17张图片

脚本:

import base64
c = 'VlxRV2t0II8kX2WPJ15fZ49nWFEnj3V8do8hYy9t'

decodestr = base64.b64decode(c)
#print(decodestr)
lis = []
for i in decodestr:
    lis.append((i-16) ^ (0x20))
m = ''.join(chr(k) for k in lis)
print(m)

 flag{D0_4ou_7now_wha7_ELF_1s?}

做此题时出现的问题讨论:刚开始做的时候我尝试将密文用cyberchef解码base64,发现解出来的字符串里有很多不可见字符

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第18张图片于是改用python解码base64得到V\\QWkt \x8f$_e\x8f'^_g\x8fgXQ'\x8fu|v\x8f!c/m,并尝试将其放进第二层解密脚本,结果出现以下报错:

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第19张图片2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第20张图片python会以字符流输入该字符串自动识别转义字符并转换,所以会出现相关报错。但是如果将两段解码都放在一起,那么该字符串会以字节流进行解密,不会报错。关于字符流与字节流及其转换:

https://blog.csdn.net/Dontla/article/details/103646792

0x05 Endian

Endian:字节存储次序,参考资料:https://zh.wikipedia.org/wiki/字节序2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第21张图片

64位小端序,放入IDA分析
双击array得到
加密算法将flag分成五段转成十六进制后与0x12345678进行异或运算,密文存在array中。逆向解密算法即用array的五个元素分别与0x12345678进行异或得到明文的十六进制数。此处应注意,IDA中的数据皆以大端序储存方式呈现,但checksec我们已经明确该程序为小端序,所以十六进制数的顺序是反的,解码后应将解出来的明文倒转。脚本:
from Crypto.Util.number import *
c = [0x75553A1E, 0x7B583A03, 0x4D58220C, 0x7B50383D, 0x736B3819]
flag = b''
for i in c:
    m = i ^ (0x12345678)
    flag += long_to_bytes(m)[::-1]
print(flag)
flag{llittl_Endian_a}

0x06 AndroXor

Hint:异或异或异或异
安卓逆向,第一次接触,去csdn和52破解论坛上搜索了相关资料,需要配置相关环境。其中最重要的分析软件是jadx,其会分析apk程序逻辑并生成java伪代码;还有用来运行程序的实体机或者虚拟机(需要开启USB调试以用电脑调控程序运行)等工具。
首先先用安卓模拟器(此处为mumu模拟器12)安装题目附件安装包并运行
有输入框,随便输入一串字符并按钮,会提示wrong。根据经验,应该是用来检验flag的功能。将apk用jadx打开
在工程目录中找到MainActivity打开,根据题目提示找到xor函数的定义和onCreate函数中调用xor函数的参数。xor函数的大致流程为,设定密钥为参数,将密文序列分别与密钥序列中相应模数的元素进行异或运算,得到明文。调用时,密钥参数为happyx3。编写脚本(写脚本的时候伪代码是用jeb分析的,所以密文序列显示不一样,并不影响做题):
c = ['\u000E', '\r', '\u0011', '\u0017', '\u0002', 'K', 'I', '7', ' ', '\u001E', '\u0014',
     'I', '\n', '\u0002', '\f', '>', '(', '@', '\u000B', '\'', 'K', 'Y', '\u0019', 'A', '\r']
key = 'happyx3'
m = []
index = 0
for i in c:
    m.append(ord(i) ^ ord(key[index % 7]))
    index += 1
print(''.join(chr(a)for a in m))
flag{3z_And0r1d_X0r_x1x1}放进程序中验证,显示win,说明flag正确。

0x07 EzPE

Hint:这个EXE怎么运行不了呢?

运行程序发现确实运行不了

2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第22张图片

题目提示PE文件,于是去查找关于PE文件结构的知识:https://zh.wikipedia.org/wiki/可移植可执行
放进IDA分析发现直接进入了汇编代码的界面,并且分节也识别不出来,但是在0x4E行有提示修复PE头
利用winhex(可以用010editor)打开题目附件以检查该文件头是否正确
首先开头标识应该是MZ需要修改;发现在0x80位置有PE签名,但是0x3C处的指针却指向0x90,应指向0x80,需要修改。如图:

保存后再放进IDA分析,一切正常2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第23张图片

加密函数大致过程为,flag会按照下标顺序依次与其下一位与下标进行异或运算得到密文,储存在data中。双击data查看密文2023NewStarCTF-reverse-week1 WP(纯萌新视角解题思考过程,含题目可放心食用_第24张图片

不太方便复制下来,于是在hex窗口中找到相应位置,复制十六进制数得到密文

编写脚本:

c = '0A0C041F266C432D3C0C544C24251106053A7C51381A030D01361F122604685D3F2D372A7D'
ciphertext = bytes.fromhex(c)
# print(ciphertext)
lis = []
m = []
for k in ciphertext:
    lis.append(k)
# print(lis)
# print(lis[36])
m.append(lis[36])
for index in range(35, -1, -1):
    lis[index] ^= index ^ lis[index+1]
# print(lis)
# print(index)
print(''.join(chr(a) for a in lis))

得到flag{Y0u_kn0w_what_1s_PE_File_F0rmat}。写脚本要注意,加密时异或运算从第0位元素开始,所以最后一位元素没有改动。解密时应该从最后一位元素开始往前推(脚本中我使用了更新lis的方式储存明文,所以是从倒数第二位开始推的)

0x08 lazy_activity

运行程序,提示启动另外一个活动。将apk放入jadx分析,找到AndroidManifest.xml文件,发现确实有两个活动:main活动和flag活动。
双击flag活动进入源代码,找到onCreate函数,发现满足一定条件后会触发editText的显示。
editText指向editTextTextPersonName2。在工具栏中选择放大镜,全局搜索editTextTextPersonName2,发现flag{Act1v1ty_!s_so00oo0o_Impor#an#}
(小声bb:一开始想用adb开启flag活动,但是不知原因地没成功,还待继续尝试。)

你可能感兴趣的:(CTF,二进制安全,逆向,安全,系统安全,python,安卓)