首页
社区
课程
招聘
[讨论]这到底是怎么回事?
发表于: 2009-2-4 13:05 3656

[讨论]这到底是怎么回事?

2009-2-4 13:05
3656
现在正在学习“加密解密(三)”刚学到第4张开始讲解逆向分析技术,本来以为一直很顺利,因为书上的例子都亲自操作了一遍而且没有多大障碍(本人小学过汇编,在职DELPHI代码编写)

今天在论坛上闲逛发现了书呆子以前写的一篇经验+教学帖是教人下断的:
http://bbs.pediy.com/showthread.php?t=79148

于是想试试上面的几个DEMO,第一个很轻松,第2个例子是讲关于条件断点的,我也按上面说的做了结果却不理想,因为一旦设置了条件断点后,程序始终RUN不起来会一直被OD断点也就根本无法跟踪到我针对注册码框下的断点了(句柄我没找错,而且ESP+4我也很清晰明白是什么意思)

这就让我很纳闷,于是我就想自己写个小DEMO(delphi)试试条件断点,DEMO很简单FORM上2个EDIT框,一个BUTTON,当点BUTTON的时候判断如果2个EDIT框的值,不是123的时候提示注册失败反之提示成功。

看,就这么简单的一个例子,我是如何下断的:

首先CTRL+G找GetwindowTextA,找到了,接着ALT+F9想回到程序领空看看,返回后代码如下:
00451366  |.  E8 6D4FFBFF   call    <jmp.&user32.DefWindowProcA>     ; \DefWindowProcA
0045136B  |.  8B55 08       mov     edx, dword ptr [ebp+8]
0045136E  |.  8B52 F8       mov     edx, dword ptr [edx-8]
00451371  |.  8942 0C       mov     dword ptr [edx+C], eax
00451374  |.  5D            pop     ebp
00451375  \.  C3            retn
00451376      8BC0          mov     eax, eax
00451378  /$  55            push    ebp
00451379  |.  8BEC          mov     ebp, esp
0045137B  |.  83C4 C0       add     esp, -40
0045137E  |.  53            push    ebx
0045137F  |.  8D45 C0       lea     eax, dword ptr [ebp-40]
00451382  |.  50            push    eax                              ; /pPaintstruct
00451383  |.  8B45 08       mov     eax, dword ptr [ebp+8]           ; |
00451386  |.  8B40 FC       mov     eax, dword ptr [eax-4]           ; |
00451389  |.  8B40 30       mov     eax, dword ptr [eax+30]          ; |
0045138C  |.  50            push    eax                              ; |hWnd
0045138D  |.  E8 CE4EFBFF   call    <jmp.&user32.BeginPaint>         ; \BeginPaint

费解了,我明明找的是GETWINDOWTEXTA,结果怎么返回回到了DefWindowProcA
这个不是WINDOWS的默认消息处理过程么?

为什么,是因为我目前依照书本内容所学的加密解密技术不足以完成这个问题?还是?

但这个DEMO这么简单,好烦,没有确切的答复之前我都做不了什么了,今天饭就没吃好

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看了下堆栈的数据是这样的:
0012F414   00451CF8  /CALL to GetWindowTextA from Project1.00451CF3
0012F418   0041080E  |hWnd = 0041080E ('Project1',class='TApplication')
0012F41C   0012F424  |Buffer = 0012F424
0012F420   00000100  \Count = 100 (256.)

句柄不是输入框EDIT的,而是整个FORM的,实施跟进代码后发现也确实是这里取了FORM的CAPTION,

难道DELPHI里取EDIT的值用的不是GETWINDOWTEXT?,GETDLGITEMTEXT也没有啊
2009-2-4 15:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
0012F424存放的是FORM标题字串的地址
2009-2-4 15:27
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
把你写的发上来
2009-2-4 15:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我还没权限上传附件
2009-2-4 15:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
http://www.namipan.com/d/78c6e04ef21b0c38b1237fbbb7262b3a4d2573d33e950200

我已经放到网盘上了
2009-2-4 16:26
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
7
Delphi使用的WOL的结构比Win32 SDK程序复杂地多(当然"复杂"还是"简单"要看你从什么角度说,如果从开发效率角度来说,框架是简化了开发,但从分析的角度来说,则比SDK程序复杂得多了)。

虽然我也没有深入研究过,不过据我所知Delphi程序似乎是不用GetWindowText之类方法来获取控件的内容,而是用宝蓝自己实现的一套方法。

由于我不太用Delphi,也不准备深入研究。有兴趣的自己分析一下吧。
2009-2-4 19:20
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
书呆说的很好   Delphi程序一般是不用GetWindowText之类方法来获取控件的内容
DEDE看一下就很清楚了

***** TRY
|
004537E4   64FF30                 push    dword ptr fs:[eax]
004537E7   648920                 mov     fs:[eax], esp
004537EA   8D55F8                 lea     edx, [ebp-$08]

* Reference to control Edit1 : TEdit
|
004537ED   8B83FC020000           mov     eax, [ebx+$02FC]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
004537F3   E854F2FDFF             call    00432A4C
004537F8   8B45F8                 mov     eax, [ebp-$08]
004537FB   8D55FC                 lea     edx, [ebp-$04]

* Reference to: SysUtils.Trim(AnsiString):AnsiString;overload;
|
004537FE   E8DD43FBFF             call    00407BE0
00453803   8B45FC                 mov     eax, [ebp-$04]

* Possible String Reference to: '123'
|
00453806   BA94384500             mov     edx, $00453894

* Reference to: System.@LStrCmp;
|
0045380B   E8480AFBFF             call    00404258
00453810   7434                   jz      00453846
00453812   8D55F0                 lea     edx, [ebp-$10]

* Reference to control Edit2 : TEdit
|
00453815   8B8300030000           mov     eax, [ebx+$0300]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
0045381B   E82CF2FDFF             call    00432A4C
00453820   8B45F0                 mov     eax, [ebp-$10]
00453823   8D55F4                 lea     edx, [ebp-$0C]

* Reference to: SysUtils.Trim(AnsiString):AnsiString;overload;
|
00453826   E8B543FBFF             call    00407BE0
0045382B   8B45F4                 mov     eax, [ebp-$0C]

* Possible String Reference to: '123'
|
0045382E   BA94384500             mov     edx, $00453894

* Reference to: System.@LStrCmp;
|
00453833   E8200AFBFF             call    00404258
00453838   740C                   jz      00453846

* Possible String Reference to: '注册失败'
|
0045383A   B8A0384500             mov     eax, $004538A0

* Reference to: Dialogs.ShowMessage(AnsiString);
|
0045383F   E8283BFDFF             call    0042736C
00453844   EB0A                   jmp     00453850

* Possible String Reference to: '注册成功'
|
00453846   B8B4384500             mov     eax, $004538B4

* Reference to: Dialogs.ShowMessage(AnsiString);
|
0045384B   E81C3BFDFF             call    0042736C
00453850   33C0                   xor     eax, eax
00453852   5A                     pop     edx
00453853   59                     pop     ecx
00453854   59                     pop     ecx
00453855   648910                 mov     fs:[eax], edx

****** FINALLY
2009-2-4 20:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
哦,那就没什么了暂时,因为DEDE的工具还没学到,那就不属于我的问题了,

此贴暂时搁置,等有了足够的POWER后在来弄,谢谢楼上2位的解答
2009-2-5 09:02
0
游客
登录 | 注册 方可回帖
返回
//