前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

反编译学习 - 0KB - 博客园 0KB 博客园 | 首页 | 发新随笔 | 发新文章 | 联系 | 订阅 | 管理 随笔:20 文章:0 评论:0 引用:0 反编译学习 最近开始学习基于arm反编译,而至于学习反汇编的原因,或许是头脑发热所做的决定吧…… 由于不同平台上的编译环境有较大的不同,因而生成的中间文件以及可执行程序的文件格式都有所不同,如同一机器上,linux系统gcc编译器生成的中间文件为.o文件,而window系统vc工具提供的编译工具cl.exe编译生成的中间文件则是.obj;当然.exe与.elf也是不同的文件类型。 为了方便实例的编译和反编译结果的验证,后续的实例基于如下工具:windows+ADS1.2+IDA5.5,当然,如果你有一个简单的嵌入式硬件平台是最好了。 在描述反编译过程之前,我再简单的赘述一下C语言的一点基本的知识,C程序代码到可执行程序的流程主要分为如下几个步骤: 1、预处理(.c),不过由于预处理只进行了一些替换等工作,我们后续不做分析,仅从汇编开始; 2、编译,优化程序(.s,.asm); 3、汇编(.o,.a,.ko); 4、链接(.elf,.axf); 嵌入式环境中,常见的文件类型主要是.o,.a,或者是.elf和.axf文件,这些程序的实现我们是不可见的,因此需要把他们还原为可读的C程序代码,了解到上述的编译过程,我们基本上既可以大致明白反编译的基本过程了。反编译的基本过程如下: 1、*old.o-->*old.asm:拿到.o文件使用IDA反汇编工具可以查看汇编代码,如果你拿到的是.a文件,该文件则是通过工具把几个.o文件链接到一起的,我们也可以使用类似的步骤把.a文件分离成一个个.o文件,进而再一个个分析;当然,你可以直接使用IDA工具打开.a文件,再选择具体分析哪一个.o文件; 2、*old.asm-->*new.c:分析.map中汇编的实现,通过汇编指令的分析得出相应的C源代码; 3、*new.c-->*new.asm:把反编译生成的new*.asm与*old.asm通过beyond compare进行比较,分析差异,知道确定差异问题在语义上基本没有问题; 4、*new.c-->*new.axf:生成可执行程序对比可执行程序的执行结果是否有差异,没有差异基本证明反编译结果的正确性,当然如果最初拿到的是*old.o文件,那我们就需要生成对应的*new.o文件,并使之替换原始的*old.o文件,然后添加到工程中,再进一步验证其正确性。 发表于 2011-10-03 20:44 0KB 阅读(...) 评论(...) 编辑 收藏 刷新评论刷新页面返回顶部 博客园首页博问新闻闪存程序员招聘知识库 公告 Powered by: 博客园模板提供:沪江博客 Copyright ©2014 0KB