-
-
[原创] Unicorn 编译与 python 绑定
-
发表于:
2019-8-17 15:56
5548
-
[原创] Unicorn 编译与 python 绑定
一、unicorn的编译
(1) 从官网下载最新的Unicorn源码
d2eK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6#2L8X3W2U0L8%4u0F1i4K6u0V1k6h3&6Y4K9h3&6W2i4K6u0r3N6h3&6A6j5$3!0J5L8R3`.`.
(2)分别解压两份到D:\uc32和D:\uc64
主要出于编译32位和64位等不同版本时,避免配置干扰或重新编译时出现各种不合预期的情况。
(3)根据官方说明,这里使用64位(任意)的msys2
ec7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6#2L8X3W2U0L8%4u0F1i4K6u0V1k6h3&6Y4K9h3&6W2i4K6u0r3N6h3&6A6j5$3!0J5L8W2)9J5c8X3u0D9L8$3u0Q4x3V1k6E0j5i4y4@1k6i4u0Q4x3V1k6V1L8$3y4K6i4K6u0r3b7@1!0y4f1p5W2x3c8g2)9J5k6q4N6u0e0V1c8a6g2#2y4Q4x3X3g2E0k6l9`.`.
(4)分别启动msys2的32位和64位环境编译版本,确保官方说明的相关命令应该无错执行

(5)再msys2中各环境中进入uc32和uc64


(6)根据官方说明执行相关命令,即可编译完成
应该到msys2的ming32和ming64目录的bin下分别复制响应的依赖DLL到我们需要的路径。
二、python的绑定
(1)分别将【一】的成果,主要是 unicorn.dll和unicorn.lib(当然还有依赖的msys2的动态库)
复制到uc32\bindings\python\prebuilt目录(64位版本复制到响应uc64的目录)
此目录再python setup时会搜索需要的动态库,如果不放置对位置,没法成功。
(2)配置cmd环境适用python32位版本,进入uc32的prebuilt目录,编译whl并安装
python setup.py bdist_wheel
pip install unicorn-1.0.2-py2.py3-none-win32.whl
同理,配置cmd环境适用python64位版本,进入uc64的
prebuilt目录,编译whl并安装
python setup.py bdist_wheel
pip install unicorn-1.0.2-py2.py3-none-win_amd64.whl
注意:为啥不用 egg和easy_install ?
测试Anaconda2的32版本是python 2.7.12版本的,对egg方式没问题
但Anaconda2的64版本是python 2.7.13版本的,ctypes再加载egg缓存路径是适用了unicode,造成错误,为避免错误,毕竟IDA7.X也是64位版本。
这是主要需要适配版本。
以及方便我们的一些其他操作,我们适用whl的方式直接将unicorn装到size-packages中。
python setup.py bdist_egg
当然,我们也可以直接python安装官方的版本,不过官方目前只提供1.0.1版本,一些bug坑还是很难受。
附件提供这次编译测试的32位和64位python的whl安装版(分包源于单各附件不超过8M,每个whl大小9M)
[培训]科锐逆向工程师培训第53期2025年7月8日开班!