【安全学习之路】Day46

sec

Posted by Corax on September 30, 2023

最近网上找了一套课,打算看着先学学。 非常入门的一段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进行重定向,重定向包括系统文件夹和注册表键值。 可以看到重定位下的具体值不太一样,后面的东西明天再研究。