⏳:2021-11-13 to 2021-11-14
baby_upx
upx壳
正常的脱壳指令为
upx -d baby_upx.exe
发现报错

所以自己手动脱了一下
出来之后ida32打开


看了官方的wp之后发现直接upx指令脱壳是可以的
upx -d baby_upx.exe -o baby_upx_dump.exe
ida32打开 (发现手脱结果都差不多)

写脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <stdio.h> #include <string.h> #include <stdlib.h>
int main() { int v7[5]; v7[0] = 2099915543; v7[1] = 120201498; v7[2] = 269490557; v7[3] = 67837461; v7[4] = 271401;
char String[] = "HECTF"; char* flag = (char*)v7;
for(int i=0;i<19;i++) flag[i] ^= String[(i ^ (rand() + 10086)) % 5];
printf("%s",flag); }
|
flag{Thi5_iiS5_UUPX_LalA}
baby_pp
查壳 发现是python写的 exe 文件

具体过程参考

之后找个在线网站pyc反编译
(发现在线反编译效果不是很好 文件中重要内容丢失)
(于是自己折腾了半天 搞好了uncompyle6)
(因为uncompyle6最高支持到python3.8 而自己windows的python是3.10 kali的python是3.9和2.7
所以只能在kali下更换python版本 之后安装python2的pip 再安装uncompyle6)
更换python版本
update-alternatives –config python
#之后选择序号
#详细教程👇
ubuntu下切换默认python版本 - 知乎 (zhihu.com)
uncompyle6 -o main.py main.pyc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
import random ens = '742641edefb6770733ab5932325106b3a5fa75222791d09e451161c46f15504402b32737362443d4df7d136145cd970b54116669c230'
def encode(s, nuum): step = len(s) // nuum ens = '' for i in range(step): ens += s[i::step] else: return ens
def main(): random.seed(10085) u_input = input(': ') t = '' for i in u_input: t += '%02x' % (ord(i) ^ random.randint(0, 127)) else: eni = encode(t, 6) if eni == ens: print('Success!') else: print('Failed!')
if __name__ == '__main__': main()
|
第15行: ens += s[i::step]
举个例子来说明其作用

所以解密脚本 先恢复顺序 再进行异或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import random
random.seed(10085)
ens = '742641edefb6770733ab5932325106b3a5fa75222791d09e451161c46f15504402b32737362443d4df7d136145cd970b54116669c230' flag = '' t = ''
for i in range(6): for j in range(18): t += ens[i + j*6]
for x in range(0,108,2): flag += chr(int(t[x:x+2],16) ^ random.randint(0, 127))
print(flag)
|
其中 关于数组中[::]切片问题详细可以看
[(18条消息) Python中numpy数组切片:print(a0::2])、a[::2]、[:,2]、[1:,-1:]、a[::-1]、[ : n]、[m : ]、[-1]、[:-1]、[1:]等的含义(详细)锵锵锵锵蒋的博客-CSDN博客[::2]
运行 输出
HECTF{decrypt(80410840840842108808881088408084210842)}
第一次接触云影密码 特点是

Crypto入门 (六)幂数加密(云影密码) - 缘初 - 博客园 (cnblogs.com)
附上一个云影解密脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ens = '80410840840842108808881088408084210842' result = ens.split("0") flag = ''
for i in range(len(result)): str = result[i] t = 0
for i in str: t += int(i)
flag += chr(t + 64)
print(flag)
|
flag{HELLOPYTHON}