首页
社区
课程
招聘
[未解决,已结帖] 如何找到某个数据的写入地址? 50.00雪花
发表于: 2020-6-28 23:43 3388

[未解决,已结帖] 如何找到某个数据的写入地址? 50.00雪花

2020-6-28 23:43
3388

假设我在DEBUG某个没有源码的程序的时候,遇到这样一种情况。
我设置了一个BREAKPOINT,然后程序运行到这个地址停下,

 

rax=000007fffffdb000 rbx=0000000000000000 rcx=000000000257ff28
rdx=0000000078f49390 rsi=0000000000000000 rdi=0000000000000000
rip=0000000078ebb1d0 rsp=00000000024aff28 rbp=0000000000000000
r8=0000000000000000 r9=0000000078f49390 r10=0000000000000000
r11=0000000000000000 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei pl zr na po nc
cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000246
18ebb321 mov rdx,qword ptr [rcx]

 

0:001> db rcx
0257ff28 04 00 00 00 00 00 00 00-00 00 00 00

 

如果我想知道是哪个指令写入了rcx所指向的内存,并且写入的数值=4,该怎么做?
上面只是某一次程序运行的例子。实际程序运行的时候,rcx的VALUE每次都不一样。

 

1、RCX指向的地址是随机的,无法提前预知,所以内存访问断点没用。
2、在这个断点触发之前,前面有很多指令执行过,无法知道到底是什么范围的指令有可能写入数据。
3、不能对全部的程序同时做监控,因为监控动作导致性能下降,而使得被分析的目标无法正常执行。
简而言之,也就是如何寻找到数据的上游指令。


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

收藏
免费 1
支持
分享
最新回复 (14)
雪    币: 341
活跃值: (995)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
可以在申请内存的函数下断点,然后看一下内存地址和rcx指向的地址有没有什么关联。如果有,就可以下内存断点了。
2020-6-29 09:19
0
雪    币: 12502
活跃值: (3048)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
搞定没,没搞定的话回复一下。。有办法
2020-6-29 11:48
0
雪    币: 2043
活跃值: (215)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哥们,没有规律。申请的内存地址和RCX之间偏移不固定,变化范围很大,而且调用MALLOC的CALLER也不固定。
2020-6-29 17:37
0
雪    币: 3622
活跃值: (2559)
能力值: ( LV6,RANK:83 )
在线值:
发帖
回帖
粉丝
5
xxxxxxxxxoo 哥们,没有规律。申请的内存地址和RCX之间偏移不固定,变化范围很大,而且调用MALLOC的CALLER也不固定。
可以对程序调试设置条件断点,或者写个hook代码判断,办法应该有很多。
2020-6-29 22:55
0
雪    币: 2043
活跃值: (215)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
ddddddd
2020-7-1 08:53
0
雪    币: 142
活跃值: (116)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
没有无缘无故的地址
2020-7-1 14:28
0
雪    币: 688
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
无依据无解,悬红提高到50万也没用。
2020-7-1 14:46
0
雪    币: 3622
活跃值: (2559)
能力值: ( LV6,RANK:83 )
在线值:
发帖
回帖
粉丝
9
xxxxxxxxxoo ddddddd
上传程序,我试试
2020-7-1 23:54
0
雪    币: 2043
活跃值: (215)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
yegu 上传程序,我试试
哥们,其实我是想知道对付这种情况的一种通用方法。
2020-7-2 05:19
0
雪    币: 3622
活跃值: (2559)
能力值: ( LV6,RANK:83 )
在线值:
发帖
回帖
粉丝
11
xxxxxxxxxoo 哥们,其实我是想知道对付这种情况的一种通用方法。
我觉得没有通用的方法,只有通用的原理,要看具体问题吧
2020-7-2 09:17
0
雪    币: 688
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
要对自己自信,程序和现实生活中的事情也是一样的,凡事得需要依据.
要查找上游操作,唯一的方式就是栈回溯,不过看似这个方式对你的要求是无意义的,因为栈回溯只能追踪当前线程的操作.
追踪栈回溯基本上也是靠猜和穷举(监控).
楼上那个很多方法的,你举几个来看下嘛.

ps:如果有很多方式的话,我建议你不要玩计算机了,去做刑侦,天下无贼靠你了.
2020-7-2 09:59
0
雪    币: 3622
活跃值: (2559)
能力值: ( LV6,RANK:83 )
在线值:
发帖
回帖
粉丝
13
flarejune 要对自己自信,程序和现实生活中的事情也是一样的,凡事得需要依据. 要查找上游操作,唯一的方式就是栈回溯,不过看似这个方式对你的要求是无意义的,因为栈回溯只能追踪当前线程的操作. 追踪栈回溯基本上也 ...
lz的问题应该没你想的那么复杂,你读几遍他的描述就明白,是有条件可以断的。
2020-7-3 10:02
0
雪    币: 688
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
yegu lz的问题应该没你想的那么复杂[em_39],你读几遍他的描述就明白,是有条件可以断的。
半桶水的人什么东西都是"可以"的.
从LZ的提问,已经将解答的方式全部封死了,说明大部分常规的方式他也知道,而且也测试过了, 可见明显就是水平远远高于你,
你将"信口开河"这个词语发挥得淋漓尽致.
2020-7-6 12:05
0
雪    币: 3622
活跃值: (2559)
能力值: ( LV6,RANK:83 )
在线值:
发帖
回帖
粉丝
15
flarejune 半桶水的人什么东西都是"可以"的. 从LZ的提问,已经将解答的方式全部封死了,说明大部分常规的方式他也知道,而且也测试过了, 可见明显就是水平远远高于你, 你将"信口 ...
2020-7-6 23:48
0
游客
登录 | 注册 方可回帖
返回
//