作品发布     邀请码    设为首页  收藏 

当前位置:文章免杀 → 文章内容 >> 菜鸟破解实战之初探注册机


菜鸟破解实战之初探注册机

更新时间:2010-12-25 4:58:42   作者:佚名  来源:不详

 

文/图 Sdhjt
       破解程序,通向完美的关键一步就是写出注册机,这也是我等菜鸟们梦寐以求的事。今天就给大家带来一个小程序TouchPro v4.5.1.0,比较典型,正适合菜鸟练习。
TouchPro是一款运行于Windows下的时间属性修改工具,可以修改文件的创建时间、修改时间和访问时间。安装后集成于资源管理器,支持日期属性批量修改。
 
常规检测
安装程序后,在安装文件夹下找到TouchPro.dll文件,用PEiD侦测发现程序没有加壳,使用“Microsoft Visual C++ v7.1 DLL”编写。
程序为DLL形式的Explorer插件,显示在文件属性窗口中,所以需要调试Explorer.exe。Explorer.exe是系统程序,调试时尽量不要做其他无关的操作。直接附加Explorer.exe有可能出现Explorer.exe假死,此时可以直接结束掉Explorer.exe进程,然后用OllyDBG运行Explorer.exe,而不是附加。
       找到输入注册码的地方,如图1所示,输入假注册码后点击确定,对话框直接退出了,什么提示也没有。这下可郁闷了,怎么下断点呢?
 
图1
 
寻找蛛丝马迹
程序看起来没有变态的加密手段,那么存储注册码的地方应该没有刻意地进行隐藏。运行RegMon和FileMon,没有任何效果(呵呵,程序发现注册码错误直接无视掉了)。用OllyDBG直接载入TouchPro.dll,查看API调用,发现了很多的RegCloseKey,但真正的打开注册表的调用却没几个,如图2所示。这里难道有啥猫腻?双击第一个RegCloseKey,来到1B1E处(由于DLL文件地址是动态的,所以这里用文件偏移量,下面类似),眼前突然一亮,发现了一个“RegNumber”,如图3所示。再向上拖动,发现了“User”,难道这就是传说中的向注册表中写注册码的代码?我迫不及待地运行Explorer.exe,来到TouchPro.dll领空(不知为什么,我的OllyDBG需要执行两次查看才能到TouchPro的领空),来到1B1E处(我这是33B1B1E,是一个动态地址,一般前三位是随机的,后边的1B1E是固定的,并且与文件偏移量相同),然后到此段程序的开始处下个断点(注意,此前先要运行一下TouchPro,让Explorer.exe加载TouchPro.dll)。
 
图2
 
图3
 
图4
现在运行程序,肯定是断不下来的,因为我们的假注册码直接被忽略了,不会向注册表中写入任何内容。于是,我顺藤摸瓜,找到调用此段代码的上一级代码,即12DD处,向上查找,发现了经典的判断代码。
 
在12C3处下断,再次输入假注册码,OllyDBG马上断了下来,进170C简单转了一圈,基本上可以确定,170C就是注册码的计算过程了。
 
解剖注册码计算过程
下面我们详细分析一下170C处的过程,非常的简短,没几个CALL,所以我就直接将我分析的结果给出来了。
 
下面就是重头戏了,解剖15F7处的过程,这是计算注册码的关键。我将以C语言的形式进行描述。
编写注册机
整个算法还是比较明朗的,tempuser内的字符对应的16进制形式就是程序的注册码,用C语言还原出来就是以下代码。
 
至此,整个注册算法我们已经搞定了。运行注册机生成一个代码,我们测试一下,如图5所示,成功注册!
 
图5
 
小结
程序的注册算法比较简单,非常适合我等菜鸟练习。这个算法仅仅是将用户名进行重新组合与变换。虽然程序仅仅是抽取了前12个字符,但是,超过12个字符的用户名也会得到不同的注册码,奥秘就是useradd变量也参与了运算。希望本文能够起到抛砖引玉的作用,让菜菜们能获得一些经验值升级,呵呵。

 

责任编辑:华中帝国        



本文引用网址: 

菜鸟破解实战之初探注册机的相关文章
发表评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码