首页
社区
课程
招聘
一个简单想二进制文件修改问题
发表于: 2014-9-12 22:17 7220

一个简单想二进制文件修改问题

2014-9-12 22:17
7220
不知道有没有人碰到过这样的问题。
我在使用hex workshop 修改一个二进制文件时已经将下面红色的部分修改好了
56 57 53 55 81 ec 58 0d 00 00 8b 84 24 68 0d 00 00 05 f6 1a 20 20 ff e0 59 8b d8 8d 14 85 00 00  

可是在用OD载入调试时发现这个代码竟然变成下面红色标记出的样子了
01621830   $  56                 push    esi
01621831   .  57                 push    edi
01621832   .  53                 push    ebx
01621833   .  55                 push    ebp
01621834   .  81EC 580D0000      sub     esp, 0D58
0162183A      8B8424 A8FD0000    mov     eax, dword ptr [esp+FDA8]
01621841      05 F61A0000        add     eax, 1AF6
01621846      FFE0               jmp     eax

起初以为是OD的UDD文件问题,都清空过,也使用VC调试过,发现运行时的代码确实变了,和我修改的二进制文件不一致。
我有重新找出修改的二进制文件,可是发现修改的是正确的。
谁知道这是怎么回事吗?

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

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 399
活跃值: (214)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
2
百度搜索【重定位】三个汉字。
2014-9-12 22:46
0
雪    币: 189
活跃值: (152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thj
3
我觉得不是重定位问题。
你可以看到我修改的是立即数D68,而程序运行时,这个立即数应该不存在重定位吧。
2014-9-12 22:55
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=thj;1316150]
不知道有没有人碰到过这样的问题。
我在使用hex workshop 修改一个二进制文件时已经将下面红色的部分修改好了
56 57 53 55 81 ec 58 0d 00 00 8b 84 24 68 0d 00 00 05 f6 1a 20 20 ff e0 59 8b d8 8d 14 85 00 00  

可是在用OD载入调试时发现这个代码竟然变成下面红色标记出的样子了
01621830   $  56                 push    esi
01621831   .  57                 push    edi
01621832   .  53                 push    ebx
01621833   .  55                 push    ebp
01621834   .  81EC 580D0000      sub     esp, 0D58
0162183A      8B8424 A8FD0000    mov     eax, dword ptr [esp+FDA8]
01621841      05 F61A0000        add     eax, 1AF6
01621846      FFE0               jmp     eax

起初以为是OD的UDD文件问题,都清空过,也使用VC调试过,发现运行时的代码确实变了,和我修改的二进制文件不一致。
我有重新找出修改的二进制文件,可是发现修改的是正确的。
谁知道这是怎么回事吗?

[/QUOTE]

打开od f9运行,按alt+m打开内存窗口,按ctrl+b打开搜索窗口.输入
56 57 53 55 81 ec 58 0d 00 00 8b 84 24 68 0d 00 00 05 f6 1a 20 20 ff e0 59 8b d8 8d 14 85 00 00  
然后回车.搜索. 如果搜索到了,说明,程序有多份一样的代码.你改错地方了.

如果搜索不到,可能是运行时程序有自效验,发现类crc的值不一样,就被改回去了.
2014-9-13 02:37
0
雪    币: 189
活跃值: (152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thj
5
多谢回复。
没有改错地方,用IDA的find crypt v2 探测了下发现程序有很多校验包括MD5,CRC,SHA,Blowfish等校验。

不过我有个疑问,用OD载入后他就能自动修改回去吗?因为我调试的是个DLL文件,loder只是将dll加载起来,并没有开始执行代码。
这种带自校验的程序应该怎么修改呢?
2014-9-13 12:08
0
雪    币: 223
活跃值: (516)
能力值: ( LV13,RANK:520 )
在线值:
发帖
回帖
粉丝
6
当然可以修改. od载入后中断,程序就已经跑了一遍了.
你可以干掉他的tls试试. 不过直接干掉的话,他可能会有效验的.
2014-9-13 12:45
0
雪    币: 20
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
在代码处用write断点,不就知道哪段代码去改写了
2014-9-13 13:04
0
雪    币: 189
活跃值: (152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thj
8
用PETool检查了下,发现TLS表是空的。
还有什么其他的方法会检查代码修改吗?
2014-9-13 13:15
0
雪    币: 189
活跃值: (152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thj
9
因为ollydbg在load起来这个dll时,还没有执行OEP,数据就已经被修改了,貌似write断点,不能断下来吧。
2014-9-13 13:39
0
雪    币: 20
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
OD加载文件,这时候无论是OEP还是壳,都还没执行,去找你修改的地址,看机器码对不对,不对,说明你改错地方了,要不就是有其他程序远程注入修改进程的内存
2014-9-13 14:07
0
雪    币: 189
活跃值: (152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thj
11
修改的位置可定没错,因为我再此处又修改为其他值,这里的值也是会跟着变的,只是不是我想要的值。

现在设置OD的第一次断点为系统断点后发现,值还是被修改了
其他的远程注入应该不会啊,也没发现什么可疑进程。
2014-9-13 14:26
0
雪    币: 807
活跃值: (2218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
Dllmain,系统在加载这个dll文件的时候会自动调用这个函数,用OD加载dll的时候,会自动停在这个函数的入口,跟踪一下原始的,再跟踪一下修改过的版本,对比一下看看。
2014-9-13 14:41
0
雪    币: 189
活跃值: (152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thj
13
到Dllmain时就已经被修改过了,这个我之前就研究了。目前没有发现TLS表,OD设置为暂停到第一次系统断点,发现仍然是被修改过了的。
2014-9-13 14:45
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
好难哦。。。
2014-9-13 15:03
0
雪    币: 20
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
这么诡异!!OD解析PE后载入内存,也就是说在载入的时候程序劫持了EIP,并完成OD剩下的工作,然后修改,只能这么理解了,不然还能咋样,没有其他程序修改进程空间,壳又没执行
2014-9-13 16:06
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
设置断点,单步执行,注意变量的变化.
2014-9-17 13:17
0
雪    币: 189
活跃值: (152)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
thj
17
问题已经搞清楚了,是进程在load,DLL文件时做的重定位导致的问题,我修改的数据涉及到重定位,因此数据就改变了。
2014-9-18 00:08
0
游客
登录 | 注册 方可回帖
返回
//