我正在使用文件准备软件,使翻译人员能够轻松高效地处理各种文件格式.
就基于文本的格式(xml,php,资源文件......)而言,我的小型准备实用程序工作正常,但对于大多数翻译来说,一个主要问题是处理各种专有二进制格式(Framemaker,Publisher,夸克......).
这些文件很少被要求,需要在昂贵的应用程序中打开(很少有自由职业者可以购买价值2万美元的软件,只是为了每年处理一些项目),即使这样,直接在这些应用程序中工作也不方便.
我希望能够读取这些文件并以这样的方式提取文本,使其可以翻译,然后以最小的努力,甚至更好的方式在原始应用程序中重新导入,以重新创建有效的本机二进制文件.
听起来有用吗?
我在哪里可以找到有关处理二进制文件格式的更多信息,是否有适用于这类工作的有用工具(除了常规的十六进制编辑器)?
提前致谢.
我希望开始简单的硬件开发,并希望进步足以从逆向工程中学习.
我想从一个微控制器开始,并考虑一些,如Mbed和Arduino.我该怎么办?
我想也许是mbed,因为它有USB和以太网功能,还有其他几个,但我真的不知道Arduino有什么.公共汽车盗版(因为它更便宜)也会起作用吗?
我真的不想基本编程; 我目前的视差控制器很痛苦!
对自动生成的C代码进行逆向工程有多容易?我正在研究一个Python项目,作为我工作的一部分,我正在使用Cython编译代码以加速.
这确实有助于速度,但是,我担心在我工作的地方,有些人会试图"窥视"代码并弄清楚它的作用.
Cython代码基本上是一个自动生成的C.逆向工程很难吗?
是否有任何建议可以使代码更安全,反向工程更难做?(我认为只要付出足够的努力,一切都可以逆向设计).
这个问题是关于逆向工程和Microsoft标准C库.
当C程序优雅地运行时,即在a return 0;结束时main().一切都发生了(请概括).具体来说,C库调用的最后一个函数是什么?
我正在处理的遗留项目包括一些二进制jar文件形式的外部库.我们决定对于分析和潜在的修补,我们希望接收这个库的源代码,使用它们来构建新的二进制文件,并在经过详细和足够长的回归测试后切换到这些二进制文件.
假设我们已经检索并构建了源(我实际上处于计划阶段).在进行实际测试之前,我想执行一些"兼容性检查",以排除源代表与"旧"二进制文件中的内容截然不同的可能性.
使用该javap工具,我能够提取用于编译的JDK版本(至少我相信它是JDK的版本).它说,二进制文件是使用主要版本46和次要版本0构建的.根据这篇文章,它映射到JDK 1.2.
假设相同的JDK将用于源编译.
该问题是:有没有验证的可靠的和可能有效的方法,如果这两个二进制文件是由相同的源代码构建的?我想知道所有方法签名和类定义是否相同,以及大多数或可能所有方法实现是否相同/相似.
该库非常大,所以我认为对反编译二进制文件的详细分析可能不是一种选择.
我从官方网站下载了最新的ollydbg 2.x版本,并从tuts4you下载了一些插件.但是如何启用/安装插件?
我的目标是从我的JavaScript项目(由几个.js文件组成)中获取UML模型并将其存储为XMI.
我搜索了互联网,发现js/uml是第一个去的地方.
我已经设法使用Eclipse 3.7.1(Win32)运行js/uml插件以及我预先下载的其他插件的本地安装:
我将提供的示例项目jsuml-example-yui-0.8.4.zip加载到Eclipse中,并将所有我的.js文件也添加到此项目中.
现在我卡住了,不知道如何调用我的.js文件的逆向工程.我可以从项目的上下文菜单中调用'New' - >'Other' - >'UML 2.1 Diagrams' - >'Class Diagram',但我没有得到该助手对话框的以下步骤,如果没有,这是正确的方式.拜托,你能帮我找一个容易理解的点击教程吗?该JS/UML网页无法解释的不够好恕我直言.感谢您的帮助.
为什么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) 我最近一直在学习汇编,并决定反汇编一些我自己的可执行文件来学习.我注意到在线资源经常引用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) 我最近开始寻求更好地理解我的计算机是如何工作的.我的问题是关于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吗?