【安全学习之路】Day46

发布时间 2023-10-17 01:37:56作者: Corax0o0

最近网上找了一套课,打算看着先学学。

非常入门的一段helloworld代码。

因为getchar的存在所以需要我们输入任意字符来结束

重新编译一遍,这次在编译选项当中加入/W4,这个简单来讲就是严谨等级,应该是分为四个等级1最低,4最高。
这么编译之后,就会显示一些比较容易出歧义或者问题的报警,就像这里告诉我们两个没有引用的形参。

但实际上还是能出现这个中间的obj文件的。
在运行到这里之后就有观测条件了。

使用winhex查看内存中的这个进程
这个内存空间除了hello.exe之外,由多个dll作为支撑。
.
.

首先通过这里的%p输出这个n的地址,然后

可以看到这里给出的内存地址是
0DDEFEFF870
我们通过winhex查看内存的功能
(小端序)

可以看到这个程序的这个数据在内存中的形态。



后面讲的就是include实质内容
用预处理展示命令


可以看到出现了一个.i中间文件

点进内容查看之后可以看到这个里面是有一个将include的内容放进中间文件的一个步骤。
补充一个,include当中.c一般放功能性文件(产生处理器文件)
.h放一些声明性文件,后面逆向的时候可以注意下。
另外include不检查后缀名,意味着include"sasas.bmp"或者什么jpg也都是可以的。

printf格式化 输出到 标准输出设备(涉及驱动,编译原理)返回成功输出的字符数

MSDN里面的实例介绍。

重定向符号
getchar返回输入的内容的ascii值。

逆向工程核心原理

IMAGE_FILE_HEADER

主要是machine字段值发生变化,pe32为014c,pe32+为8664

IMAGE_OPTIONAL_HEADER

这个应该是变化最大的部分


看着很多,整理一下

Magic

这个作为标志位发生变化,32中是010b,32+为020b,windowsPE装载器通过检查这个字段的值来区分他是32位还是64

BASEOFDATA

在32中用于指示数据节的起始地址 64中删除了这个

IMAGEBASE

由原来的双字dword变为ulonglong类型,为了适应增大的进程虚拟内存。借助该字段,pe32+能加载到16t虚拟内存的任何位置。

堆和栈

相关数据类型也变为ulonglong型。

IMAGE_THUNK_DATA


字节大小改变了,从4变为8
其中IMAGE_IMPORT_DESCRIPTOR结构体的OriginalFirstThunk ( INT)与FirstThunk( IAT )字段值都是指向IMAGETHUNK DATA结构体数组的RVA

IMAGE_TLS_DIRECTORY

部分成员为VA,在32+被扩展为8个字节。

IMAGE_TLS_DIRECTORY结构体的startaddressofrawdata,endaddressofrawdata,addressofindex,addressofcallbacks字段持有的值都是VA值,所以他们也被扩展为64为中需要的8个字节。

WINDBG

这一章里面主要是作了WDG的一些介绍,后面实践的时候慢慢去弄。

64位调试

调试器


基本上向下兼容的。

调试

一个实例wow64test


这个实例里面的内容也很简单,调用getsystemdirectory,createfile,shgetspecial-floderpath,regcreatekey四个api,x86编译的程序在64位运行的时候就需要通过wow64进行重定向,重定向包括系统文件夹和注册表键值。

可以看到重定位下的具体值不太一样,后面的东西明天再研究。