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

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

2013-11-7 20:48
4463
用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不一樣呢

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

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

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

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