逆向分析
说到逆向分析,在实际操作上很少用到,这里我们以ctf中的reverse和mobile来举例
Reverse 以exe 和elf(Linux的可执行化程序)为主
Mobile 全部都是安卓的安装包
Reverse需要一定的汇编基础和最起码的c语言代码审计基础,对于解题的脚本一般都是用c++来写的
Mobile 在reverse基础上需要Java基础,这里我们对mobile的题目只上操作
静态分析
静态代码分析(或静态分析)是软件开发中的软件测试活动,其中分析源代码以查找已知与软件错误或安全漏洞相关的结构。当检测到高风险构造时,静态分析工具会报告违规行为,以供开发人员查看和修复。
动态分析
动态分析是在可控环境中运行程序或者模拟程序的执行过程,同时利用分 析工具,监控程序的所有操作,观察其执行流程和状态,获取执行过程中的各 种数据。调试则是一种最为重要的动态分析技术,能够获取程序的真实行为, 以及指令执行过程中各个操作数的具体值。
总结一下 静态和动态分析基本上都有弊端,需要两者结合起来使用
我们先来说一下reverse的简单题
题目给了一个压缩包 压缩包给了两个文件

这两个文件,这里不是misc类不考虑文件隐藏
然后把easy-32用ida打开

然后按f5反编译
这flag….很是明显
这一题几乎不用动脑,只要会使用ida就基本上没有什么问题
有很多同学可能就要问了,为什么要学逆向分析,而且需要一定的语言基础,原因很简单,好比说之前我们说到的永恒之蓝,实质意义就是一个二进制漏洞,在我们挖掘二进制漏洞的时候需要就需要一定的逆向分析基础
当我们面向移动安全的时候,对apk的分析,就需要更多的技巧了,安卓系统是基于Linux系统内核开发,外围程序是用的Java做的包装,所以apk文件是可以被一些工具打开看到Java源码的
好用的工具个人建议这个
jadx-gui
这个工具是有图形化界面的,所以基本上鼠标点几下就可以了,Java语言和c/c++有一定的类似,但是不完全一样
这里简要阐述一下Java,Java是以万物皆对象为基础来的
所以Java中所有的对象都可以是一个对象包括c语言的main函数,在Java中叫做主类
其他的基本上类似,只不过一些方法和函数,需要去理解和bing,还有Java的包装类也是一个很神奇的东西这里不细谈
需要了解的方法(在Java的方法就是相当于c语言的函数)有
equal()用于比对两个对象
然后就是涉及Java反序列的一些魔法函数
readobject() writeobject()
顾名思义前者就是读一个对象后面就是写一个对象
序列化的实质意义就是将一个对象以一个约定好的表示格式表示出来,也就是writeobject 前者的readobject就相当于把已经被序列化的对象重新读取成程序可以直接调用的对象
序列化的实质意义就是为了减少程序的开销,毕竟一个对象还是要比一串字符要占用的内存多得多的
作者留言
我们后面说到php反序列的时候,我会把php讲一下然后再说Java(www,加入圈子给个面子鼓励一下吧,孩子真的日不动了)
对于Java的开发工具有eclipse和idea我Java水平不到开发,所以没玩过很多次Java,后面我们还会说到,密码学基础和算法理论




没有回复内容