一、分析导入表,画出导入表结构图
二、针对导入表,执行相对应的功能
1.程序执行出现第一个对话框出现自己的学号
(1)修改标题
我选择用OD修改,这个软件左下角的位置就是数据区
双击即可修改内容,原来的“教学测试”是以00结尾的,通过之前学习的知识可以判断这个00就是字符串的结束符,如果新的字符串比原字符串长,那么可能会覆盖此处位置,就得注意要有一个00作为结束符。
可以看到,原来的“教学测试”变成了新的内容,而且两个窗口都变了(1000H & 1016H)
(2)修改内容
把第一个窗口的内容修改为学号
虽然说加了这么多的0,第二个窗口(1016H)还是能正常显示内容的
2.使用序号导入方式导入其中至少一个函数,程序正常执行
(一)基础知识:
(二)开始修改
2.1圈出来的位置就是INT
2.2圈出来的位置是IAT
他们两个都指向了2064地址,该地址存的数据为导入的第一个函数名。
值为00002064,二进制为0010 0000 0110 0100,该状态为通过文件名导入
双字最高位改为1,二进制为1010 0000 0110 0100该状态为通过序号导入,值为80002064
3.改0为8,这里还没有完,如果通过序号来导入,那么我们首先要知道序号是什么,并告诉此程序。
找到ExitProcess的序号,ord后面的数字就是序号,序号为356
此处数据为十进制,转为十六进制,是164
改为164
结果:修改成功
这样,即使你把导入函数名ExitProcess删了,程序还是能够通过序号找到ExitProcess,正常运行
Explore1:只破坏桥一
这是桥一原来的样子:数值含义就是到2050(650)去找函数名的地址
破坏后:(改为全0)
可以成功运行,后面想到改hello25的桥一(指向ExitProcess)可能会有错误也正常退出的情况,我改了之前的helloworldwin32的桥一(指向的是messageBox函数)(我把helloworldwin32复制了一份,命名为npc1)
程序能够正常退出
Explore2:只破坏桥二
这是桥二原来的样子:
把桥二修改后:
改成什么呢?就乱改成一个值,改成我的学号20194314吧!
可以看到程序能够正常运行。