JEB Decompiler 是一个功能强大的反编译工具,广泛用于逆向工程和调试闭源应用程序。编写前端界面时,可以利用JEB的模块化后端和功能强大的桌面平台UI前端来实现。具体来说,JEB提供了多种架构的反编译器,如DEX、X86、ARM、MIPS等,这些反编译器可以将字节码或本机代码反编译为伪C源代码。
在编写前端时,可以参考JEB的API,使用Python或Java进行高级和自动化的代码分析。此外,JEB还支持通过脚本和扩展来自动化复杂的任务。例如,可以使用Sublime Text 3的扩展来简化JEB脚本的编写过程。
JEB 前端也被称为“JEB 客户端”(或“JEB 第三方客户端”,与“官方 UI 桌面客户端”形成对比)。
JEB 后端 API 使编写新客户端(又称前端)变得轻而易举。客户端可以是:
- 自动化客户端(用于测试、自动化管道)
- 命令行客户端
- 图形前端(例如官方 UI 桌面客户端)
- ...
信息
并非所有 JEB 许可证都允许创建第三方客户端。通过在“关于”对话框中检查您的许可证信息来验证这一点。它应该显示any-client。通常,JEB Pro许可证允许执行第三方客户端。
高级指令
使用提供的源代码模板(见下文)作为客户端的基础。任何客户端都应采取的基本步骤如下:
- 使用JebCoreService检索ICoreContext实例
- 创建IEnginesContext
- 在该上下文中加载一个项目(IRuntimeProject)
- 添加工件并进行处理(ILiveArtifact)
- 检索产品(IUnit)
- 继续与单位正常
-
- 我们建议开发人员阅读我们关于解析器开发的教程系列,以熟悉单元
请参阅我们简化的架构图,以更好地了解这些组件如何相互连接。
源模板
完整源代码:GitHub 上的命令行客户端框架
public class AutoClient {
static final ILogger logger = GlobalLog.getLogger(AutoClient.class);
static {
GlobalLog.addDestinationStream(System.out);
}
// TODO: customize (should be replaced by the LicenseKey entry in your bin/jeb-client.cfg file)
private static final String licenseKey = "...";
// TODO: customize
private static final String baseDir = "...";
public static void main(String[] argv) throws Exception {
if(argv.length <= 0) {
return;
}
long t0 = System.currentTimeMillis();
String location = argv[0];
List
test(files);
logger.info("Done in %ds", (System.currentTimeMillis() - t0) / 1000);
}
/**
* Initialize a core. Create a context within that core. Then, for each input artifact, a
* project is created and the artifact is loaded within that project.
*/
public static void test(List
// create or retrieve a core context (engines container)
ICoreContext core = JebCoreService.getInstance(licenseKey);
// create an engines context (project container)
IFileDatabase projectdb = new JEB2FileDatabase(baseDir);
IFileStore filestore = new SimpleFSFileStore(baseDir);
BaseConfiguration cfg = new BaseConfiguration();
// TODO: customize (alternative is to read your configuration from .cfg file)
cfg.setProperty(".DevPluginClasspath", "...");
// TODO: customize
cfg.setProperty(".DevPluginClassnames", "...");
IConfiguration config = new CommonsConfigurationWrapper(cfg);
IDataProvider dataProvider = new DataProvider(null, projectdb, filestore, null, null, config);
IEnginesContext engctx = core.createEnginesContext(dataProvider, null);
int i = 0;
for(File file: files) {
i++;
logger.info("Testing file %d/%d : %s ...", i, files.size(), file.getName());
// create or load a project (artifact container)
IRuntimeProject prj = engctx.loadProject("ProjectTest" + i);
// process the artifact, get units
ILiveArtifact art = prj.processArtifact(new Artifact(file.getName(), new FileInput(file)));
// proceed with the units
List
// TODO: CUSTOMIZE -- this is the important part
// Basic tests go here
// example:
for(IUnit unit: units) {
logger.info("Unit: %s", unit);
//if(unit instanceof Xyz) {
// ...
//}
}
engctx.unloadProject(prj.getKey());
}
// close the engines
JebCoreService.getInstance().closeEnginesContext(engctx);
}
}
以上就是JEB Decomplier编写前端的相关内容。JEB的前端界面允许用户进行重构操作和脚本编写,从而实现对复杂应用程序的动态分析。通过这些功能,开发者可以更高效地进行逆向工程和调试工作。