where
C 将C代码封装成python可以import调用的so - 知乎 (zhihu.com)
直接分析代码比较困难,直接strace查看调用
![[image-20240519091339529.png]]
strace -o strace.log python whereistheflag.py
![[image-20240519091502882.png]]
这里比较可以,去 getrandom
找找交叉引用——找不到
_pyx_pw_11whereThel1b_13check_flag
在头部写一个 input()
就可以附加调试了
![[image-20240519093433389.png]]
这里有点像比较加密后的字符串,但是没断到,看来有比较长度或者其他的逻辑
_Pyx_PyObject_FastCallDict(函数,参数,参数长度) 是调用函数
![[image-20240519095957500.png]]
refcnt就是引用次数,和gc回收有关
_pyx_pymod_exec_whereThel1b
是常量池
![[image-20240519100803357.png]]
所以这里的意思是
![[image-20240519100934742.png]]
randint(self, 0, 2)
关于Cython生成的so动态链接库逆向_cython 逆向-CSDN博客
help(whereThel1b)
![[image-20240519101933005.png|500]]
看起来whereistheflag函数是随机的,但是trytry不是,直接分析trytry
![[image-20240519102822688.png]]
这里就是trytry的代码