python 数据库逆向映射成module 小工具

本文介绍了如何使用sqlacodegen工具,根据数据库表结构自动生成SqlAlchemy模型代码,包括其特点、下载及安装方法,以及如何在Python环境中运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       最近在学习salAlchemy,在过程中希望找到一种机制,能够根据已存在的数据库的表结构(不同的库,表的数量结构存在差异),自动去调整类和类中列的信息,包括字段之间的关系。虽然最终没有解决,但是找到了一个基于SqlAlchemy的小工具,sqlacodegen。根据官网上的解释,它是一个为SqlAlchemy制作的,能够自动生成模型代码的generator。它也是用来代替sqlautocode这个工具,它们功能相似,但是由于后者对于Python 3和SqlAlchemy新版本支持问题,以及一些bug,被前者取代。


       这个工具的特点:

     (1)支持SqlAlchemy 0.6-1.0版本;

     (2)所产生的代码为declarative形式(一种将列的声明和映射写在一起的形式,SqlAlchemy中常见),几乎跟手写      的没有差别;

     (3)按照PEP 8标准编码;

     (4)准确的定义关系,包括多对多,一对一;

     (5)自动的探测到联系在一起的表和继承

     (6)出色的范围测试(不太明白)


        工具下载:

https://pypi.python.org/pypi/sqlacodegen/

在Python3.4中,自带了pip工具,Python2.X的版本用户可以自己下一个。

       (1)如果有网络可以用,并且已经安装了pip工具,那么找到对应路径,命令行 -pip install sqlacodegen。

       (2)在获取了.whl文件后,用-pip install 文件名.whl同样可以实现安装。

这里要说明的是,在用方式(2)进行安装时,sqlacodegen依赖一个叫inflect的包,需要自行下载后,才能安装sqlacodegen,方法(1)中pip工具会帮用户搞定。


在这里分享一个链接,里面几乎囊括了所有Python要用到的库,http://www.lfd.uci.edu/~gohlke/pythonlibs/


  安装完毕后,在命令行中 -sqlacodegen --help

 会看到如下图所示的结果,根据不同的数据库厂商和help中的提示,就可以对某个库或者某张表进行逆向生成模型了。下面是不同数据厂商的链接例子。链接信息可以参考,sqlAlchemy中create_engine()方法中参数。

          

sqlacodegen postgresql:///some_local_db
sqlacodegen mysql+oursql://user:password@localhost/dbname
sqlacodegen sqlite:///database.db

### 使用 Unidbg 进行 SDK 逆向工程检测 #### 准备工作 为了使用 Unidbg 对 APK 文件及其关联的 `.so` 库进行逆向分析,需先准备好环境并加载必要的依赖项。通常情况下,APK 可以被当作 ZIP 文件处理来提取其中的内容。 ```bash $ unzip app.apk -d output_directory/ ``` 这一步骤允许访问 APK 中嵌入的所有资源文件以及本地库(`.so`),这些对于后续的动态分析至关重要[^1]。 #### 加载与配置 Unidbg 实例 创建一个 Java 或 Python 的开发环境用于集 Unidbg 框架,并编写脚本来初始化模拟器实例: ```java // 创建Unidbg实例 Darm arm = new DarmImpl(); Emulator emulator = Emulator.createARM(); // 设置系统路径和架构类型 emulator.setSyscall(new LinuxARM SyscallHandler(emulator)); RegisterContext context = emulator.getContext(); context.setArmMode(true); // 注册内存管理模块 Memory memory = emulator.getMemory(); memory.setLibraryResolver(new AndroidResolver(23)); // API Level设置为23 ``` 通过上述代码片段可以构建起基础运行平台,在此基础上可进一步挂接目标应用所需的共享对象(`.so`)。 #### 动态链接 .so 文件 将之前从 APK 解包出来的 `libsignature.so` 添加到仿真环境中以便于调用其导出函数: ```java // 将 so 文件映射至虚拟地址空间内 File file = new File("/path/to/libsignature.so"); byte[] bytes = Files.readAllBytes(file.toPath()); long baseAddr = MemoryBlock.allocate(memory, "libsignature", bytes.length); memory.write(baseAddr, bytes, true); // 执行 dlopen 来完实际装载过程 Pointer handle = Native.loadLibrary("libsignature", null).getHandle(); if (handle == Pointer.NULL){ throw new RuntimeException("Failed to load library."); } ``` 此时已经功地让 Unidbg 虚拟机认识到了外部引入的目标二进制组件,接下来就可以着手准备具体的功能测试了。 #### Hook 关键方法实现监控 针对特定场景下的需求,比如想要拦截某些敏感操作或是观察内部状态变化,则可以通过 hook 技术达到目的。这里给出一段基于 frida-gadget 的 JavaScript 示例说明如何挂钩 open() 系统调用来捕捉所有尝试打开的文件名: ```javascript var pth = Module.findExportByName(null,"open"); Interceptor.attach(ptr(pth),{ onEnter:function(args){ let filename = args[0].readUtf8String(); console.log("[OPEN]",filename); if(filename.endsWith('.so')){ // 自定义逻辑... } }, onLeave:function(retval){} }); ``` 这段脚本能够帮助识别哪些动态库正在被加载,从而为进一步深入研究提供线索[^2]。 #### 结合调试工具辅助分析 当遇到复杂情况难以仅靠自动化手段解决时,还可以借助专业的反汇编软件如 OllyDbg 辅助查看机器指令级细节,理解程序执行流程,定位潜在漏洞位置[^3]。 综上所述,利用 Unidbg 平台配合其他技术手段可以使开发者更高效地开展移动安全领域内的探索活动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值