天天看点

1.关于逆向工程(《逆向工程核心原理》笔记)1.关于逆向工程

1.关于逆向工程

逆向工程一般指,通过分析物体、机械设备或系统,了解其结构、功能、行为等,掌握其中原理并改善其不足之处、添加新创意的一系列过程。

代码逆向工程

是逆向工程在软件领域中的应用。

逆向分析方法

逆向分析方法大致分为两种:静态分析和动态分析法。

静态分析法

静态分析是指在不执行程序的情况下,对代码进行分析。通过静态分析可以观察代码的特征结构,获取文件类型,大小,PE头信息、import/export API、内部字符串、是否运行时压缩、注册信息、调试信息、数字证书等信息。同时使用反编译工具查看程序内部代码也是一种静态分析的方法并对我们的动态调试有帮助。

动态分析法

动态调试分析法实在程序执行过程中对代码进行进行动态分析的一种方法,他通过调试来分析代码流,获得内存的状态等。通过动态调试我们就可以分析软件运行时软件程序的行为。

在逆向分析过程中,我们通常先静态分析采集代码的相关信息,然后通过所收集的信息去推断程序的结构和运行机制。通过动态分析将静态分析中比较模糊或者不确定的内容进行验证。动静结合的调试方式会大大增加分析的效率,缩短代码分析时间。

( 不要误认为代码逆向分析就是调试代码。虽然调试代码在代码分析中占据很大的比例,也十分有意思,但它知识代码逆向分析的一个从属概念。实际上在代码分析过程中,同时也会使用多种分析方法。)

源代码、十六进制代码、汇编代码

源代码

源代码就是我们所得到的程序未编译前的代码原稿。

比如说我们在学习C的过程中会遇到hello world这种入门的程序:

#include<stdio.h>
int main()
{
printf("hello world");
return 0;
}
           

这就是我们所说的源代码,不能够直接执行需要编译之后才能执行的代码。

十六进制代码

我们将源文件进行编译之后生成的是含有0和1的二进制文件,是机器去读然后执行的,即使是逆向工程专家也很难理解。但我们在进行查看的时候会将二进制文件转换成十六进制的文件,减少位数以便查看。

汇编代码

对于人类来说二进制约等于是我们完全看不懂的,16进制代码我们看起来有十分困难,所以汇编语言应运而生。下图就是helloworld的汇编代码。

1.关于逆向工程(《逆向工程核心原理》笔记)1.关于逆向工程

所以在代码逆向分析过程中,我们通常会把程序反编译成汇编语言再进行分析。

“打补丁”与“破解”

对程序文件或进程内存内容的更新被称为“打补丁”,“破解”与其含义类似,但是后者的行为是违法的。

学习软件逆向工程技术的人首先要明白,它是一把双刃剑,像是其他技术一样,如果被恶意利用,他就会损害其他人的合法权益,所以学习逆向工程技术必须先培养伦理道德意识,提高个人的道德修养水平。

学习逆向分析技术的禁忌

贪心

相对于其他it技术逆向技术的门槛是比较高的,需要一定的基础奠基。基础知识不可能是一下就能掌握的,不要存在一口吃一个胖子的想法一开始要循序渐进。

急躁

逆向分析的涉及的内容比较多,我们有时候会有这样的想法“我都学了好几天了,怎么连这些问题都不能解决”。其实这是很正常的。逆向工程不是快餐而是有益于健康的慢餐。只要有足够的耐心都会成为大佬的!

后记

天了,怎么连这些问题都不能解决”。其实这是很正常的。逆向工程不是快餐而是有益于健康的慢餐。只要有足够的耐心都会成为大佬的!

之后会每个星期不定期的分享我学习逆向工程的收获和心得,希望对师傅们的学习有所帮助。

继续阅读