首页
社区
课程
招聘
[原创]现学现用之windbg的高级玩法外篇一:获取某软件的聊天记录
发表于: 2013-9-20 21:22 71166

[原创]现学现用之windbg的高级玩法外篇一:获取某软件的聊天记录

2013-9-20 21:22
71166
收藏
免费 6
支持
分享
最新回复 (109)
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
51
开山怪是个神马东东
2013-9-23 19:04
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
赞赞赞赞~
2013-9-23 21:32
0
雪    币: 19
活跃值: (130)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
53
楼主帖子很精辟,一路上用到反向推断的方法来查找到了字符串  思路很不错,。
我后来找到断点 ,也下好了。但是可能是以前太依赖OD了,所以进行回溯的时候十分吃力
后来我准备用OD进行分析,发现OD没有办法调试,附加上去之后找到位置下好断点就挂了。但是总的来说很不错,学习到了一些思路。
2013-9-24 11:17
0
雪    币: 8
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
好东西,学习了
2013-9-24 17:36
0
雪    币: 73
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
这命令用得真牛
2013-9-24 17:44
0
雪    币: 284
活跃值: (3604)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
56
在LZ的帖子里留下一爪,期待此系列的后续精华~
2013-9-24 17:57
0
雪    币: 6
活跃值: (866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
导出函数,理解了
2013-9-24 18:13
0
雪    币: 125
活跃值: (161)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
58
马一下,必火
2013-9-24 21:14
0
雪    币: 265
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
59
MARK~~
2013-9-25 19:34
0
雪    币: 1585
活跃值: (182)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
60
果然高深~~~mark
2013-9-25 20:42
0
雪    币: 4
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
向楼主学习,
2013-9-25 21:03
0
雪    币: 16
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
楼主强人,不知道的人以为WINDBG你弄出来的呢
2013-9-26 22:07
0
雪    币: 46
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
63
支持交流
2013-9-26 23:54
0
雪    币: 74
活跃值: (748)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
64
mark,稍后学习
2013-9-27 09:18
0
雪    币: 31
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
65
很欣赏关于工具和脑子的归纳,精辟!
2013-9-27 19:32
0
雪    币: 2117
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
66
既然都能互相聊天了,获取聊天记录为什么要这么麻烦,能不能在不能通联的条件下获取到某账号的聊天记录?
2013-9-27 21:55
0
雪    币: 103
活跃值: (126)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
67
我想问下当我
bm KernelUtil!Util::Msg::SaveMsg194后
再g运行时就会提示:
Check for invalid symbols or bad syntax.
WaitForEvent failed
用bl查看后发现
0:013> bl
1 eu             0001 (0001) (@!"KernelUtil!Util::Msg::SaveMsg194")
2 eu             0001 (0001) (@!"KernelUtil!Util::Msg::SaveMsg194")
地址无效了 很疑惑……
2013-9-28 01:37
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
68
这个问题我朋友也遇到过,
使用bc * 删除所有断点,再g一下,然后再break, bm KernelUtil!Util::Msg::SaveMsg194,就可以解决。
如果还解决不了,就是用bp设置断点把
2013-9-28 14:36
0
雪    币: 103
活跃值: (126)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
69
恩 确实可以了 谢谢
2013-9-28 15:06
0
雪    币: 102
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
70
拜读中,但有个地方,始终不明白。
=======================
0:000> uf 318e391b
KernelUtil!CFileResumeInfoMgr::DeleteResumeFile+0x717:
318e391b 50              push    eax
318e391c 64ff3500000000  push    dword ptr fs:[0]
318e3923 8d44240c        lea     eax,[esp+0Ch] //esp+c,这里为啥要加C呢,上两条指令已经加上返回地址,调用此函数到运行到这里,共压栈
                                                                                                //压栈3此,共计0xC个字节,esp+0Ch正好是调用此函数前的栈帧
318e3927 2b64240c        sub     esp,dword ptr [esp+0Ch]
318e392b 53              push    ebx
318e392c 56              push    esi
318e392d 57              push    edi
318e392e 8928            mov     dword ptr [eax],ebp
318e3930 8be8            mov     ebp,eax //此处给ebp赋值,eax经过上面的分析可知。ebp此时的赋值,相当于在调用此函数前执行了mov ebp,esp
                                                                                //再加上,上一个函数执行了一条push 8,此时也就知道了上一个函数的ebp+8其实是指向的第一个参数
318e3932 a160419331      mov     eax,dword ptr [KernelUtil!CppSQLite3DB::`vftable'+0x2c484 (31934160)]
318e3937 33c5            xor     eax,ebp
318e3939 50              push    eax
318e393a ff75fc          push    dword ptr [ebp-4]
318e393d c745fcffffffff  mov     dword ptr [ebp-4],0FFFFFFFFh
318e3944 8d45f4          lea     eax,[ebp-0Ch]
318e3947 64a300000000    mov     dword ptr fs:[00000000h],eax
318e394d c3              ret

========================
通过上层函数push 8,以及call压入函数的返回地址,本函数开头push    eax;push    dword ptr fs:[0];
那些运行到 lea     eax,[esp+0Ch] 时,这里的esp+0c不是正好指向函数的返回址。小弟新手,请不吝赐教。
2013-10-1 22:55
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
71
执行到lea     eax,[esp+0Ch] 时栈是这个样子的

        |--------------------------------|
        |push 8
        |--------------------------------| + c
        |call ret
        |--------------------------------| + 8
        |push    eax
        |--------------------------------| + 4
        |push    dword ptr fs:[0]
        |--------------------------------| + 0 --> esp

所以,esp+0Ch正好是调用此函数前的栈帧
2013-10-2 14:25
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
slj
72
好贴,收藏
2013-10-3 10:46
0
雪    币: 35
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
73
学习了
2013-10-3 14:20
0
雪    币: 13
活跃值: (49)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
74
看一下第五个参数第一个数值:318f9fa8,看看他是一个什么地址:
代码:
0:000> !address 318f9fa8                     
Failed to map Heaps (error 80004005)
Usage:                  Image
Allocation Base:        31800000
Base Address:           318f3000
End Address:            31932000
Region Size:            0003f000
Type:                   01000000    MEM_IMAGE
State:                  00001000    MEM_COMMIT
Protect:                00000002    PAGE_READONLY
More info:              lmv m KernelUtil
More info:              !lmi KernelUtil
More info:              ln 0x318f9fa8
看来第五个是一个类对象了,318f9fa8告诉我们是在一个模块内,由此可以猜出是个虚函数表。

============================

这里咋看出是一个类?看出来需要学习什么资料?求助..谢谢..``
2013-10-3 22:52
0
雪    币: 541
活跃值: (654)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
75
318f9fa8属于模块内地址,是虚函数表的可能性很大。既然有虚函数,那一定是个类对象
2013-10-6 12:40
0
游客
登录 | 注册 方可回帖
返回
//