首页
社区
课程
招聘
[旧帖] [己解决]关于VC7.0 Method2 [调试]如何下断点的问题**已结** 0.00雪花
发表于: 2007-7-23 00:31 8653

[旧帖] [己解决]关于VC7.0 Method2 [调试]如何下断点的问题**已结** 0.00雪花

2007-7-23 00:31
8653
最近自不量力的找了个小日本的Vegas 5.0视频处理软件,本想了解一下算法看看小日本有什么大的本事,但是却一直找不到注册代码部分(下不了断点),所以没法分析,只能说明我的火候还差,不能打击小日本的嚣张,只好求助大家来对付了。

Sony Vegas是小日本Sony公司的一个专业影像编辑软件。超越 Premiere ,挑战 After Effects 。剪辑、特效、合成、Streaming 一气呵成(我经常做多媒体就是使用它了,不得不承认小日本的本事)。不论是专业人士或是个人用户,都可因其简易的操作介面而轻松上手。现在最新版本是7.0了。

具体安装过程:(我们以5.0版本安装为例)
1、首先从网上下载5.0版本,我下载的文件里面包含安装文件vegas50.exe(41.3M)、一个注册机vegas5_keygen.exe(184KB)、一个vegas 5.0b 简体汉化补丁(1).exe(1.82M)。其中注册机和汉化补丁用PE检查都是加了壳的,下步可以用来作脱壳分析和逆向分析。
2、再从网上下载一个Microsoft .NET Framework 1.1 Package(dotnetfx.exe)(23.1M)文件,5.0以后都需先安装此文件。
3、先安装dotnetfx.exe,然后安装安装文件vegas50.exe,由于我们是分析它的算法,所以用注册机找出注册码和安装汉化补丁就不跳过了。

检查过程:
安装好程序后,用PE检查可执行文件,显示的是:Microsoft Visual c++ 7.0 Method2 [调试]。然后先运行程序看看有什么提示信息:结果显示一个Please Enter Your Serial Number对话框,要求输入注册码,下面有“下一步”和“取消”按钮,很明显,只要注册码正确,才能进入到程序里面。什么也不输入,则弹出一个Warnig对话框,上面显示“Please fill in the 'Serial Number' field.”。随便输入一些内容,则弹出一个Invalid Number对话框,上面显示“You have entered an invalid serial number for Sony Vegas 5.0. Please enter a serial number beginning with J6.”原来开始必须是J6打头,再输入J6tgfy,则弹出相同的Invalid Number对话框,只不过上面显示内容变为“The number that you have entered is invalid.”(我刚开始还大喜,以为没什么了不起的),可是用OD载入程序后却傻眼了:

0072DE90 > $  6A 74         PUSH 74           ;用OD载入后停在这里
0072DE92   .  68 989D7A00   PUSH vegas50.007A9D98
0072DE97   .  E8 F4030000   CALL vegas50.0072E290
0072DE9C   .  33DB          XOR EBX,EBX
0072DE9E   .  895D E0       MOV DWORD PTR SS:[EBP-20],EBX
0072DEA1   .  53            PUSH EBX                                 ; /pModule => NULL
0072DEA2   .  8B3D D4D27300 MOV EDI,DWORD PTR DS:[<&KERNEL32.GetModu>;

|kernel32.GetModuleHandleA
0072DEA8   .  FFD7          CALL EDI                                 ; \GetModuleHandleA
(以下省略)

一般程序载入后都会停在004XXXXX开始的地址,这次却停在了007XXXXX开始的地方,也不知道有什么秘密了,管它的,用字符串查找一直,上面的提示信息一个也没找到,我要晕了,怎么办?管它的,先F9让程序跑起来再说,结果中间出现一次异常中断,Shift+F9一次就到了填写注册窗口的地方。再Ctrl+F2重新加载,用教程介绍的下断方法:既然不能不能用字符串参考下断,就用函数参考下断,输入 bp GetDlgItemTextA 试一下,不行,再用 bp GetWindowTextA,也不行。改用消息断点,重新加载程序,忽略异常中断,在出现注册对话框中输入试验码(此时已经离开主程序领空,来到comctl32模块了),然后点击查看菜单下的窗口,里面有“下一步”的程序按钮文本,在该按钮文本上单击鼠标右键,在弹出的菜单选项上单击“在ClassProc”上设消息断点,结果弹出可疑断点对话框,上面提示“您将在代码部分范围处设置断点....”
略过去后,选“202 WM_LBUTTONUP”消息,确定后提示错误信息:无法读取调试进程的内存。最后也是失败。

在论坛上搜索“在代码范围外设置断点”:

lostforeve2006-12-09, 21:58
我想对程序的按纽设置消息断点,选择在ClassProc上设置断点,然后就跳出:
您将在代码部分范围外设置断点,INT3断点设置在数据上将不会执行并可能严重影响程序调试.
哪位老师能告诉我怎么回事啊.

我这个程序是VC的,脱过UPX壳.


没有结果。

microcosm2006-06-13, 22:29
我按照 CCDebuger 在"OllyDBG 入门系列(五)-消息断点及 RUN 跟踪 "中说的,在ClassProc上设断点,出现错误:无法读取调试进程的内存,位于FFFF08DD的断点已被删除用的不是CCDebuger提供的cycle程序,我是想跟踪一下一个按钮按下去后执行了哪些代码,但跟踪的时候出错,请高手指教。

CCDebuger2006-06-15, 22:13
刚开始学的话建议不要拿太难的软件来练手,如果你选的软件超出你目前的能力范围之外的话,只会打击信心。我当年第一个破解的软件对当时的我来说就超出能力范围之外,也是跟了很多天没有结果,那时也没人问,都是自己琢磨。后来我改变方向,暂时放弃这个软件,从基础的练起。等到后来,原来那个我想破的软件我已经对它没兴趣了。


我不知道我该不该放弃?

上面没有找到结果,我又搜索“VC7.0 Method2 [调试]”:

看雪软件安全论坛 > 加密与解密 > 『软件调试论坛』 > 几种典型程序Button处理代码的定位

--------------------------------------------------------------------------------
PDA查看完整版本 : 几种典型程序Button处理代码的定位


--------------------------------------------------------------------------------

jingulong2006-01-04, 15:33
首先
1 od 下运行程序,F12 暂停;
2 View菜单中选击Windows项,在打开的窗口中可以从Title栏看到目标按钮,从而找到它的Handle(xxxxxxxx) ;

对不同平台生成的程序,分别处理:

一、VB, Delphi, CBuilder 程序:
3 在CallWindowProcA入口下条件断点: [esp+8]==xxxxxxxx && [esp+0c]==202;
4 F9继续程序,点击目标按钮,程序中断;
5 Alt+F4,在代码段(.text)上下访问断点;
6 F9执行程序,程序中断,
1). VB程序中断在下面代码
PUSH DWORD PTR DS:[EAX+EBX] ; yyyyyyy
上面[EAX+EBX]的值(yyyyyy)就是我们要找的位置。

2). Delphi, CBuilder 的程序
程序直接断在我们要找的位置。借moon一句,这姑妄称作CallWindowProcA条件断点加上code段内存断点法吧。

二、VC程序
又分MFC和Win32两种情况,二者相同之处:
3 在IsDialogMessageW入口下条件断点: [[esp+8]]==xxxxxxxx && [[esp+8]+4]==202
4 F9继续程序,点击目标按钮,程序中断;
5 Alt+F4,在代码段上下访问断点;
6 F9执行程序,程序中断, 注意这里虽然中断在code段,但却不是处理Button点击事件的代码处
这时:
对Win32程序,只需要按几下F7,当回到User32.dll领空后再重复一次第 5、6步就可以了;
而对于MFC程序,我们不得不多次重复这样的操作:单步回到MFC领空,再第 5、6步。好在已经看到大陆啦!

类比,这就叫IsDialogMessageW条件断点加上code段内存断点法了。

敬请各位指正。


--------------------------------------------------------------------------------

xsy36602006-01-05, 19:40
自己试了一程序SnagIt32.exe,是Microsoft Visual C++ 7.0 Method2 [调试] ,按照此法不能断下来!

WHY?

--------------------------------------------------------------------------------

jingulong2006-01-05, 20:48
最初由 xsy3660 发布
自己试了一程序SnagIt32.exe,是Microsoft Visual C++ 7.0 Method2 [调试] ,按照此法不能断下来!

WHY?

试了两个Button,都断下了:
0012FE44 77D5F4BA /CALL to IsDialogMessageW from USER32.77D5F4B5
0012FE48 0002059E |hWnd = 0002059E (class='#32770',parent=000205A6)
0012FE4C 00154E58 \pMsg = WM_LBUTTONUP hw = 30578 ("&Add New Profile Wizard...") Keys = 0 X =

216. Y = 11.

0012F918 77D5F4BA /CALL to IsDialogMessageW from USER32.77D5F4B5
0012F91C 001C06A8 |hWnd = 001C06A8 ('Enter Software Key',class='#32770',parent=000304E2)
0012F920 00154E58 \pMsg = WM_LBUTTONUP hw = E0792 ("OK") Keys = 0 X = 34. Y = 13.

--------------------------------------------------------------------------------

jingulong2006-01-05, 20:53
Ref.

http://bbs.pediy.com/upload/2006/4/image/snap002.jpg

--------------------------------------------------------------------------------

xsy36602006-01-05, 22:15
过程如下:
http://bbs.pediy.com/upload/2006/4/image/1.jpg_263.jpg


http://bbs.pediy.com/upload/2006/4/image/2.jpg

之后下断bp IsDialogMessageW [esp+8]==00106AE && [esp+0c]==202。F9后直接出现下列框

http://bbs.pediy.com/upload/2006/4/image/3.jpg

--------------------------------------------------------------------------------

jingulong2006-01-05, 22:42
你应该这样下断:bp IsDialogMessageW [[esp+8]]==00106AE && [[esp+8]+4]==202

--------------------------------------------------------------------------------

xsy36602006-01-05, 23:52
还有点问题:
1、下断,F9继续程序,点击目标按钮,程序中断后;Alt+F4无作用,为何?
2、对于MFC程序,我们不得不多次重复这样的操作:单步回到MFC领空,再第 5、6步。也就是说断下后按F8

至到MFC领空是吧?
3、直到下列情况才算到处理Button点击事件的代码是吗?

0012FE44 77D5F4BA /CALL to IsDialogMessageW from USER32.77D5F4B5
0012FE48 0002059E |hWnd = 0002059E (class='#32770',parent=000205A6)
0012FE4C 00154E58 \pMsg = WM_LBUTTONUP hw = 30578 ("&Add New Profile Wizard...") Keys = 0 X =

216. Y = 11.

0012F918 77D5F4BA /CALL to IsDialogMessageW from USER32.77D5F4B5
0012F91C 001C06A8 |hWnd = 001C06A8 ('Enter Software Key',class='#32770',parent=000304E2)
0012F920 00154E58 \pMsg = WM_LBUTTONUP hw = E0792 ("OK") Keys = 0 X = 34. Y = 13.

--------------------------------------------------------------------------------

快雪时晴2006-01-06, 00:04
经试用该方法,很管用,准万能button断点法哦

--------------------------------------------------------------------------------


用上面介绍的bp IsDialogMessageW [[esp+8]]==00106AE && [[esp+8]+4]==202同样不能断下来。
希望得到大家的帮助,在此先谢了!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你可以先去查看一下字符串,从字符串附近找断点:)
别用OD查字串,用C32ASM

ps:帖子颜色没改,太难看了
2007-7-23 08:51
0
雪    币: 246
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
3
你可以先去查看一下字符串,从字符串附近找断点:)
别用OD查字串,用C32ASM


我用了C32ASM、IDA、W32dsm都找不到字符串。

ps:帖子颜色没改,太难看了

偶是新手,不知道什么地方该加颜色,请明示,感谢大哥了。

如果哪位大哥有该软件的破文,麻烦给个链接地址,谢谢了!
2007-7-23 10:20
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
4
给兄弟一个下断的方法,因为我水平也是有限,只能调试些简单的程序,也在努力的学习中/

兄弟找一下a_p大哥修改的那个OD, 名字叫OD-ICY. 这个OD中带了一个API函数断点的插件, 可以使用那个插件来下断. 或者使用OD的那个万能断电插件来下断.

不过对于这种比较强悍的公司, 分析他们的算法还是有一定难度的。 祝兄弟好运
2007-7-23 16:14
0
雪    币: 246
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
5
我直接使用OD的那个万能断点插件来下断。具体方法是载入程序后,点击插件菜单下的ApiBreak下的API断点,在API组里选择“万能断点”。

这次比较走运,在输入试验码后直接就断在了USER32的领空。后面就是追查出注册代码部分了,考验我的汇编的时候了,希望能有所收获。

再次感谢Nisy大哥的帮助。
2007-7-23 19:55
0
游客
登录 | 注册 方可回帖
返回
//