brainfuck
比赛做题的时候刚好遇到了这个语言,感觉非常的有意思,用8种字符就可以运算出来程序,学习一下
brainfuckBrainfuck是一种极小化的计算机语言,它是由Urban Müller在1993年创建的。由于fuck在英语中是脏话,这种语言有时被称为brainf*ck或brainf**k,甚至被简称为BF。
一,指令BF只有8种有效字符,其实就是8种指令:
Command
Explanation
+
指针指向的字节的值加一
-
指针指向的字节的值减一
>
指针加一
<
指针减一
.
输出指针指向的单元内容(ASCⅡ码)
,
输入内容到指针指向的单元(ASCⅡ码)
[
如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处
]
如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处
二,代码理解BF可以简单的翻译成C/C++语言:
Hello world 程序
1234567891011121314151617181920212223242526272829303132333435363738394041424344 ...
bytecode
[羊城杯 2020]Bytecode看到题目是Bytecode,百度查看时Python字节码
官方文档:https://docs.python.org/zh-cn/3.7/library/dis.html
示例:给出函数 myfunc():
12def myfunc(alist): return len(alist)
可以使用以下命令显示 myfunc() 的反汇编
>>>
12345>>> dis.dis(myfunc) 2 0 LOAD_GLOBAL 0 (len) 2 LOAD_FAST 0 (alist) 4 CALL_FUNCTION 1 6 RETURN_VALUE
(“2” 是行号)。
只能根据文档一个个反编译
1234567891011121314151617181920212223242526272829303132333435363738394041 ...
SCTF2019 Who is he
SCTF2019 Who is he解压发现是unity游戏,运行一下是蔡徐坤等等的视频播放,要求输入flag
直接dnspy打开,找到flag判断函数
看下面的Data就像是base64解码,先读取文件里的值,再解码,去找解密的地方
看到这里是DES加密,那就是先base64解密再DES,key是1234
12345678from pyDes import des,PAD_PKCS5,CBCimport base64s=base64.b64decode('1Tsy0ZGotyMinSpxqYzVBWnfMdUcqCMLu0MA+22Jnp+MNwLHvYuFToxRQr0c+ONZc6Q7L0EAmzbycqobZHh4H23U4WDTNmmXwusW4E+SZjygsntGkO2sGA==')key=''.join(['1','\x00','2','\x00','3','\x00','4',' ...
DASCTF八月-RE
DASCTF八月-REpy题目py,第一感觉就是pyc反汇编,但是题目给了一个exe文件,ida打开里面找到pyinstall,百度找了一下是pyinstxtractor解包,GitHub下载文件https://github.com/extremecoders-re/pyinstxtractor
1python pyinstxtractor.py py.exe
解出来一个包,uncompyle6反编译py.pyc文件,反汇编出来的py文件里面没有东西,找了一下发现是pyc的文件头出来问题,作者的python版本如果和你一样那么就可以顺利的反汇编,如果不一样,写入的头文件magic就会有问题
1234567891011Python MAGIC Python MAGIC Python MAGIC1.0 0x00999902 2.0 0x0A0DC687 3.0 0x0A0D0C3A1.1 0x00999903 2.1 0x0A0DEB2A 3.1 0x0A0 ...
FlareOn2 very success
FlareOn2 very success32位无壳程序
拖进IDA查看
栈指针不平衡 看了别人的博客发现是00401001的地方改为-04,下载的程序已经修改好了。
查看关键函数
这个函数里面的v12 = (**ROL1**(1, v4 & 3) + v11 + v10);语句是加密的关键函数,而v13 = *v7 == v12是检查函数。可以看出要将加密后的字符串一个个加密一个个判断,然后跟倒置的a2做比对。
需要查看V7的值是什么
可以看到v7是DI寄存器,动态调试
通过DI的地址跟踪到数据的地址
只是获得了32个数据,但是后面的几个没有,题目提示是@flare-on.com结尾,也没有关系
从上面这个异或AL可以得到异或的值是256``(C7)`
脚本:
1234567891011121314sumv = 0lenv = 37rolv = 1flag = 1result = '' values = [0xa8,0x9a,0x90,0xb3,0xb6,0xbc,0xb4,0xab,0x9d,0xae,0xf9,0xb8,0x9d,0xb8, ...