来个引子:TPCTF的maze题目
def test_add(a,b):
a = int(a)
b = int(b)
return a + b
def test_calc(li):
for i in range(len(li)):
li[i] ^= 0x52
li[i] += 3
return li
import testso
li = [1,2,3,4]
res1 = testso.test_add(3,4)
res2 = testso.test_calc(li)
print(res1)
print(res2)
┌──(kali?ksli)-[~/Desktop/testso]
└─$ python main.py
7
[86, 83, 84, 89]
from setuptools import setup
from Cython.Build import cythonize
setup(
name="testso",
ext_modules=cythonize('testso.py') # your file ready to compile`
)
pip install Cython
python setup.py build_ext --inplace
生成前
生成后
图中唯一的那个so文件,就是我们想要的扩展库
删掉之前写的testso.py
,原样执行main.py
,可以发现同样导入testso成功,正常输出
具体的实现就和上面的main.py
一样了
这时候有人就要问了,你怎么知道有什么类什么函数?
help
函数,他有着类似Java反射的能力,能够显示链接库中定义的类、函数、函数参数以及一些变量和常量等等
,实例如下:import testso
help(testso)
效果
至于怎么进行下一步测试,就不用说了吧
这是第一个可以逆向分析的点:获取库文件的基础信息,还可以进行一些测试,推敲函数功能等等
__pyx_moduledef # init
__pyx_methods
__pyx_moduledef_slots
__pyx_pymod_create # 创建模块
__pyx_pymod_exec # 执行模块
---------------------------------手动分割-----------------------------
help
直接知道对应的函数,然后ctrl f
来找对应函数,岂不就是最快的需不需要回忆一下?
testso.c
文件文章写到这里基本就结束了,如果你想要完整的分析整个调用逻辑,就需要从init–>exec一步步分析了,对于这种so-python来说,看代码还是比较头疼的,结合调库debug,效率会高很多。
我们做了些什么嘞?一起编写了一个so形式的python库,知道了如何对这个so
进行debug,以及逆向分析的一些入手点,希望你也有所收获
不过说到底,只要核心能力强,手撕万物都不是问题
协作:UKFC战队:
UmVfX1BvaW50
By7e_f@lc0n
参考文章:https://www.yasar.li/archives/tpctf2023-maze-wp