litctf24(都是耻辱)

RUNMRE

无壳,拿查看shift+F12

runme01

第一行是base64加密后的字符串

第二行是魔改后的base表

==这是原表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/==

runme02

ezpython(与三个python的环境默认缠斗一上午)

python打包成的exe我们要用pyinstxtractor.py来进行解包

解完包我们将ezpy.pyc扔进在线网站中反编译成.py

(反编译网站https://www.lddgo.net/string/pyc-compile-decompile)

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 3.11

import Litctfbase64
flag = input('flag:')
flag = Litctfbase64.b64decode(flag)
if flag == 'X=3o4hx=0EZwf=mMv13gX=3o4hx=qje2ZjtgZQmEKXZog4==':
print('win')
return None
print('no')

然后我们去解包后产生的文件夹的PYZ-00.pyz_extracted文件夹找到Litctfbase64.pyc

同上诉步骤进行反编译成.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.11

import string
BASE64_ALPHABET = '8kuWYm=1JiUPs7DT4x+X5tcqZKfGvA0gFLB6y3QbV2rNOlRdMwnEohjzSe9/HIa-'

def b64decode(input_string):
pass
# WARNING: Decompyle incomplete


def from_base64(base64_string):
pass
# WARNING: Decompyle incomplete

获得了base64的魔改表

ezpy01

hello_upx(你是真的逆天)

既然是upx就进行脱壳,但是会有报错提示被hacked

用010打开乍看没有问题,实际上出题人吧**==UPX==替换成了小写的upx**

于是我们将upx改正为UPX然后再脱壳拖入ida中查看main函数

hello_upx02

v4和v5共同组成一个小端序

当v4[i]=v6[i]-i时输出good

所以脚本为

1
2
3
4
5
str =[0x4C,0x68,0x72,0x40,0x50,0x41,0x75,0x70,0x2B,0x63,0x59,0x25,0x61,0x58,0x51,0x65,0x20,0x4E,0x5A,0x1E,0x60,0x4E,0x5E,0x4F,0x65]
flag = ""
for i in range(25):
flag += chr(str[i] + i)
print(flag)

ezRC4

直接动调会闪退,main0有个反调试程序我们需要在这里打个断点

ezrc405

然后在上面调成这样进行单步调试(f7)

ezrc401

进入调试后在进到这一步时我们需要将ZF的值改成1然后进入到模块否则就会自动退出

ezrc401

f7单步进入

ezrc404

到这里时发现我们之前在静态函数里发现的key

第二个块是对key进行解密

解密后的key为

ezrc403

然后根据前面静态的main函数中的buf1

ezrc402

rc406