Super Screen Capture 追码过程分析
【文章标题】: 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
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 , 8
00447AF3|.33D2 xor edx, edx
00447AF5|.8955 FC mov dword ptr , edx
00447AF8|.8D55 FC lea edx, dword ptr
00447AFB|.FF45 C4 inc dword ptr
00447AFE|.8B83 08030000 mov eax, dword ptr
00447B04|.E8 4F0F0A00 call 004E8A58
00447B09|.8D4D FC lea ecx, dword ptr
00447B0C|.8B15 20295600 mov edx, dword ptr ;SSCaptur._zForm
00447B12|.8B01 mov eax, dword ptr
00447B14|.50 push eax
00447B15|.8B0A mov ecx, dword ptr
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
00447B29|.FF4D C4 dec dword ptr
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 ;输入的注册码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的零值压入了堆栈,并且后面popecx弹出送给了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汉化版,不知是什么原因,这个注册码不能保存到文件中,只好手动保存了,启动后一样成为注册版!
写的很乱,第一次写的破文,只要意思到了就好了!
页:
[1]