首页
社区
课程
招聘
[求助]为什么用od把一部分代码跳转到零区域执行,结果会不一样
发表于: 2009-4-25 19:59 4270

[求助]为什么用od把一部分代码跳转到零区域执行,结果会不一样

2009-4-25 19:59
4270
我为了做免杀,找到特征码后,在od中把这一段跳转到零区域执行,但是本来是调用kernel32.dll,修改后结果却成了kernel?..dll,运行的时候就提示找不到kernel?..dll。另外一处虽然没有提示找不到,但是修改完后根本运行不了。请问该怎么办。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
高手们帮帮小弟,真的是很困惑。
2009-4-25 22:14
0
雪    币: 442
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
零区域是什么

空白内存吗
2009-4-25 22:26
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也发现经常修改源代码jmp到一个空白的地方,写点东西后,跳回来运行几个函数就会出错,是把堆栈给冲了吗?~~想不通~~修改optional header里的sizeofstackreserve可以增加堆栈大小不?~~
2009-4-25 22:44
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
注意保存堆栈的数据,保证平衡就没事。
2009-4-26 10:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不好意思,我是新手,请问怎么保证堆栈平衡?
2009-4-26 13:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
听说要先push add,在pop add?这里的address指的是哪里的地址?
2009-4-26 13:39
0
雪    币: 5
活跃值: (506)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
是保存寄存器和堆栈的内容并不是保存地址,用pushad吧,这个操作数能保存所有寄存器的内容;而对于堆栈的内容就是把你自已手动入栈的东西在执行完函数之后让他出栈,也就是说要保证在执行完函数之后堆栈的内容和顺序与函数执行前一样。
我也是新手可能有不少地方说错了,这只是我个人的理解,希望高手帮我把错误指出来
2009-4-26 16:07
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
9
看样子你跳到了导入表的位置。

应该在代码段的尾部找空白空间,而不是随便找个用0填充的位置都可以。
2009-4-26 21:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢多谢,但是我还是不明白,pushad和popad应该在哪里用?是先pushad,然后jmp到零区域,运行完后jmp回来,然后popad么?这样还是不行啊
2009-4-30 20:39
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
11
那也仅仅是保存现场,你跳出去之后,push多少,就要pop多少,也就是跳前后堆栈不能改变
2009-4-30 21:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我跳出去后没有用push啊,就是这样的几句
004026EE  |.  FF15 A4304000 CALL DWORD PTR DS:[<&MSVCRT.exit>]       ; \exit
004026F4  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
004026F7  |.  8B08          MOV ECX,DWORD PTR DS:[EAX]
004026F9  |.  8B09          MOV ECX,DWORD PTR DS:[ECX]


顺便问一下。在哪里pop?push完马上pop?还是跳转回来之后再pop
2009-4-30 22:03
0
游客
登录 | 注册 方可回帖
返回
//