标签: reverse-engineering

如何出于兼容性目的反向工程二进制文件格式

我正在使用文件准备软件,使翻译人员能够轻松高效地处理各种文件格式.

就基于文本的格式(xml,php,资源文件......)而言,我的小型准备实用程序工作正常,但对于大多数翻译来说,一个主要问题是处理各种专有二进制格式(Framemaker,Publisher,夸克......).

这些文件很少被要求,需要在昂贵的应用程序中打开(很少有自由职业者可以购买价值2万美元的软件,只是为了每年处理一些项目),即使这样,直接在这些应用程序中工作也不方便.

我希望能够读取这些文件并以这样的方式提取文本,使其可以翻译,然后以最小的努力,甚至更好的方式在原始应用程序中重新导入,以重新创建有效的本机二进制文件.

听起来有用吗?

我在哪里可以找到有关处理二进制文件格式的更多信息,是否有适用于这类工作的有用工具(除了常规的十六进制编辑器)?

提前致谢.

reverse-engineering binaryfiles

7
推荐指数
1
解决办法
2874
查看次数

开始硬件开发

我希望开始简单的硬件开发,并希望进步足以从逆向工程中学习.

我想从一个微控制器开始,并考虑一些,如Mbed和Arduino.我该怎么办?

我想也许是mbed,因为它有USB和以太网功能,还有其他几个,但我真的不知道Arduino有什么.公共汽车盗版(因为它更便宜)也会起作用吗?

我真的不想基本编程; 我目前的视差控制器很痛苦!

microcontroller reverse-engineering hardware-design

7
推荐指数
0
解决办法
655
查看次数

逆向工程师自动生成C?

对自动生成的C代码进行逆向工程有多容易?我正在研究一个Python项目,作为我工作的一部分,我正在使用Cython编译代码以加速.

这确实有助于速度,但是,我担心在我工作的地方,有些人会试图"窥视"代码并弄清楚它的作用.

Cython代码基本上是一个自动生成的C.逆向工程很难吗?

是否有任何建议可以使代码更安全,反向工程更难做?(我认为只要付出足够的努力,一切都可以逆向设计).

c python reverse-engineering cython

7
推荐指数
1
解决办法
1703
查看次数

当C++程序在Windows上终止时,终止存根调用的最后一个函数是什么?

这个问题是关于逆向工程和Microsoft标准C库.

当C程序优雅地运行时,即在a return 0;结束时main().一切都发生了(请概括).具体来说,C库调用的最后一个函数是什么?

c++ reverse-engineering visual-c++

7
推荐指数
1
解决办法
1013
查看次数

如何检查二进制文件是否是从特定来源构建的

我正在处理的遗留项目包括一些二进制jar文件形式的外部库.我们决定对于分析和潜在的修补,我们希望接收这个库的源代码,使用它们来构建新的二进制文件,并在经过详细和足够长的回归测试后切换到这些二进制文件.

假设我们已经检索并构建了源(我实际上处于计划阶段).在进行实际测试之前,我想执行一些"兼容性检查",以排除源代表与"旧"二进制文件中的内容截然不同的可能性.

使用该javap工具,我能够提取用于编译的JDK版本(至少我相信它是JDK的版本).它说,二进制文件是使用主要版本46和次要版本0构建的.根据这篇文章,它映射到JDK 1.2.

假设相同的JDK将用于源编译.

问题是:有没有验证的可靠的和可能有效的方法,如果这两个二进制文件是由相同的源代码构建的?我想知道所有方法签名和类定义是否相同,以及大多数或可能所有方法实现是否相同/相似.

该库非常大,所以我认为对反编译二进制文件的详细分析可能不是一种选择.

java reverse-engineering

7
推荐指数
1
解决办法
879
查看次数

如何为ollydbg 2.xx设置插件?

我从官方网站下载了最新的ollydbg 2.x版本,并从tuts4you下载了一些插件.但是如何启用/安装插件?

assembly plugins reverse-engineering ollydbg

7
推荐指数
1
解决办法
3万
查看次数

如何使用js/uml对我的JavaScript文件进行反向工程?

目标

我的目标是从我的JavaScript项目(由几个.js文件组成)中获取UML模型并将其存储为XMI.

我到底有多远

我搜索了互联网,发现js/uml是第一个去的地方.

我已经设法使用Eclipse 3.7.1(Win32)运行js/uml插件以及我预先下载的其他插件的本地安装:

  1. mdt-uml2tools-Update-incubation-I201103290512.zip(安装所需的org.eclipse.uml2.diagram.clazz 0.10.0)
  2. jsuml-eclipse-0.8.4.zip(仅适用于Eclipse 3.7.1(Indigo))

我将提供的示例项目jsuml-example-yui-0.8.4.zip加载到Eclipse中,并将所有我的.js文件也添加到此项目中.

问题

现在我卡住了,不知道如何调用我的.js文件的逆向工程.我可以从项目的上下文菜单中调用'New' - >'Other' - >'UML 2.1 Diagrams' - >'Class Diagram',但我没有得到该助手对话框的以下步骤,如果没有,这是正确的方式.拜托,你能帮我找一个容易理解的点击教程吗?该JS/UML网页无法解释的不够好恕我直言.感谢您的帮助.

javascript uml reverse-engineering

7
推荐指数
2
解决办法
6994
查看次数

GCC生成组装

为什么printf函数会导致序言的变化?

C code_1:

#include <cstdio>

int main(){
  int a = 11;
  printf("%d", a);
}
Run Code Online (Sandbox Code Playgroud)

GCC -m32生成一个:

.LC0:
        .string "%d"
main:
        lea     ecx, [esp+4]           // What's purpose of this three
        and     esp, -16               // lines?
        push    DWORD PTR [ecx-4]      // 
        push    ebp
        mov     ebp, esp
        push    ecx
        sub     esp, 20                // why sub 20?
        mov     DWORD PTR [ebp-12], 11
        sub     esp, 8
        push    DWORD PTR [ebp-12]
        push    OFFSET FLAT:.LC0
        call    printf
        add     esp, 16
        mov     eax, 0
        mov     ecx, DWORD PTR …
Run Code Online (Sandbox Code Playgroud)

c c++ assembly gcc reverse-engineering

7
推荐指数
1
解决办法
601
查看次数

在x86程序集中分配堆栈上的变量.rbp和rsp vs esp和ebp

我最近一直在学习汇编,并决定反汇编一些我自己的可执行文件来学习.我注意到在线资源经常引用esp和ebp,堆栈和基指针.我写了这个程序:

int comp(int a, int b) {
    return a == b;
}
int main() {
    int a = 1;
    int b = 2;
    comp(a, b); 
}
Run Code Online (Sandbox Code Playgroud)

在Radare 2中,这反映为:

0x0040050e    55           push rbp
|           0x0040050f    4889e5       mov rbp, rsp
|           0x00400512    4883ec10     sub rsp, 0x10
|           0x00400516    c745f801000. mov dword [rbp-0x8], 0x1
|           0x0040051d    c745fc02000. mov dword [rbp-0x4], 0x2
|           0x00400524    8b55fc       mov edx, [rbp-0x4]
|           0x00400527    8b45f8       mov eax, [rbp-0x8]
|           0x0040052a    89d6         mov esi, edx
|           0x0040052c    89c7         mov …
Run Code Online (Sandbox Code Playgroud)

x86 assembly reverse-engineering ida

7
推荐指数
1
解决办法
4590
查看次数

at&t汇编中'push'和'pushq'之间的区别是什么

我最近开始寻求更好地理解我的计算机是如何工作的.我的问题是关于push和pushq之间的区别.

我知道push会将一个值写入堆栈,我的假设是pushq做了类似的事情.q在那里的事实让我觉得应该有一个微妙的区别,但我似乎无法理解差异.

我说在使用命令'layout asm'使用gdb调试文件/ lib/udev/iphone-set-info时考虑这个问题.

有问题的代码是:

pushq  $0x0
push   %r9
Run Code Online (Sandbox Code Playgroud)

我知道$ 0x0对于NULL是十六进制的,而%r9是通用寄存器之一.这只是意味着Null我们写入堆栈,其上面写有寄存器%r9吗?

linux assembly gdb reverse-engineering att

7
推荐指数
1
解决办法
6715
查看次数