首页
社区
课程
招聘
[旧帖] [求助]改寄存器的值 0.00雪花
发表于: 2007-5-19 03:21 9165

[旧帖] [求助]改寄存器的值 0.00雪花

2007-5-19 03:21
9165
我想修改寄存器(如EAX)的值,让他的值固定,
如下例子:
MOV DWORD PTR DS:[D00023],EAX
改为 MOV DWORD PTR DS:[D00023],3FFFD72

不知道是否可行?如何改?谢谢!

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (26)
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
2
你的问题有点问题``哦呵呵``
让寄存器的值永远不变`除非你赋个值之后不再对他进行操作!因为寄存器也是个可变的量`

一个内存地址也对应一个变量``你要让一个值在一个变量里保持不变``当然可以.你不对它进行赋值操作就行`不过在调试程序时并不能知道程序是否会那个变量进行赋值操作,所以``
你可以另外找一个内存地址,比如[120012],呵呵``
mov dword ptr[120012],3fffd72

还有`你在写程序么?还是在调试??加了个段超越前缀`
2007-5-19 09:28
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
其实想法很简单,就是想在对寄存器赋值之前把这个值换掉,换成我想要的值,不知道在OD中怎么改了,如:
EAX中现在是1234
将要执行 MOV DWORD PTR DS:[D00023],EAX的之前我加上一句
MOV EAX,5678,这样在执行MOV DWORD PTR DS:[D00023],EAX的时候EAX 已经变成 5678了。
2007-5-19 16:24
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
4
这样是可以哇`

加上一句的话可能会麻烦点``程序可能就会死了!!
直接把5678赋给d00023这个内存地址比较好

mov dword ptr ds:[d00023],5678

如果要加上一句的话等于给程序加字节,搞不好堆栈会乱了!!呵呵``要不你就把个空白的地方,跳到要给d00023这个内存单元赋值前jmp xxxxxxx(xxxxxx为空白代码地址),
代码变成这样:
xxxxxxxx: xxxxxxxxxxxxxxxxxxxxxxxx(这为赋值前被你改为jmp的那条语句,现在恢复一下)
xxxxxxxx+n: mov eax,5678(给eax赋值)
xxxxxxxx+n: jmp xxxxxxx(xxxxxxx为mov dword ptr ds:[d00023]<-这句的地址,跳回去)

比一下``呵呵``前者简单多了
2007-5-20 09:41
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
前者虽然简单,可是在od中我是没法修改的(刚接触:)),双击之后修改汇编,改完后保存就提示不识别。
后者我试试看,希望可以啊。
不知道能否弄个内存补丁,知道的大大不妨提示一下,在此谢过各位
2007-5-20 10:26
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
6
OD中保存是"
右键->复制可执行文件->所有修改->右键->保存文件->确定"
2007-5-20 10:41
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵,没法这样改的,汇编的时候提示 “Unknown identifier”,所以不知道有没有其他办法了
2007-5-20 10:53
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
8
那你改了之后把机器码记下来`
再用w32打补丁`
2007-5-20 11:30
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
9
第一,你在OD里必须这样改写才对。MOV DWORD PTR [0D00023],3FFFD72,D00023地址前面要加0,OD才能识别这个数。
第二,MOV DWORD PTR DS:[D00023],EAX和MOV DWORD PTR DS:[D00023],3FFFD72两个指令机器码长度不一样,你这样修改就破坏后面的代码。
所以,最好的方法就是楼上说的从MOV DWORD PTR DS:[D00023],EAX改成JMP XXXXXXXX跳到程序空地(在程序里找全是0的地方),重新添加代码(注意:前面被修改后的代码必须在这里添加回去),再用JMP XXXXXXXX跳回原来的地方的下一条指令继续运行程序。
2007-5-20 12:59
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
1.举的例子忘了,因为以abcde开头要加0的,但实际代码中不是以字母开头的,因为没法汇编,所以此法看来没什么希望了。
看来试试jmp了,谢谢两位
2007-5-20 13:43
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
郁闷了,程序中没找到全0的空地(可能没找对),不知道是不是弄错了,找了个地方写了些代码,可是主程序中竟然跳不到那个地方,那位再指点下,
另如果[在程序启动的时候加个loader,让这个loader去修改某个地址的值,这样可以吗?这个patcher应该怎么来做呢?thks
2007-5-21 22:20
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
12
1、用OD打开目标程序,将滚动条拉到最下面,应该可以找到全0的空地,如果没有,那我十分佩服他将程序位用得如此恰到好处。
2、可以自己写一个Loader,在编程版上有相应的代码。
2007-5-22 09:55
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
13
跳到空地方,赋值后返回,这个是最好的办法。楼主如果学过一两天的黑客知识就很容易知道。很简单的
空字节绝对能找到的。继续努力
2007-5-22 10:02
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
to 小虾:
          程序最后是有全0的空白,我之前就在这里写过跳转的,但我调试的时候发现程序是无法跳到那个地方的,主要自己太菜了。主程序的领空也没有nop的
2007-5-22 11:33
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
这样是否为空白呢?
00406A8B      00            DB 00
00406A8C      00            DB 00
00406A8D      00            DB 00
00406A8E      00            DB 00
00406A8F      00            DB 00
00406A90      00            DB 00
00406A91      00            DB 00
00406A92      00            DB 00
2007-5-22 11:51
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
16
是的,六个字
2007-5-22 16:26
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
再请问下版主
我将上面的空白改为如下格式:
00442424                  JMP 00406A8B
00442427                   .....
....                       .....
....                       .....
00406A8B      00            MOV EAX,12345678
00406A8C      00            MOV DWORD PTR DS:[114],EAX
00406A8D      00            JMP 00442427
00406A8E      00            DB 00
00406A8F      00            DB 00

不知道这样改是否正确?(没改过 :))
当我调试的时候我发现上面的 JMP 00406A8B 后的“00406A8B”已经变了,并不是
原先的值?这样的话程序就无法实现跳转,导致出现异常。所以想请问下
这是为什么?
2007-5-22 19:09
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
再顶起来看看
2007-5-23 11:34
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
路过,有同样问题,帮顶。。。。。。。。。
2007-5-23 12:23
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
20
不太明白你说什么意思?
你是说你在原程序里修改成jmp xxxxxxxx后,后面的指令也被破坏了?如果是这样,这是正常的。不过你必须在空位上补上这些破坏后的代码。
2007-5-23 17:58
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
加粗的为我要跳转的地址,此为非运行状态下的值
0042AE5E   E9 451A0200       JMP test.0044C8A8
0042AE63   833D 08010000 00  CMP DWORD PTR DS:[108],0

当我下断在此,运行程序,被od截断,地址就变了,如下:
0042AE5E    E9 4566C500            JMP 010814A8
0042AE63    833D 084DC300 00       CMP DWORD PTR DS:[C34D08],0

由于这个地址无法找到,所以程序中断退出,请问这是为什么呢??谢谢啊
2007-5-23 18:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
搞不懂了。
应该是四个字,怎么是六个字呢?
2007-5-23 18:25
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
23
你修改的文件是DLL?地址被重定位了。
2007-5-23 18:26
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
奇怪的是我在主程序的领空修改的,没有修改dll,这个程序也只有一个exe文件,其他的dll都是调用系统的,程序是用易语言写的,真是怪了。
2007-5-23 21:51
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
再请问一下,为什么会出现地址重定位呢?有没有办法解决这种情况呢。
因为程序本身就是只是一个exe文件,他要用到的库我都没放在一起的。
2007-5-24 09:06
0
游客
登录 | 注册 方可回帖
返回