首页
社区
课程
招聘
[求助]大神们 。。求助
发表于: 2014-12-7 13:28 3833

[求助]大神们 。。求助

2014-12-7 13:28
3833
为什么 我 提取出来一段机器码  然后 存到 数据段  找个地方在写入     为什么指令就和以前不一样呢

求助

求助。。。。。

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
步骤是这样的 ...我  DUMP出来一段 机器码 然后 存到 数据段 。,,,再在代码段找一个地方写入存下来的 机器码  为什么它显示的指令和以前不一样呢??
求解???
2014-12-7 13:30
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
3
因为很多指令的操作数是相对的.
假如0x00401000处有条指令,是jmp 0x00401002.
因为是近跳转,所以偏移数用1字节表示,jmp 0x00401002的机器码就是EB 00,EB是操作码,00是偏移(有符号).
一般的相对偏移地址都是从下一条指令开始算起的.即从0x00401002-0x00401002 = 0.
所以EB 00反汇编出来的跳转地址永远指向下一条指令.

你把这指令写到0x00402000,反汇编出来的就是jmp 0x00402002.
2014-12-7 13:39
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
谢谢大神解答,byte copy->address 和 dword copy->address  有什么区别嘛?

又是怎么样规定 我的机器码在 内存中他的排列呢??
比如
00401000 > $  B9 0A000000   MOV ECX,0A

这个   它占5个字节。。。
我把B9 0A000000 写入到指定code段位置后   他的指令 会在我 写入后发生变化.....
比如 变成XCHG xxx,xxx 。。。。。
原谅小白》。。。
2014-12-7 14:07
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
.data
oldprotect dd 0
newbyte byte 06ah,000h,06ah,000h,06ah,000h,0e8h,007h,000h,000h
xx dd 0
.code
start proc x,y,z:dword
.if y==DLL_PROCESS_ATTACH
invoke GetModuleHandle,NULL
push eax
pop xx
add xx,0100BH
invoke VirtualProtect,xx,1190,PAGE_EXECUTE_READWRITE,offset oldprotect
       
        ;mov eax,offset newbyte
        ;mov ecx,[eax+2]
        mov ecx,13
        cld
        mov edi ,xx
        mov esi,offset  newbyte
        rep movsb

.endif

start endp
这个也是 写入后 代码就不一样了。。
2014-12-7 14:09
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
写入后就变成这样了。。。00401014  |.  000B                            ADD BYTE PTR DS:[EBX],CL
00401016  |.  1040 8B                         ADC BYTE PTR DS:[EAX-75],AL
00401019  |?  C08B C08BC08B C0                ROR BYTE PTR DS:[EBX+8BC08BC0],0C0       ;  移位常量超出 1..31 的范围
2014-12-7 14:11
0
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
7
那是因为反汇编器的算法可能是线性反汇编..导致识别错误了指令头..
前面填充一堆nop应该就可以正确识别了.
2014-12-7 14:13
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
感谢感谢。!!!
2014-12-7 14:13
0
游客
登录 | 注册 方可回帖
返回
//