首页
社区
课程
招聘
这下要靠高手了,关于取内存地址不固定里的东西。
发表于: 2006-3-1 10:22 4349

这下要靠高手了,关于取内存地址不固定里的东西。

2006-3-1 10:22
4349
rep     movs dword ptr es:[edi], dword ptr [esi]

其中es:[edi]是固定的,每次由esi给它传值。esi每次的地址都不一样,但我就是想知道[esi]中的数据是怎么来的,我该怎么下断点?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
一般在前面有像下面这类的指令将数据指针传给ESI。
mov esi,xxxxxxxx
mov esi,[exx]
mov esi,exx
lea esi,[xxxxxxxx]
mov esi,[exx+exx]
....
等等。
如果你想知道ESI的数据是怎么来的,你可以试试对[ESI]的地址下内存写入断点来跟踪。
2006-3-1 10:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢您的指导,像这样的,如果在高级语言里写的话,是个什么样的过程?
2006-3-2 02:45
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
4
高级语言里面就是个memcpy之类的数据转移
2006-3-2 09:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵,
00844BB8  |> \8B8B 30010000 |mov     ecx, [ebx+130]
00844BBE  |.  8B93 40010000 |mov     edx, [ebx+140]                             ;  注意一下这里
00844BC4  |.  8BC5          |mov     eax, ebp
00844BC6  |.  8BB1 38100000 |mov     esi, [ecx+1038]                            ;  这里变了一次ESI
00844BCC  |.  03F2          |add     esi, edx                                   ;  这里变了二次ESI
00844BCE  |.  3BEF          |cmp     ebp, edi
00844BD0  |.  75 04         |jnz     short 00844BD6
00844BD2  |.  33C0          |xor     eax, eax
00844BD4  |.  EB 45         |jmp     short 00844C1B
00844BD6  |>  8B93 8C000000 |mov     edx, [ebx+8C]
00844BDC  |.  8D8C2A 00E0FF>|lea     ecx, [edx+ebp-2000]
00844BE3  |.  3BCF          |cmp     ecx, edi
00844BE5  |.  7E 04         |jle     short 00844BEB
00844BE7  |.  8BC5          |mov     eax, ebp
00844BE9  |.  2BC1          |sub     eax, ecx
00844BEB  |>  3BC7          |cmp     eax, edi
00844BED  |.  7F 04         |jg      short 00844BF3                             ;  eax>edi跳
00844BEF  |.  33C0          |xor     eax, eax
00844BF1  |.  EB 28         |jmp     short 00844C1B
00844BF3  |>  8BBB 88000000 |mov     edi, [ebx+88]
00844BF9  |.  8BC8          |mov     ecx, eax
00844BFB  |.  03FA          |add     edi, edx
00844BFD  |.  8BD1          |mov     edx, ecx
00844BFF  |.  C1E9 02       |shr     ecx, 2                                     ;  除4
00844C02 >|.  F3:A5         |rep     movs dword ptr es:[edi], dword ptr [esi]   ;  在这里内存复制包,从ESI到EDI

esi的地址每次都不一样,我怎样下断才可以找到esi地址中的东西是怎么来的?
下ESI内存断点没什么用了,它复制时,ESI的值是不固定的,断不下来。
2006-3-2 09:38
0
雪    币: 302
活跃值: (410)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
6
我感觉这里好像是一个结构中的指针。

typedef struct
{
  ....
  char* esi;
  ...
}STest,*pSTest;

int test(STest* pParma)
{
    char* p = pParama->esi;
    ....
   
}
2006-3-2 10:25
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
00844BC6  |.  8BB1 38100000 |mov     esi, [ecx+1038]                            ;  这里变了一次ESI
00844BCC  |.  03F2          |add     esi, edx   

esi=[ecx+1038]+edx
你找ecx和edx的关系,不就得出esi吗?

还有,这应该是一个内部call,重点应该放在分析参数
2006-3-2 10:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
恩,酷酷 说的对,可是。。。。
esi=[ecx+1038]+edx
程序在这之前就把esi地址里的东西计算好了,这样下内存断点,不起作用。
ecx和edx的关系?恩,好的,我再去分析一下。
2006-3-2 10:49
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
ecx=[ebx+130]
edx=[ebx+140]

esi=[ecx+1038]+edx
esi=[[ebp+130]+1038]+[ebx+140]

这是典型的以ebx为参数的call,有点像是BCB程序
2006-3-2 15:30
0
雪    币: 12
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
一般会从一个静态地址取出一个指针,然后再读数的
比如
mov   eax,[xxxxx]  xxxx 是固定的
隔了一段距离后
mov   esi, [eax+xx]
2006-3-2 15:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
恩,那我如何去追踪和找出那里面的数据呢?
2006-3-3 01:35
0
游客
登录 | 注册 方可回帖
返回
//