最近自不量力的找了个小日本的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同样不能断下来。
希望得到大家的帮助,在此先谢了!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课