5.26~5.27

https://blog.csdn.net/m0_72827793/article/details/130478513
接着之前的内容

32bit.exe为何运行不了?

第一个问题当我运行32bbit.exe
那是因为我编译出的程序时64位的程序
在这里插入图片描述
64位程序和32位程序,在编译的时候,具有差异,在32位下,指针是4 字节的,在64位下,指针是8字节的
也就是说,所有32位定义的,pdword,pbyte,pvoid 等等,带有Pxxx的类型,都会发生变化,结构体所拿到的东西也就变了。
所以编译成32位的程序,问题就解决了
在这里插入图片描述

下面程序的参数个数和意义分别是什么?

5.26~5.27_第1张图片

这两个参数
argc是命令执行的个数,第二个是windows运行的入口
主函数main中变量(int argc,char *argv[ ])的含义:
argc用来统计你运行程序时送给main函数的命令行参数的个数。
argv[ ]: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数.
argv[0] 指向程序运行的全路径名
argv[1] 指向在DOS命令行中执行程序名后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串

argv[argc]为NULL。
原文链接:https://blog.csdn.net/xyw_blog/article/details/15686961

5.26~5.27_第2张图片
上面这个代码,判断是不是两个命令
例如:
在这里插入图片描述
master1.exe 是1
64bit.exe 是2
但在数组里是0、1
所以这个程序的参数应该是2个,一个是它本身,另一个是需要加载的EXE

下面函数具体做了什么操作?

5.26~5.27_第3张图片

将二进制文件读入内存中
5.26~5.27_第4张图片

下面这段代码有什么用?

在这里插入图片描述这段代码是先加载NTDLL。dll 模块,然后去里面找到 函数NtUnmapViewOfSection 的函数指针,最后调用这个函数
调用了NtUnmapViewOfSection函数,去卸载了(LPVOID)ntHeader->OptionalHeader.ImageBase这个地址所对应的内存模块
把这个地址所对应的内存模块从当前进程中卸载掉,为后续的EXE重新映射到内存做铺垫

现在有个问题,如果,这个地址是当前进程中,在用的地址范围,这个卸载操作会不会引擎进程崩溃?

任何正在使用的地址空间强制卸载,都会发生崩溃
正在使用的内存地址空间突然不可访问后,CPU就会往上抛异常,告诉操作系统,最后操作系统就终止了当前进程的运行

下面这个if检查什么

5.26~5.27_第5张图片
!pImageBase == 1 且 !relocDir == 1
即pImageBase==0且relocDir ==0时执行

下面这段代码是干什么的?

在这里插入图片描述

把读入的二进制文件复制到刚才拷贝的pImageBase中
单步调试看一下窗口
5.26~5.27_第6张图片
DOS 头,NT头 拷贝过来

下面这段代码是干啥的?

5.26~5.27_第7张图片
VA保存方式,相对于内存镜像基址pImageBas
VA是在内存中用地址,PointerToRawData 这个是相对于文件偏移的地址
既然是重新映射,那就得符合内存布局规律,所以地址也得是按照相对image 首地址去计算

下面这个函数是干什么?

在这里插入图片描述
一些内存分配,和字串的拷贝,函数有命令行获取
根据cmdline复制出两份,一份Unicode一份Ansi的cmdline
hijackCmdline = true; 这个是一个,HOOK,函数的标记
置为true ,后续是要设置IATHook 的

对于HOOK怎么理解?

把系统的函数调用流程劫持到我们的函数内
动态获取,程序内部的函数参数,之后再在hook函数内部调用真正的api函数
得到的调用参数
比如,动态观察程序内部的运行情况,如果钩了文件函数,就可以知道这个程序动态跑的时候,操作过什么文件、
钩了网络函数,后者内存函数,对应的操作细节,你就能知道了
像打日志一样,按先后都打印出来,这个不就是程序分析报告么
而且HOOK函数,可以劫持参数留作它用,也可以阻断这个函数调用流程,如果有有害参数,可以直接结束此次函数调用,直接返回,而不是调用真正的函数
记得一点,HOOK 操作,可以劫持函数调用流程,可以加上我们的操作,截留信息等等
最典型的例子,就是你打开一个病毒文件,装了杀毒软件的系统,就会告诉你这个文件打开失败,是因为杀软在底层劫持文件打开流程,提前检查了这个文件,所以在底层拒绝了这次打开操作

最后再想一下,如果我们想获取文件打开信息,需要hook哪个函数?

后续。。。。。。

你可能感兴趣的:(上课内容,学习)