diff --git a/.github/workflows/pythonpublish.yml b/.github/workflows/pythonpublish.yml index ec800b2a2..daece1c75 100644 --- a/.github/workflows/pythonpublish.yml +++ b/.github/workflows/pythonpublish.yml @@ -13,11 +13,10 @@ jobs: python-version: '3.x' - name: Install dependencies run: | - pip install setuptools wheel + pip install setuptools wheel build - name: Build distribution 📦 run: | - pip install . - python setup.py sdist bdist_wheel + python -m build - uses: actions/upload-artifact@v2 with: path: ${{ github.workspace }}/dist/* diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..636daf174 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,80 @@ +[project] +name = "qiling" +version = "1.4.5-dev" +description = "Qiling is an advanced binary emulation framework that cross-platform-architecture" +readme = "README.md" +requires-python = ">=3.8" +license = {text = "GPL-2.0-only"} +maintainers = [ + {name = "KaiJern Lau (xwings)", email = "info@qiling.io"} +] +keywords = ["qiling", "binary", "emulator", "framework", "malware", "analysis", "UEFI", "IoT"] +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Topic :: Software Development :: Build Tools", + "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", + "Programming Language :: Python :: 3" +] + +dependencies = [ + "capstone>=4.0.1", + "unicorn>=2.0.0", + "pefile>=2022.5.30", + "python-registry>=1.3.1", + "keystone-engine>=0.9.2", + "pyelftools>=0.28", + "gevent>=20.9.0", + "multiprocess>=0.70.12.2", + "windows-curses>=2.1.0;platform_system=='Windows'", + "pyyaml>=6.0", + "python-fx", + "questionary", + "termcolor" +] + +[project.optional-dependencies] +evm = [ + "blake2b-py>=0.1.2", + "cached-property>=1.5.2;python_version<'3.8'", + "typing-extensions>=3.7.4.3;python_version<'3.8'", + "eth-keys>=0.2.1", + "eth-typing>=2.2.0", + "eth-utils>=1.9.4", + "eth_abi>=2.1.1", + "lru-dict>=1.1.6", + "py-ecc>=1.4.7", + "rlp>=2", + "trie==2.0.0-alpha.5", + "eth-hash[pycryptodome]", + "numpy", + "rich", + "cmd2" +] +fuzz = [ + "unicornafl>=2.0.0;platform_system!='Windows'", + "fuzzercorn>=0.0.1;platform_system=='Linux'" +] +RE = [ + "r2libr>=5.7.4" +] + +[project.urls] +homepage = "https://qiling.io" +documentation = "https://docs.qiling.io" +repository = "https://github.com/qilingframework/qiling" +changelog = "https://github.com/qilingframework/qiling/blob/master/ChangeLog" + +[project.scripts] +qltool = "qltool:main" + +[build-system] +requires = ["setuptools>=61.0.0", "wheel"] +build-backend = "setuptools.build_meta" + +[tool.setuptools.package-data] +qiling = ["profiles/*.ql"] +"qiling.debugger.gdb" = ["xml/*/*"] +"qiling.os.uefi" = ["guids.csv"] +"qiling.arch.evm.analysis" = ["signatures.json"] + diff --git a/qltool b/qltool index be6a52d3f..ef426cec0 100755 --- a/qltool +++ b/qltool @@ -168,7 +168,7 @@ def handle_examples(parser: argparse.ArgumentParser): parser.exit(0, __ql_examples) -if __name__ == '__main__': +def main(): parser = argparse.ArgumentParser() parser.add_argument('--version', action='version', version=f'qltool for Qiling {ql_ver}, using Unicorn {uc_ver}') @@ -266,11 +266,15 @@ if __name__ == '__main__': ql.run(timeout=options.timeout) if options.json: - report = report.generate_report(ql) + generated_report = report.generate_report(ql) if qltui_enabled: - report["syscalls"] = qltui.transform_syscalls(ql.os.stats.syscalls) - qltui.show_report(ql, report, hook_dictionary) + generated_report["syscalls"] = qltui.transform_syscalls(ql.os.stats.syscalls) + qltui.show_report(ql, generated_report, hook_dictionary) else: - pprint(report) + pprint(generated_report) exit(ql.os.exit_code) + + +if __name__ == '__main__': + main() diff --git a/setup.py b/setup.py index eca31524a..70298919e 100644 --- a/setup.py +++ b/setup.py @@ -2,101 +2,6 @@ # # Python setup for Qiling framework -from setuptools import setup, find_packages +from setuptools import setup -# NOTE: use "-dev" for dev branch -VERSION = "1.4.5" + "-dev" -#VERSION = "1.4.4" - -requirements = [ - "capstone>=4.0.1", - "unicorn>=2.0.0", - "pefile>=2022.5.30", - "python-registry>=1.3.1", - "keystone-engine>=0.9.2", - "pyelftools>=0.28", - "gevent>=20.9.0", - "multiprocess>=0.70.12.2", - "windows-curses>=2.1.0;platform_system=='Windows'", - "pyyaml>=6.0", - "python-fx", - "questionary", - "termcolor", -] - -extras = { - "evm": [ - "blake2b-py>=0.1.2", - "cached-property>=1.5.2;python_version<'3.8'", - "typing-extensions>=3.7.4.3;python_version<'3.8'", - "eth-keys>=0.2.1", - "eth-typing>=2.2.0", - "eth-utils>=1.9.4", - "eth_abi>=2.1.1", - "lru-dict>=1.1.6", - "py-ecc>=1.4.7", - "rlp>=2", - "trie==2.0.0-alpha.5", - "eth-hash[pycryptodome]", - "numpy", - "rich", - "cmd2" - ], - "fuzz" : [ - "unicornafl>=2.0.0;platform_system!='Windows'", - "fuzzercorn>=0.0.1;platform_system=='Linux'" - ], - "RE": [ - "r2libr>=5.7.4", - ] -} - -with open("README.md", "r", encoding="utf-8") as ld: - long_description = ld.read() - -setup( - name='qiling', - version=VERSION, - - description='Qiling is an advanced binary emulation framework that cross-platform-architecture', - url='http://qiling.io', - long_description=long_description, - long_description_content_type="text/markdown", - maintainer='KaiJern Lau (xwings)', - maintainer_email='info@qiling.io', - - license='GPLv2', - - # See https://pypi.python.org/pypi?%3Aaction=list_classifiers - classifiers=[ - # How mature is this project? Common values are - # 3 - Alpha - # 5 - Production/Stable - #'Development Status :: 5 - Production/Stable', - 'Development Status :: 3 - Alpha', - - # Indicate who your project is intended for - 'Intended Audience :: Developers', - 'Topic :: Software Development :: Build Tools', - - # Pick your license as you wish (should match "license" above) - 'License :: OSI Approved :: GNU General Public License v2 (GPLv2)', - - # Specify the Python versions you support here. In particular, ensure - # that you indicate whether you support Python 2, Python 3 or both. - 'Programming Language :: Python :: 3', - ], - - keywords='qiling binary emulator framework malware analysis UEFI IoT', - - packages=find_packages(), - scripts=['qltool'], - package_data={ - 'qiling': ['profiles/*.ql'], - 'qiling.debugger.gdb': ['xml/*/*'], - 'qiling.os.uefi': ['guids.csv'], - 'qiling.arch.evm.analysis': ['signatures.json'] - }, - install_requires=requirements, - extras_require=extras, -) +setup()