chapter1:逆向工程之学习——静态分析

前言

学习web安全也有2年了,最近想攻克一些CTF里面的逆向题目。所以开始着手学习逆向工程。在这里记录一下学习历程。对了我用的书是《有趣的二进制》,虚拟机是52Pojie专用虚拟机。

什么是静态分析

一句话简述就是:在不运行目标程序的情况下进行分析!
那么分析什么呢?分析程序的意图,在没有拿到编译后代码的前提下!

有哪些方法

1.阅读反汇编代码
Q:为什么是反汇编代码?汇编代码就不会读了吗?
A:因为逆向工程的目的是搞清楚程序的主要逻辑,如果能通过反汇编工具来读得话会轻松很多!告诉你个秘密不懂汇编代码也可以进行逆向!但是想走的更远,还是得懂一些基本的二进制代码。

2.提取可执行文件中的字符串,分析使用了哪些单词
因为一些反汇编代码中会出现一些常见的英文单词,比如:document,我们就知道这个可能与文件有关。或许直接给出了一个目录:C:/system/…,我们就知道这个程序和这个地址的有关系。
例如下图:我们通过二进制代码查看器(Winhex),也可以看出一些端倪!
在这里插入图片描述

有哪些好用的工具

1、Winhex
直接观察二进制代码。如上图。
2、IDA(静态分析的神奇)
关于IDA的页面做下说明:
IDA包含两种页面模式:Text View &Graph view
TexviewGraph view按F12可以通过Text View 进入 Graph View。
其实我们发现了,通过Graph view 可以很好的挖掘这段汇编代码的逻辑。<就是一个判断,满足条件走左边,否则走右边>。

第一次的逆向尝试(静态分析)

我们试一下在打开该exe文件,并且输入 2012,看看能否触发Hello 201。
为什么这么做呢?这就是我们上面进行静态分析的结果,从Graph View推测的结论。
在这里插入图片描述可以发现:我们在输入

wsample01a.exe 2012
wasmple01a.exe 2013
wasmple01a.exe 

结果为:
Hello 2012。后两种结果为Hello Windows。
我们下结论。根据传如的参数指可以左右这个程序的输出。
至此,我们完成了一次逆向工程。
因为我们在没有看源代码(C/C++)代码的前提下,搞懂了程序的意义。

这就是逆向工程!!!

该程序的C代码

#include <Windows.h>
#include <tchar.h>

int APIENTRY _tWinMain(
	HINSTANCE hInstance, 
	HINSTANCE hPrevInstance, 
	LPTSTR    lpCmdLine, 
	int       nCmdShow)
{
	if(lstrcmp(lpCmdLine, _T("2012")) == 0){
		MessageBox(GetActiveWindow(), 
			_T("Hello! 2012"), _T("MESSAGE"), MB_OK);
	}else{
		MessageBox(GetActiveWindow(), 
			_T("Hello! Windows"), _T("MESSAGE"), MB_OK);
	}	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值