飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4178|回复: 0

[原创] Super Screen Capture 追码过程分析

[复制链接]

该用户从未签到

发表于 2008-8-17 19:32:29 | 显示全部楼层 |阅读模式
【文章标题】: Super Screen Capture 追码过程分析
【文章作者】: retext123
【软件名称】: Super Screen Capture V6.88 简体中文版
【下载地址】: http://www.newhua.com/soft/58259.htm
【加壳方式】: 无
【编写语言】: Borland C++
【操作平台】: WINXP
【软件介绍】:是一款功能丰富的屏幕截图软件。软件支持多种截图方式,如全屏,矩形,窗口,滚动截图,directx截

图,视频截图,同时录音等。用户可以将图片输出到剪贴板、打印机、电子邮件、编辑工具、临时文件夹等,并可以保

存成常见的图片格式。支持截屏边框。
--------------------------------------------------------------------------------
【详细过程】
  这只能算是一次破解日记,一名初学者的一次小小的经历,把自己所知道的,学到的写了一下,以便对于刚刚入学的

提个醒,顺便分享一下我的喜悦,对于初学者,莫过于在自己的努力下,终于将未注册版改为注册版,拨开了重重迷雾

,最终见到了曙光。

  看过了n多的教程,总是不能理解其中很多的地方,在很多次实践失败之后,终于让俺找到了一个软柿子,赶快来捏!

:-)


OD载入后,按照最常用的方法,查找关键提示语

“序列号错误!”

找到后,双击来的这个代码处

00447D5A  |.  BA 75F75400   mov     edx, 0054F775                  ;  序列号错误!

  按F2键,在此代码处下断,点击工具栏上的运行按钮,运行程序,目的在于程序是否会断在这里,如果断不下来,那

就是说找的断点不对,再想其他方法,

软件启动后,点击注册,输入姓名和序列号,我输入的是

姓  名:retext
序列号:789456123

断下了,证明下断地址正确,好!从断点处向上看,查找从那里来到断点的;


00447D4E  |> \A1 242C5600   mov     eax, dword ptr [562C24]
00447D53  |.  6A 30         push    30
00447D55  |.  B9 8AF75400   mov     ecx, 0054F78A             ;  注意
00447D5A  |.  BA 75F75400   mov     edx, 0054F775             ;  序列号错误!



   从447D4E处,可以看到一个跳转来自447B34,跳过上面的几行代码,先直接来447B34,现在的任务是,分析出关键跳

转处,也就是说,从这个地址处开始,注册版和未注册版就读取不同的代码了!

00447B34  |. /0F84 14020000 je      00447D4E

   在这行的下面几行,看到这个字符串“..成功!谢谢你使用我们的软件. ”肯定是注册成功后的语句呀,这就是刚跳

过的几行代码,也就是注册成功的标志,说明来到的这个跳转447B34就是关键跳了!

从关键跳向上看有什么代码,

00447AD8  /.  55            push    ebp
00447AD9  |.  8BEC          mov     ebp, esp
00447ADB  |.  83C4 A8       add     esp, -58
00447ADE  |.  53            push    ebx
00447ADF  |.  56            push    esi
00447AE0  |.  57            push    edi
00447AE1  |.  8BD8          mov     ebx, eax
00447AE3  |.  B8 5CF85400   mov     eax, 0054F85C
00447AE8  |.  E8 07030D00   call    00517DF4
00447AED  |.  66:C745 B8 08>mov     word ptr [ebp-48], 8
00447AF3  |.  33D2          xor     edx, edx
00447AF5  |.  8955 FC       mov     dword ptr [ebp-4], edx
00447AF8  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
00447AFB  |.  FF45 C4       inc     dword ptr [ebp-3C]
00447AFE  |.  8B83 08030000 mov     eax, dword ptr [ebx+308]
00447B04  |.  E8 4F0F0A00   call    004E8A58
00447B09  |.  8D4D FC       lea     ecx, dword ptr [ebp-4]
00447B0C  |.  8B15 20295600 mov     edx, dword ptr [562920]   ;  SSCaptur._zForm
00447B12  |.  8B01          mov     eax, dword ptr [ecx]
00447B14  |.  50            push    eax
00447B15  |.  8B0A          mov     ecx, dword ptr [edx]
00447B17  |.  51            push    ecx
00447B18  |.  E8 EFECFBFF   call    0040680C
00447B1D  |.  83C4 08       add     esp, 8
00447B20  |.  BA 02000000   mov     edx, 2
00447B25  |.  50            push    eax
00447B26  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
00447B29  |.  FF4D C4       dec     dword ptr [ebp-3C]
00447B2C  |.  E8 9BBE0D00   call    005239CC
00447B31  |.  59            pop     ecx
00447B32  |.  84C9          test    cl, cl
00447B34  |.  0F84 14020000 je      00447D4E                  


  这么多的代码,真正的注册码在那里?那句才是关键call呢?只有运行起来看了,一句一句分析,看看每个call,都

完成了什么任务?

在第一句447AD8,下断

点击工具栏上的运行键或是按键盘上的F9键,运行,重新点击注册框处的确定,并断在447AD8,F8单步向下走;

一直执行到关键跳转,只看到447B12处有输入的注册码,然后关键处跳转了,

00447B12  |.  8B>mov     eax, dword ptr [ecx]             ;  输入的注册码789456123

只有动脑子想一想,为什么关键跳转处跳转呢?是谁在影响他的跳转呢?

应该是关键跳上面这句决定着它是否跳,

00447B32  |.  84C9          test    cl, cl

这是标志位测试,幸好我刚刚看完pyg2007的教程,这是标志位比较的标志,注册码真假测试后,cl为零或不是零,根据

值的不同,后面跟随着一个跳转,跳向注册版或未注册版。
那就来看看cl的值是怎么来的?


00447B31  |.  59            pop     ecx

从堆栈中弹出数值给ecx,观察ecx是零,那这个堆栈中的值是什么时候压入的呢?再重来,运行,点击序列号错误提示

框的确定,注册,断下

一直瞪眼看堆栈,这个零是什么时候进入的堆栈?


00447B18  |.  E8>call    0040680C
00447B1D  |.  83>add     esp, 8
00447B20  |.  BA>mov     edx, 2
00447B25  |.  50 push    eax

经过跟踪,发现447B25 push eax 正好将eax的零值压入了堆栈,并且后面pop  ecx弹出送给了ecx,由此看来447B25

call 40680C 这个call 就是关键call了,重来,F7进入它!

进入这个call后,非常容易的看到一段字串:

00406831  |.  BA>mov     edx, 00540637                    ;  SSC37219376328168

会不会就是注册码,是不是试试就知道呵呵!
填入后,关键跳转处不跳了,o(∩_∩)o...哈哈,这段字串就是注册码,而且是固定注册码,注册名是任意了!

在关键跳转后面,会看到字串“CONFIG.INI”和字串“Serail”,软件注册成功后,会将注册码保存在程序文件夹下的

config.ini文件内,打开它,就能看到里面有

Serail=SSC37219376328168


后记:
对于6.88汉化版,不知是什么原因,这个注册码不能保存到文件中,只好手动保存了,启动后一样成为注册版!

写的很乱,第一次写的破文,只要意思到了就好了!
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表