恶意代码 第三章作业2
修改样例代码hello25.exe
一、使其弹出对话框中的内容变为本组学号信息
改错文件了,但是原理是类似的,可以当学习文档学习一下
1.修改文件内容
①修改输出长度
在
winhex中将1024行的第4个字节修改为0x36,因为要填入的学号有6个,一个需要8字节存储,中间的分隔符5个加上结束符0x00一共54字节(即0x36),(0x3000+0x0036=0x3036),将这个相对于0x3000的偏移注明,0x3000(即文件中的0x800)是文件第一个字符串的起始位置

②写入数据
在
PEview这两个数据段相距0x1000,在winhex中相距0x1024,也可以通过观察字符找到位置

2.输出中文
①打开终端
python
"第二组".encode('GBK')
效果如下:

②填入数据
将
B5DAB6FED7E9依次填入数据区即可输出中文

③检验输出

二、使其文件中不存在MessageBoxA这一函数名,仍可正常运行
1.寻找函数序号

2.修改

其他步骤与三基本一致
三、使其文件中不存在ExitProcess这一函数名,仍可运行
1.寻找修改的位置

观察导入表的结构,得出要修改的位置位
0x650的位置,数据为0x00002064
2.寻找ExitProcess的序号
方法1:在
C:\WINDOWS\system32文件夹下找到kernel32.dll,用Stud_PE打开

183=
0xB7方法2:利用Dependency Walker查看序号

3.修改引入名字表

修改为
0x800000B7,最高位为1意思是通过序号引入,为0是通过名字引入,0xB7为函数的序号
4.将函数名修改为全0验证

程序正常运行
四、使其只弹出第一个对话框
1.在OllDbg中查看
0x00000014+0x0040102C=0x00401040,即MessageBoxA函数,这是就会弹出第二个弹窗,现在我们要改变这个指向,使其指向0x00401034即ExitProcess函数,这时就会直接退出(方法1),或者把调用MessageBoxA的部分直接用空指令填充,使其直接执行ExitProcess(方法2)

2.修改
方法1:修改JMP的地址

方法2:填充NOP

3.验证

五、使其只弹出第二个对话框
1.在OllDbg中查看
由图可知,第二个对话框的首条指令在
0x00401016,因此就可以修改可选文件头中的首条指令地址,使其指向第二个对话框(方法1),或者在把第一个对话框的内容全部填充为NOP(方法2)

2.修改
方法1:修改首条命令地址

方法2:填充NOP

3.测试

六、问题与解决
1.如何修改参数字符串的长度
①在OllDbg中调试程序

0x401002在文件中对应0x402,0x401007对应文件中的0x407,0x40300B,0x403000都是对应位置存储的数据
②在PEview中打开查看

而
0x403000对应文件中的位置是0x800
③转到0x800

2.特殊字符的写法
利用python求出对应的16进制
先打开cmd
python
hex(ord('\t'))
hex(ord('\n'))
输出如下:

3.加快输入中文字符
如果中文字符不长的话可以对照python按照上文的方法逐个输入,但是如果比较长,就会很累且容易出错,因此我写了一个python文件可以将字符格式化一下:
word = input('please input : ')
word_gbk = word.encode('GBK')
word_gbk_str = str(word_gbk)[2:len(str(word_gbk))-1]
work_gbk_str_hex = word_gbk_str.replace(r'\x','').upper()
print(work_gbk_str_hex)
效果如下:

可以直接复制,写入文件,会快一点,还有一个方法就是通过一些网站在线转:赵工的个人空间,感觉一般
4.16进制代码的位置

在文件中的
0x400的位置,也是存储text节(代码节)的位置
5.关于data大小的问题

0x0000000E=14字节,正好对应helloworld hi和两个终止符正好14字节,但是我发现再向后加几个字母一样可以输出,不会报错。

浙公网安备 33010602011771号