加载中…
个人资料
两头尖
两头尖
  • 博客等级:
  • 博客积分:0
  • 博客访问:70,250
  • 关注人气:8
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

一个明文序列号的破解案例:Challenge Pool

(2010-07-27 21:10:24)
标签:

杂谈

分类: 见招拆招

    十年前我上高中的时候,刚刚知道有软件破解这回事。我拿到一个花式台球游戏叫做 Pool 的,有很多种玩法,但是没有注册就只能玩9球。我鬼使神差地用Word去打开这个“Pool.exe”文件,在里面发现了一段文字:Code 122-167。我试着用122-167作为序列号输入,居然成功通过了验证!这个事情我当时觉得很奇怪,因为我用这个方法去对付其他软件,再也没有成功过。

    十年之后的今天,我又把这个Pool翻了出来,试着用OllyDbg对它做一次正规的破解。

一个明文序列号的破解案例:Challenge <wbr>Pool

    程序是用文本框输入序列号的。在OllyDbg加载之后,按“Ctrl+N”打开应用程序输入表,发现只有一个文本框输入的API函数“GetWindowTextA”.

一个明文序列号的破解案例:Challenge <wbr>Pool

    右键单击该行,选择“Set Breakpoint on Every Reference”。系统提示设置了四个断点。按“Alt+B”查看可以看到确实是四个断点。

    按F9让程序运行,还没有出现窗口就停了下来。这是第一次遇到断点,不是我们需要的入口。再按F9继续运行,出现了注册提示窗口:

一个明文序列号的破解案例:Challenge <wbr>Pool

    选择“Enter Registration Code”,程序又停了下来,这是第二次遇到断点,显然还不是我们需要的入口。还按F9继续运行,终于出现了我们希望的注册窗口。随便输一个123,按OK。程序停在了0042EC3A这一行。

一个明文序列号的破解案例:Challenge <wbr>Pool
 

一个明文序列号的破解案例:Challenge <wbr>Pool

    按F8单步执行,程序经过一系列比较和跳转,最后在00411895处进行了最终的判断,注册成功就跳转到004118A7,不成功则跳转到004118A0

一个明文序列号的破解案例:Challenge <wbr>Pool

 

    经过以上分析,我们判断可以在00411895处进行爆破,将je改为jmp,无条件跳转到注册成功。

    双击00411895这一行,将指令改为“JMP short 004118A7”。确定之后再用鼠标右键单击修改过的这一行,执行“Copy to executable | Selection”。这是将打开文件编辑窗口,再单击鼠标右键,执行“Save File”。

    试着执行一下修改过后的文件,现在任意输入一个序列号,都能注册成功了。破解完成!

 

-------------------------------------破解的分隔线--------------------------------------

 

    现在回过头来稍微分析一下序列号验证计算部分。分析可以发现,程序在00411842处直接将“122-167”压入堆栈,然后又把我们输入的“123”提取出来。将“122-167”和“123”的内存地址指针分别赋值给ESI和EAX。0041185F00411881,程序对ESI和EAX指向的地址中的字符进行逐位比对。这就是验证的过程。

    比较有意思的是,用作对比验证的“122-167”并不是计算出来的,而是直接从程序代码中提取出来的。在OllyDbg中按“Alt+M”调出内存检索窗口,点右键查找“122-167”,会发现这个字串就以ASCII明文的形式保存在程序的.data段中。这也就是为什么当年用Word打开程序文件就能发现序列号的原因。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有