能力值:
( LV6,RANK:90 )
|
-
-
2 楼
不是很懂这个工具,我大概觉得实际偏移是:8A260
你可以用hexworkshop打开crtl+g:8A260 去看看那里的值是不是48CD1400
如果不行就直接搜16进制串:48CD1400,找到一处最好,找到多出再判断,找不到就没辙了。。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
试了一下,8A260这个地方都是00 00 00 00,
48CD1400直接找不到,
大哥再给想想办法吧!
|
能力值:
( LV6,RANK:90 )
|
-
-
4 楼
我没辙了,大侠跟上。
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
再搜索寄存器eax的值0014CD48
这句我没看懂,能否解释下?
在图上0014CD48是 ECX 的值。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
mov ecx,[0048a260] ====>ecx取得处。
lea edx,[ebp+edx*2+00]
mov [ecx+edx*4],eax =====>停在这里,说明目标内存地址=ecx+edx*4
这里ecx的值可以从第1行看出在地址048a260处取得(注意,是地址。)
现在就剩edx的值无法确定了,用OD跟一下看看吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
那么048a260是不是就可以直接当基址使用了呢?
|
能力值:
( LV6,RANK:90 )
|
-
-
8 楼
完全不对
怎么把那个当基址?
你用工具看下基址就知道了
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
图中我的操作步骤是这样的:
1、先运行程序和CE,进行数据搜索;
2、找到要修改的数据地址(0014CD5C)后,对这个地址进行监听写入操作;
3、CE捕捉到写入操作:mov [ecx+edx*4],eax, ecx=0014CD48(这个数值在不同电脑上会有所不同),edx=00000005(这个值没有变过);
4、然后在CE中新建了一个搜索,对0014CD48这个数据进行了搜索,只找到了一个地址0048A260,并且在CE中显示为绿色,CE中显示为绿色的地址一般都不会改变,确实程序在别的电脑上这一步也是找到的这个地址;
我想知道下一步我该怎么做才能得到基址呢?或者是实现一段汇编语言把ecx+edx*4这个地址用一个静态地址储存也行啊!
期待强人的出现!
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
现在可以确定的是这个数据存储地址是随机的,但是这个随机位置的地址是存在0048A260里-这个是固定的,rxzcums老师教我的用hexworkshop查看的方法读不到48CD1400,是因为这个地址在运行时才会有这个随机的数据地址,在编程过程中能不能用0048A260中存储的地址+偏移得到数据正确的地址呢?
|
能力值:
( LV6,RANK:90 )
|
-
-
11 楼
你是不是想改游戏里的某个数据啊?
其实配合OD应该能很方便的解决。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
0048A260不是基址,也不是偏移,是指针。
如果真如你说edx没有变过,一直是5,那么那个内存地址就是[0048a260]+5*4
即先读0048A260这个地址里的DWord数据再加上20就可以找到你要改的内存地址了,
以上全是我个人见解,你可以试试。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
谢谢大家
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
这个数据的基址是动态的,但是这个动态的地址是固定存在0048A260 里面,这究竟怎么回事,有高人出来解释一下吗?
|
|
|