首页
社区
课程
招聘
[求助]逆向的疑問,machine code不一樣
发表于: 2013-11-7 20:48 4766

[求助]逆向的疑問,machine code不一樣

2013-11-7 20:48
4766
用OD逆向看一段code,是call fprintf,assemble看是CALL 00401570
machine code是E8 42 04 00 00 為什麼其它地方一樣是call fprintf
machine code卻是 E8 2F 04 00 00  跟上一個call fprintf不一樣呢

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 4560
活跃值: (1002)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
E8 Call的地址是按偏移计算的
2013-11-7 20:55
0
雪    币: 129
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thq
3
如果我要用這段machine code,每次都要重算偏移值嗎?
2013-11-7 21:42
0
雪    币: 114
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
这是个基础知识,win32的dll都是动态装入的,函数地址不固定。如果你要写通用的shellcode,基本都要自己编程查找每个函数地址。
2013-11-7 22:03
0
雪    币: 85
活跃值: (51)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
2楼正解,如果想调用fprintf,可以用
GetProcAddress("fprintf")
call eax
2013-11-7 22:22
0
雪    币: 1392
活跃值: (5137)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
6
计算公式一般是 该行代码所在的地址+该行代码所占用的长度+操作码后的偏移=目标地址

CALL 00401570
来计算一下
E8(操作码) 42 04 00 00(偏移)
目标地址是00401570
该行代码的地址=目标地址-操作码后的偏移-该行代码所占用的长度;
                       00401570-00000442-5
=401129
那么E8 42 04 00 00  这句的地址应该是401129
希望没算错.

用这样的方式避免了使用 绝对地址
2013-11-7 22:31
0
雪    币: 129
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thq
7
我本來想把一個c寫的log function反組譯,直接把它的machine code貼到
要修改的DLL上,有辦法這樣嗎?
2013-11-13 20:56
0
游客
登录 | 注册 方可回帖
返回
//