{"id":5017,"date":"2025-09-10T10:54:24","date_gmt":"2025-09-10T18:54:24","guid":{"rendered":"https:\/\/www.pnfsoftware.com\/blog\/?p=5017"},"modified":"2026-04-09T11:44:50","modified_gmt":"2026-04-09T19:44:50","slug":"vibe-reversing-with-vibre-ai-assistant","status":"publish","type":"post","link":"https:\/\/www.pnfsoftware.com\/blog\/vibe-reversing-with-vibre-ai-assistant\/","title":{"rendered":"Reversing with VIBRE AI Assistant"},"content":{"rendered":"\n<p><em>Update (April 9 2026): Four API connectors are supported by VIBRE:<br>&#8211; OpenAI ChatGPT (<code>\/v1\/chat\/completions<\/code>)<br>&#8211; Anthropic Claude (<code>\/v1\/messages<\/code>)<br>&#8211; Google Gemini (<code>\/v1beta\/$MODEL:generateContent<\/code>)<br>&#8211; AWS Bedrock (<code>\/model\/$MODEL\/converse<\/code>) [added in JEB 5.39]<\/em><\/p>\n\n\n\n<p>JEB 5.32 ships with <em>VIBRE<\/em> <sup class='footnote'><a href='#fn-5017-1' id='fnref-5017-1' onclick='return fdfootnote_show(5017)'>1<\/a><\/sup> , an AI assistant that will help reverse-engineer your project files. You may call VIBRE at any time by pressing the backtick key or via the Action menu.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.pnfsoftware.com\/blog\/wp-content\/uploads\/2025\/09\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"832\" src=\"https:\/\/www.pnfsoftware.com\/blog\/wp-content\/uploads\/2025\/09\/image-1-1024x832.png\" alt=\"\" class=\"wp-image-5061\" srcset=\"https:\/\/www.pnfsoftware.com\/blog\/wp-content\/uploads\/2025\/09\/image-1-1024x832.png 1024w, https:\/\/www.pnfsoftware.com\/blog\/wp-content\/uploads\/2025\/09\/image-1-300x244.png 300w, https:\/\/www.pnfsoftware.com\/blog\/wp-content\/uploads\/2025\/09\/image-1-768x624.png 768w, https:\/\/www.pnfsoftware.com\/blog\/wp-content\/uploads\/2025\/09\/image-1-1536x1248.png 1536w, https:\/\/www.pnfsoftware.com\/blog\/wp-content\/uploads\/2025\/09\/image-1.png 1965w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">The VIBRE dialog can be opened at any time by pressing the backtick key<\/figcaption><\/figure>\n\n\n\n<p>It is backed by:<br>1) JEB&#8217;s Model Context Protocol (MCP) server<br>2) A Large Language Model (LLM) of your choice<\/p>\n\n\n\n<p>VIBRE can be used on any JEB project consisting of any file(s). It has a complete view of the opened project and can manipulate it via the tools offered by the MCP server, invoked by the LLM.<\/p>\n\n\n\n<p>The short videos below demonstrate how VIBRE can be prompted by a JEB user:<\/p>\n\n\n\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/Gh84QjP7LpA?si=K47O7kFYzcssi5FN\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n\n\n\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/3PNDH3NVnQQ?si=xYdh2DE5iJVzZAlA\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n\n\n\n<h2 class=\"wp-block-heading\">Selecting a language model<\/h2>\n\n\n\n<p>You may select any model that fits your &#8211; or your organization&#8217;s &#8211; requirements:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A commercial frontier LLM<\/strong>: such as GPT-5, Claude Sonnet or Opus, Gemini, Grok, Mistral, Deepseek, Qwen, etc. We have several presets for most well-known top-of-the-line LLMs. Make sure to fill in your API key if it is not already present in a well-known environment variable.<\/li>\n\n\n\n<li><strong>Your organization&#8217;s private language model<\/strong>: if you work in a SCIF, isolated network, work on sensitive artifacts, or have similar constraints that forbid the use of outside LLMs.<\/li>\n\n\n\n<li><strong>A small or medium model running locally on your machine<\/strong>: such as  gpt-oss or codellama running on LM Studio or Ollama. You will need a robust GPU to obtain decent inference times.<\/li>\n\n\n\n<li><strong>Our own, free OpenAI&#8217;s API-compatible end-point<\/strong>: It is the first preset option and the chosen default if no LLM API key was provided. Our end-point is a proxy to several well-known commercial models, including gpt-5-mini, devstral-medium or deepseek-chat. We intend to provide this option free of charge for as long as traffic and usage allows, but be aware that it is rate limited!<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.pnfsoftware.com\/blog\/wp-content\/uploads\/2025\/09\/vibre-settings-1.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"985\" height=\"750\" src=\"https:\/\/www.pnfsoftware.com\/blog\/wp-content\/uploads\/2025\/09\/vibre-settings-1.gif\" alt=\"\" class=\"wp-image-5022\" style=\"width:377px;height:auto\"\/><\/a><figcaption class=\"wp-element-caption\">The VIBRE settings dialog allows the users to select their preferred language model.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">JEB&#8217;s MCP server<\/h2>\n\n\n\n<p>The MCP server offers an array of tools to access JEB&#8217;s API, allowing the LLM to examine and work on your project.<\/p>\n\n\n\n<p>Some of the available tools at the time of writing (pre-release 5.32) are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>rename_pseudo_code_variables<\/code>: Rename one or more local variables or parameters defined in the decompiled pseudo-code of a method. The method must have been decompiled first.<\/li>\n\n\n\n<li><code>bulk_rename_dex_items<\/code>: Rename dex items such as classes, methods and fields to names that are shorter and readable.<\/li>\n\n\n\n<li><code>create_dex_package<\/code>: Create a new dex code package<\/li>\n\n\n\n<li><code>decompile_code_item<\/code>: Decompile a code item, such as a method or class, to pseudo code<\/li>\n\n\n\n<li><code>decompile_dex_class<\/code>: Decompile a dex class to Java pseudo code<\/li>\n\n\n\n<li><code>decompile_dex_method<\/code>: Decompile a dex method to Java pseudo code<\/li>\n\n\n\n<li><code>get_apk_certificate<\/code>: Retrieve a human-readable summary of the X.509 certificate that was used for signing<\/li>\n\n\n\n<li><code>get_apk_manifest<\/code>: Retrieve the XML content of the Android APK manifest<\/li>\n\n\n\n<li><code>get_apk_resource_by_path<\/code>: Retrieve the contents of an APK structured resource file using its fully-qualified name, examples: &#8216;values-v30\/strings.xml&#8217;, or &#8216;layout\/foo.txt&#8217;<\/li>\n\n\n\n<li><code>get_disassembly_snippet<\/code>: Retrieve a chunk of disassembly code around a provided address.<\/li>\n\n\n\n<li><code>get_project_information<\/code>: Retrieve high-level information about the project, such as its name, creation time, top-level artifact files, and units to work on.<\/li>\n\n\n\n<li><code>list_apk_resources<\/code>: List the fully-qualified paths of layouts, strings, images, and other structured resources stored in the APK<\/li>\n\n\n\n<li><code>list_code_methods<\/code>: Retrieve the list of internal methods defined in the code unit<\/li>\n\n\n\n<li><code>list_code_strings<\/code>: Retrieve the list of strings present in a code unit such as a dex, pe, elf, etc.<\/li>\n\n\n\n<li><code>list_cross_references<\/code>: Retrieve cross-references to an address in a code unit, that is, the users or callers of the item at the provided address.<\/li>\n\n\n\n<li><code>list_dex_classes<\/code>: Retrieve the list of type descriptors for classes, interfaces and enums defined in the dex<\/li>\n\n\n\n<li><code>list_dex_strings<\/code>: Retrieve the list of strings defined in the dex constants pools or decrypted at run-time<\/li>\n\n\n\n<li><code>list_units<\/code>: Retrieve all the units of this project, including those that were not provided by the high-level tool get_project_information. The result is a list of unit paths.<\/li>\n\n\n\n<li><code>move_dex_class_to_package<\/code>: Move a dex class to another existing package<\/li>\n\n\n\n<li><code>move_dex_package_to_package<\/code>: Move a source package inside a destination package<\/li>\n\n\n\n<li><code>rename_code_item<\/code>: Rename a code class, method or field to another name, which may be better-suited or more descriptive than the original name.<\/li>\n\n\n\n<li><code>rename_dex_items<\/code>: Rename one or more dex class, method or field to another name, which may be better or more descriptive than the current name.<\/li>\n\n\n\n<li><code>rename_dex_package<\/code>: Rename a dex code package to another name<\/li>\n<\/ul>\n\n\n\n<p>Note that any MCP-aware agent (e.g. Claude desktop, LM Studio, etc.) may connect to the MCP server and instruct JEB to work on a project. You may start the MCP server explicitly through the file menu.<\/p>\n\n\n\n<p>The MCP server may also be started by custom headless clients. Use the static methods offered by <code>com.pnfsoftware.jeb.client.mcp.JebMcpServerInstance<\/code> to start and stop the server.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Legacy Assistant<\/h2>\n\n\n\n<p>The <a href=\"https:\/\/www.pnfsoftware.com\/blog\/jeb-assistant\/\">legacy assistant<\/a> was introduced in JEB 5.2 to provide better names suggestions for types, methods and fields. It remains available by clicking the button on the top right-hand corner of a decompiled code fragment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>We strongly encourage you to give VIBRE a try: it often provides helpful analysis or pre-analysis information, and when guided properly, it can operate on a project much faster than any human could ever do. I use it to rename classes, methods, fields, and local variables\/parameters based on the analysis of the decompiled code, and the results are often very good if you use models that were trained on code (such as Sonnet 4 (used by Claude Code), as well as Devstral or Deepseek). Provide your feedback through the usual means (<a href=\"mailto:support@pnfsoftware.com\">support@pnfsoftware.com<\/a>, <a href=\"https:\/\/www.x.com\/jebdec\">x.com\/jebdec<\/a>, <a href=\"https:\/\/www.pnfsoftware.com\/chat\">pnfsoftware.com\/chat<\/a>), we will be happy to tweak and optimize VIBRE for your use cases.<\/p>\n\n\n\n<p>Thank you &amp; Until next time &#8211; Nicolas \ud83d\ude42<\/p>\n\n\n\n<p>&#8211;<\/p>\n\n\n<div class='footnotes' id='footnotes-5017'><div class='footnotedivider'><\/div><ol><li id='fn-5017-1'> You guessed it: VIBRE is an acronym for VIBe REversing! <span class='footnotereverse'><a href='#fnref-5017-1'>&#8617;<\/a><\/span><\/li><\/ol><\/div>","protected":false},"excerpt":{"rendered":"<p>Update (April 9 2026): Four API connectors are supported by VIBRE:&#8211; OpenAI ChatGPT (\/v1\/chat\/completions)&#8211; Anthropic Claude (\/v1\/messages)&#8211; Google Gemini (\/v1beta\/$MODEL:generateContent)&#8211; AWS Bedrock (\/model\/$MODEL\/converse) [added in JEB 5.39] JEB 5.32 ships with VIBRE 1 , an AI assistant that will help reverse-engineer your project files. You may call VIBRE at any time by pressing the backtick &hellip; <a href=\"https:\/\/www.pnfsoftware.com\/blog\/vibe-reversing-with-vibre-ai-assistant\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Reversing with VIBRE AI Assistant<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[30],"tags":[],"class_list":["post-5017","post","type-post","status-publish","format-standard","hentry","category-jeb5"],"_links":{"self":[{"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/posts\/5017","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/comments?post=5017"}],"version-history":[{"count":1,"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/posts\/5017\/revisions"}],"predecessor-version":[{"id":5124,"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/posts\/5017\/revisions\/5124"}],"wp:attachment":[{"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/media?parent=5017"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/categories?post=5017"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pnfsoftware.com\/blog\/wp-json\/wp\/v2\/tags?post=5017"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}