ImHex é um editor hexadecimal, escrito em C++, para engenheiros reversos, programadores e pessoas que valorizam suas retinas quando trabalham às 3 da manhã. 😃
Há uma infinidade de coisas que podem ser feitas com ImHex. Nesse vídeo veremos como ele pode ser útil, por exemplo, para “esconder” os assets(imagens, fonts, áudios, …) dos seus games transformando em Hex!
Como exemplo mostraremos como implementar em Desenvolvimento de Games mais precisamente em SFML.
Você pode usar pacotes binários compactados disponíveis em Releases no repositório no GitHub do ImHex.
Há pacotes para: Windows com MSYS2, macOS, Debian(serve para Ubuntu, Mint e entre outros), Arch e Fedora.
Após baixado você pode exercutar o pacote. Exemplo no Ubuntu:
wget -q https://github.com/WerWolv/ImHex/releases/download/v1.31.0/imhex-1.31.0-Ubuntu-23.04-x86_64.deb
sudo apt install ./imhex-1.31.0-Ubuntu-23.04-x86_64.deb
Ou você também pode compilar o ImHex do zero, que foi como eu fiz…
Antes de tudo certifique-se de possuir as dependências:
apt install -y build-essential gcc-12 g++-12 lld ${PKGCONF:-} cmake ccache \
libglfw3-dev libglm-dev libmagic-dev libmbedtls-dev libfreetype-dev \
libdbus-1-dev libcurl4-gnutls-dev libgtk-3-dev ninja-build
pacman -S $@ --needed cmake gcc lld glfw file mbedtls freetype2 dbus gtk3 curl fmt \
yara nlohmann-json ninja
dnf install -y cmake dbus-devel file-devel freetype-devel libcurl-devel gcc-c++ git \
mesa-libGL-devel glfw-devel lld mbedtls-devel gtk3-devel
emerge -n yara mbedtls ccache nlohmann-json glfw fmt gtk
pacman -S --needed --noconfirm \
mingw-w64-x86_64-gcc \
mingw-w64-x86_64-lld \
mingw-w64-x86_64-cmake \
mingw-w64-x86_64-ccache \
mingw-w64-x86_64-glfw \
mingw-w64-x86_64-file \
mingw-w64-x86_64-curl-winssl \
mingw-w64-x86_64-mbedtls \
mingw-w64-x86_64-freetype \
mingw-w64-x86_64-dlfcn \
mingw-w64-x86_64-ninja \
mingw-w64-x86_64-capstone
Agora clone o repositório de forma recursiva, compile e instale com os comandos abaixo:
git clone --recurse-submodules https://github.com/WerWolv/ImHex
cd ImHex
mkdir build && cd build
CC=gcc CXX=g++ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="/usr" \
-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_C_FLAGS="-fuse-ld=lld" -DCMAKE_CXX_FLAGS="-fuse-ld=lld" \
-DCMAKE_OBJC_COMPILER_LAUNCHER=ccache -DCMAKE_OBJCXX_COMPILER_LAUNCHER=ccache ..
sudo make install
Clique aqui para ver o caminho onde os arquivos são instalados
Após instalação, já pode remover o repositório clonado:
cd ../..
rm -rf ImHex/
img.hpp
font.hpp
data
:#include <SFML/Graphics.hpp>
#include <cstdint>
#include <array>
#include "img.hpp"
#include "font.hpp"
int main(){
sf::RenderWindow window(sf::VideoMode(1280,720), "SFML::Terminal Root");
sf::Image img;
img.loadFromMemory(img_data.data(), img_data.size());
sf::Texture texture;
texture.loadFromImage(img);
sf::Sprite sprite(texture);
sf::Font font;
font.loadFromMemory(data.data(), data.size());
sf::Text text("Terminal Root", font, 100);
text.setFillColor(sf::Color::White);
text.setOutlineColor(sf::Color::Black);
text.setOutlineThickness(4);
text.setPosition(100.f, 10.f);
while( window.isOpen() ){
sf::Event event;
while( window.pollEvent(event)){
if( event.type == sf::Event::Closed ){
window.close();
}
}
window.clear(sf::Color(55, 44, 77));
window.draw(text);
window.draw(sprite);
window.display();
}
return EXIT_SUCCESS;
}
// g++ main.cpp -lsfml-graphics -lsfml-window -lsfml-system