%global debug_package %{nil} %global gradle_ver 9.2.1 %global dex_ver 2.4 %global yajsw_ver 13.18 %global pydev_ver 13.1.0 %global cdt_ver 11.5.0 %global cdt_short_ver 11.5 %global sarif_ver 2.1 %global ghidra_dir ghidra-Ghidra_%{version}_build %global dep_dir %{ghidra_dir}/dependencies %global flat_repo_dir %{dep_dir}/flatRepo %global fid_dir %{dep_dir}/fidb %global jre_ver 21 Name: ghidra Version: 12.0 %global short_version %{version} Release: 0%{?dist} Summary: ghidra - Software reverse engineering (SRE) suite of tools License: Apache 2.0 URL: https://ghidra-sre.org/ Source0: https://github.com/NationalSecurityAgency/ghidra/archive/Ghidra_%{version}_build.tar.gz Source1: https://downloads.gradle.org/distributions/gradle-%{gradle_ver}-bin.zip Source2: https://github.com/pxb1988/dex2jar/releases/download/v%{dex_ver}/dex-tools-v%{dex_ver}.zip Source3: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android4me/AXMLPrinter2.jar Source4: https://sourceforge.net/projects/yajsw/files/yajsw/yajsw-stable-%{yajsw_ver}/yajsw-stable-%{yajsw_ver}.zip Source5: https://sourceforge.net/projects/pydev/files/pydev/PyDev%20%{pydev_ver}/PyDev%20%{pydev_ver}.zip#/PyDev-%{pydev_ver}.zip Source6: https://archive.eclipse.org/tools/cdt/releases/%{cdt_short_ver}/cdt-%{cdt_ver}/cdt-%{cdt_ver}.zip Source7: https://github.com/NationalSecurityAgency/ghidra-data/raw/Ghidra_%{version}/lib/java-sarif-%{sarif_ver}-modified.jar Source8: ghidra.desktop Source9: ffxivclientstructs-dependencies.tar.gz Source10: ghidra.png Source11: https://github.com/NationalSecurityAgency/ghidra-data/raw/Ghidra_%{version}/Debugger/dbgmodel.tlb Requires: (java-%{jre_ver}-openjdk or temurin-21-jdk) BuildRequires: java-%{jre_ver}-openjdk-devel BuildRequires: java-%{jre_ver}-openjdk-headless BuildRequires: gcc gcc-c++ BuildRequires: bison flex BuildRequires: desktop-file-utils BuildRequires: python3-pip BuildRequires: python3-devel BuildRequires: python-setuptools-wheel %description Ghidra is a software reverse engineering (SRE) framework developed by NSA's Research Directorate for NSA's cybersecurity mission. It helps analyze malicious code and malware like viruses, and can give cybersecurity professionals a better understanding of potential vulnerabilities in their networks and systems. %package server Summary: Ghidra Server Requires: %{name}%{?_isa} = %{version} %description server Ghidra Server %package docs Summary: Ghidra Documentation Requires: %{name}%{?_isa} = %{version} %description docs Ghidra Documentation %prep %setup -q -c %{name}-%{version} -a 1 -a 2 -a 5 mkdir -p %{dep_dir}/{GhidraDev,GhidraServer,Debugger-agent-dbgeng} %{flat_repo_dir} %{fid_dir} cp dex-tools-v%{dex_ver}/lib/dex-*.jar %{flat_repo_dir} cp "%{SOURCE3}" "%{flat_repo_dir}" cp "%{SOURCE4}" "%{dep_dir}/GhidraServer" cp "%{SOURCE5}" "%{dep_dir}/GhidraDev" cp "%{SOURCE6}" "%{dep_dir}/GhidraDev" cp "%{SOURCE7}" "%{flat_repo_dir}" cp "%{SOURCE11}" "%{dep_dir}/Debugger-agent-dbgeng" mkdir -p "%{dep_dir}/Debugger-rmi-trace" cp %{python_wheel_dir}/setuptools-*-py3-none-any.whl "%{dep_dir}/Debugger-rmi-trace" %build cd %{ghidra_dir} # Fetch dependencies first JAVA_HOME=%{_jvmdir}/jre-%{jre_ver}-openjdk \ ../gradle-%{gradle_ver}/bin/gradle --parallel \ --init-script gradle/support/fetchDependencies.gradle # Then build JAVA_HOME=%{_jvmdir}/jre-%{jre_ver}-openjdk \ ../gradle-%{gradle_ver}/bin/gradle buildGhidra \ -x buildPyPackage %install mkdir -p %{buildroot}/%{_libdir}/%{name}/ %{buildroot}/%{_bindir}/ unzip %{ghidra_dir}/build/dist/ghidra_%{short_version}_DEV_%{lua: print(os.date("%Y%m%d"))}_linux*.zip cp -r ghidra_%{short_version}_DEV/* %{buildroot}/%{_libdir}/%{name} ln -s %{_libdir}/%{name}/ghidraRun %{buildroot}/%{_bindir}/%{name} ln -s %{_libdir}/%{name}/pyghidraRun %{buildroot}/%{_bindir}/pyghidraRun ln -s %{_libdir}/%{name}/server/ghidraSvr %{buildroot}/%{_bindir}/%{name}-server ln -s %{_libdir}/%{name}/server/svrAdmin %{buildroot}/%{_bindir}/%{name}-server-admin ln -s %{_libdir}/%{name}/server/svrInstall %{buildroot}/%{_bindir}/%{name}-server-install ln -s %{_libdir}/%{name}/server/svrUninstall %{buildroot}/%{_bindir}/%{name}-server-uninstall mkdir -p %{buildroot}/%{_datadir}/icons/hicolor/scalable/apps/ install -p -m 0644 %{ghidra_dir}/Ghidra/RuntimeScripts/Windows/support/ghidra.ico %{buildroot}/%{_datadir}/icons/hicolor/scalable/apps/ install -p -m 0644 %{SOURCE10} %{buildroot}/%{_datadir}/icons/hicolor/scalable/apps/ desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE8} # extract dependencies needed for FFXIVClientStructs mkdir -p %{buildroot}/%{_libdir}/%{name}/Ghidra/Features/Jython/lib/Lib/site-packages tar -xf %{SOURCE9} -C %{buildroot}/%{_libdir}/%{name}/Ghidra/Features/Jython/lib/Lib/site-packages %files %{_bindir}/%{name} %{_bindir}/pyghidraRun %dir %{_libdir}/%{name} %{_libdir}/%{name}/ghidraRun %{_libdir}/%{name}/LICENSE %{_libdir}/%{name}/Extensions/ %{_libdir}/%{name}/Ghidra/ %{_libdir}/%{name}/GPL/ %{_libdir}/%{name}/licenses/ %{_libdir}/%{name}/support/ %{_libdir}/%{name}/bom.json %{_datadir}/applications/ghidra.desktop %{_datadir}/icons/hicolor/scalable/apps/ghidra.ico %{_datadir}/icons/hicolor/scalable/apps/ghidra.png %license %{ghidra_dir}/LICENSE %files server %{_bindir}/%{name}-server %{_bindir}/%{name}-server-admin %{_bindir}/%{name}-server-install %{_bindir}/%{name}-server-uninstall %{_libdir}/%{name}/server/ %files docs %{_libdir}/%{name}/docs/ %{_libdir}/%{name}/GettingStarted.html %{_libdir}/%{name}/GettingStarted.md %{_libdir}/%{name}/docker/Dockerfile %{_libdir}/%{name}/docker/Dockerfile.dockerignore %{_libdir}/%{name}/docker/README.md %{_libdir}/%{name}/docker/README.html %{_libdir}/%{name}/docker/build-docker-image.sh %{_libdir}/%{name}/docker/entrypoint.sh %changelog %autochangelog