关于Cython生成的so动态链接库逆向

admin 2023年12月13日23:24:52评论13 views字数 1948阅读6分29秒阅读模式

来个引子:TPCTF的maze题目

如何生成这个so文件

  • 为了研究逆向,我们先搞个例子感受一下生成so的整个过程,方便后续分析

创建对应python库文件
  • testso.py

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
创建对应的接口测试文件
  • main.py

import testsoli = [1,2,3,4]res1 = testso.test_add(3,4)res2 = testso.test_calc(li)print(res1)print(res2)
生成so扩展库testso
  • 安装对应扩展cypthon

pip install Cython

  • 执行生成命令

python setup.py build_ext --inplace

  • 生成前
    关于Cython生成的so动态链接库逆向

  • 生成后
    关于Cython生成的so动态链接库逆向

  • 图中唯一的那个so文件,就是我们想要的扩展库

  • 删掉之前写的testso.py,原样执行main.py,可以发现同样导入testso成功,正常输出

接下来是逆向

  • 对于逆向来说,我们所拥有的只有一个so的动态链接库,so是什么?elf文件,所以IDA看是少不了咯~

  • 但是呢,我们可以讲究一些策略

first

  • 首先要明白它是一个库文件。库能干什么,被调呗

  • 所以相当于我们拥有了一项能力:对so文件进行黑盒调试的能力

具体的实现就和上面的main.py一样了

  • 导入库,创建类对象,调用函数。通过输入输出猜测函数功能

这时候有人就要问了,你怎么知道有什么类什么函数?

  • 这就要说到python的help函数,他有着类似Java反射的能力,能够显示链接库中定义的类、函数、函数参数以及一些变量和常量等等,实例如下:

  • 修改main.py

import testsohelp(testso)
  • 效果
    关于Cython生成的so动态链接库逆向

  • 至于怎么进行下一步测试,就不用说了吧

这是第一个可以逆向分析的点:获取库文件的基础信息,还可以进行一些测试,推敲函数功能等等

Second
  • 想知道函数名称什么的当然不会只有一种方法,毕竟它还是个so,所以IDA还是要上的,只不过笔者目前也没有找到什么快捷的方法去审计这种代码,就会干瞪眼硬看

  • 所以打开我们刚刚生成的so文件看看,来总结一些特征规律关于Cython生成的so动态链接库逆向

  • 打开导出表,可以看到有一个init+我们的链接库名的函数,跟踪看看

    关于Cython生成的so动态链接库逆向

  • 很好,init很好,跟踪变量,看看有什么
    关于Cython生成的so动态链接库逆向

  • 图里这些变量,有点意思哦,直接上结论

__pyx_moduledef   # init  __pyx_methods  __pyx_moduledef_slots__pyx_pymod_create # 创建模块__pyx_pymod_exec # 执行模块
  • 具体的可以看官方的解释
    (https://docs.python.org/zh-cn/3/c-api/module.html?highlight=pymoduledef_slot#)

  • 而紧跟在他们下面的
    关于Cython生成的so动态链接库逆向

  • 这不是我们定义的函数吗,来活了,知道要分析哪里了吧?

---------------------------------手动分割-----------------------------

  • 其实你仔细观察所有的函数就可以发现一切有迹可循,看看下面这个函数名是否熟悉?
    关于Cython生成的so动态链接库逆向

  • 那么我们通过first中的help直接知道对应的函数,然后ctrl f来找对应函数,岂不就是最快的。我们看看这些函数里面的内容是不是我们所编写的内容

关于Cython生成的so动态链接库逆向
关于Cython生成的so动态链接库逆向

关于Cython生成的so动态链接库逆向

需不需要回忆一下?

  • 0x52,+3,虽然抽象,但确实就是,毕竟python要转C嘛,生成so的时候大家也应该看到了那个我没有提到的testso.c文件

OK

  • 文章写到这里基本就结束了,如果你想要完整的分析整个调用逻辑,就需要从init–>exec一步步分析了,对于这种so-python来说,看代码还是比较头疼的,结合调库debug,效率会高很多。

  • 我们做了些什么嘞?一起编写了一个so形式的python库,知道了如何对这个so进行debug,以及逆向分析的一些入手点,希望你也有所收获

不过说到底,只要核心能力强,手撕万物都不是问题

协作:UKFC战队: UmVfX1BvaW50 By7e_f@lc0n

参考文章:

https://www.yasar.li/archives/tpctf2023-maze-wp


欢迎大家进入UKFC安全团队预备队,开始进入成为网络安全大佬的快车道。UKFC安全团队是一个社会组织,主要参与网络安全CTF竞赛。对网络安全感兴趣的所有各专业学生进行保姆级别网络安全竞赛培训,目的是为提升山西省在安全行业知名度,培养出“晋翼造”网络安全方向的高级人才,提升山西安全行业整体水平。


qq群码


关于Cython生成的so动态链接库逆向

原文始发于微信公众号(UKFC安全):关于Cython生成的so动态链接库逆向

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月13日23:24:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   关于Cython生成的so动态链接库逆向http://cn-sec.com/archives/2295827.html

发表评论

匿名网友 填写信息