首页
社区
课程
招聘
我刚买了本《加密与解密2》,所以来到了这里请教运行期修改跳转指令
发表于: 2005-9-13 11:36 4394

我刚买了本《加密与解密2》,所以来到了这里请教运行期修改跳转指令

2005-9-13 11:36
4394
两个问题:
1、首先我想向高手们确认一个事实,是否一个模块里的函数调用,都是使用CALL指令,而跨模块调用(例如主EXE调用某个DLL的函数)是否肯定都是JMP或类似跳转指令?
2、我想在某程序运行期使用HOOK修改此程序的某个调用此EXE内部函数的CALL指令为JMP到我HOOK DLL里的一个函数,但我们知道一般CALL指令是5个字节长,而JMP指令是6个字节长,这个怎么插入我的代码呢?

非常谢谢!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
但我们知道一般CALL指令是5个字节长,而JMP指令是6个字节长,这个怎么插入我的代码呢?

找个没有代码的空间

比如:
XXXXXXXX   原来的代码

改为:
XXXXXXXX   JMP YYYYYYYY(YYYYYYYY是未用到的空间)

YYYYYYYY   自己加入的代码
…………
…………   原来的代码
…………   JMP XXXXXXXX+6
2005-9-13 16:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

找个没有代码的空间

比如:
XXXXXXXX 原来的代码

改为:
XXXXXXXX JMP YYYYYYYY(YYYYYYYY是未用到的空间)

YYYYYYYY 自己加入的代码
…………
………… 原来的代码
………… JMP XXXXXXXX+6


没有太懂你的意思。
原来的代码是CALL的,5个字节长,怎么改成 JMP YYYYYYY 6个字节长呢?如果能改,我就直接跳到我的DLL里去了。
另外如何找到“未用到的空间”?
2005-9-14 01:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
有人帮忙吗?!
2005-9-14 12:35
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
但我们知道一般CALL指令是5个字节长,而JMP指令是6个字节长,这个怎么插入我的代码呢?


你是不是要在原来的代码之间嵌入自己的代码:

例如:
00400000 PUSH EAX
00400001 CALL XXXXXXXX
00400006 Some Code

改为:
00400000 JMP 00500000(设想00500000是区段的空隙没有被使用)

00500000 自己的代码开始
………………
(设想自己需要添加100字节的代码)
………………                   ;自己的代码结束
00500064 PUSH EAX              ;恢复原来的代码
00500065 CALL XXXXXXXX
0050006A JMP 00400006          ;跳会原来的空间继续执行
2005-9-14 15:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
有人吗?帮下忙PLEASE
2005-9-14 16:08
0
雪    币: 229
活跃值: (27)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
你修改call的这个函数不就行了,
00400001 CALL XXXXXXXX
....

XXXXXXXX:    jmp  youip
XXXXXXXX+6:  ....

youip:    you code
....
          jmp  XXXXXXXX+6

或者你把你要改的代码贴出来,大家帮你改不就行了,
2005-9-14 16:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
首先感谢你们:)
你们的意思我明白,不过我不太确定的是CALL指令可以调用DLL里函数么,例如EXE代码地址一般是在4xxxxxxx,而dll一般在1xxxxxxx,我可以在exe代码段直接CALL dll代码段里的代码地址吗?
――本来可以回家自己试验下的,不过现在在公司,不方便玩这个。。。
2005-9-14 16:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
纠正:exe的基地址一般是004xxxxx
不好意思,我暂时还是这方面的新手。
2005-9-14 16:33
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
我可以在exe代码段直接CALL dll代码段里的代码地址吗?

最好不要这样直接改程序,DLL的地址是动态分配的。
2005-9-14 19:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我是运行期修改地址,不是破解:)
这么说CALL肯定是可以的罗,我现在就试验,^_^
2005-9-14 23:59
0
游客
登录 | 注册 方可回帖
返回
//