吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9177|回复: 16
收起左侧

[原创] 【S01E03】软件注册机破解的方法

[复制链接]
ZQ05_2012 发表于 2013-10-12 23:02
本帖最后由 Chief 于 2013-10-13 21:50 编辑

前几天跟着学习shark恒的破解教程,刚把第一季学完,感觉真是受益匪浅,学到了很多破解方面的知识。
首先,非常感谢恒大,给我们带来精彩的破解教程。
学完第一季的教程, ,所以想看能不能分析下其注册码的生产原理,写出一个注册机,所以拿第三课的软件进行了实验,相关链接是
http://www.52pojie.cn/thread-196018-1-1.html
整个破解过程如下:



实验环境:Win7+ OD
破解对象:Shark破解教程中的第三课样本
分析结果:写出一个与之对应的注册机
整个分析过程如下:
1.     壳识别与脱壳处理
2.     密钥生成算法分析
3.     注册机的实现
一、      壳识别与脱壳处理
虽然加壳与否不影响注册机的实现,但是为了便于调试,还是进行一下简单的脱壳处理。
首先用PEiD进行壳的识别,是UPX2.93 – 3.00,利用ESP定律下断点,找到程序OEP,DUMP下入口点出的程序,然后用ImportREC修复导入表,即可得到脱壳后的程序。下面是几张截图:

1.png

          图1  PEiD识别出壳类型为UPX

2.png
  图2 找到OEP,DUMP程序


3.png
图3 进行导入表修复
最后,得到脱壳后的程序Test_.exe。
二、      密钥生成算法分析
分析的关键在于准确定位密钥生成的函数位置。
分析过程中首先通过字符串定位判跳转的位置,然后在其附近寻找注册码生成的函数。
用OD挂起Test_.exe,让程序运行起来,随便输入一个用户名和注册码,弹出一个“信息:”提示框,依据框中的内容定位判跳转的位置如下图所示:
                                                                                                                                             4.png
图4  依据字符串找到判跳转的位置
在此处下个断点,然后逐步网上寻找,查找生成注册码的位置。通过栈中的ret找到外层函数位置,然后重新注册,找到本段函数的起始位置,如图所示:
                                                                                              5.png
图5  注册码生成与比对函数入口点
逐步往下分析,有一个函数将用户名“123”和字符串“121110”压栈,而返回值恰好是包含注册码的字符串“75,66,4C”,故而推测可能是在这个函数中完成了注册码的生成过程,在此处下断点,如图所示:
                                                                              6.png
6  注册码生成函数
进入这函数就可以看到整个密钥生成的过程,整个过程有点长,简要概述如下:
1.     分配两个大小为0x100的空间ADDR1,ADDR2;
2.     将ADDR1中填充0x00----0xFF的内容,将ADDR2中填充“121110”循环的内容;
3.     结合这两个空间中的内容,生成一张0x100大的加密表,如图所示:
7.png
图7  加密表
   这个加密表是逐次变化的,比如开始时是6C和D0交换位置,接着是11和41,分析发现每次变化后的结果是相同的!所以可以将其看做是静态的分析值。
4.     逐个取用户名的字符与相应的加密字符异或运算,得到一个8位长的值,将该值转化为字符串便是对应用户名字符的注册码。如图所示:
                                                                                                                                     8.png
图8  生成单字符注册码
其中,在栈中的-7Ch处是用来异或的密钥,-88h处是用户名的单字符值。再往下的函数就是将得到的字符转化为字符串,如图所示:
                                                                                                                                        9.png
图9  生成单字符注册码字符串
然后通过一个循环的过程得到包含用户名对应的注册码的字符串。
5.由于得到的每个单字符注册码之间以“,”隔开,接下来调用函数将其归并到一起,如图所示:
                                                                                                                              10.png
10  去掉“,”得到注册码
至此,主要的注册码获取过程已经结束,然后就是与输入的密码进行比对,判跳转,如图所示:
file:///C:\Users\ZQ\AppData\Local\Temp\msohtmlclip1\01\clip_image021.png
11.png


11  将输入与真实注册码比较

三、      注册机的实现
通过前面的分析可以知道,想写入注册机只要知道生成注册码的密钥就可以实现。
由于还没有分析清楚每次密钥产生的算法原理,所以采用记录的方式还原密钥。
在用户名中填入2016个“0”,然后在图11的位置下断点,从内存中获得所有注册码,然后让每个单字符注册码与0x30异或,还原出密钥表如图所示:


file:///C:\Users\ZQ\AppData\Local\Temp\msohtmlclip1\01\clip_image023.png
12.png


12  密钥表
  然后写一个小程序,输入用户名,然后通过相应的单字符注册码异或生成算法,生成相应的注册码就可以了,效果图如下:


file:///C:\Users\ZQ\AppData\Local\Temp\msohtmlclip1\01\clip_image025.png
13.png


13  注册机效果图
后记:
开始不知道“121110”有什么意义,后来在查看恒大的个人信息时发现其**就是121110,所以前面推断121110就是关键密钥是正确的。
再次感谢恒大,教程非常精彩,确实受益匪浅。


免费评分

参与人数 3热心值 +3 收起 理由
zeromaggot + 1 已答复!
Chief + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.
mqiancheng + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

liuhongyu 发表于 2013-10-12 23:10
楼主辛苦了,谢谢分享。 。
淡然出尘 发表于 2013-10-12 23:09
 楼主| ZQ05_2012 发表于 2013-10-12 23:11
淡然出尘 发表于 2013-10-12 23:09
恒大的学生都那么厉害..

恒大的教程真的非常好,赶紧学习吧!
948413534 发表于 2013-10-12 23:28
牛逼啊,新手????
education 发表于 2013-10-12 23:38
小时候家里穷,没有上学,但是还是支持楼主知识
SunerC 发表于 2013-10-12 23:41
羡慕会写注册机的大牛。
九零-鑫鑫 发表于 2013-10-13 00:09
非常感谢 支持原创 谢谢楼主分享知识!
风无迹 发表于 2013-10-13 06:04
膜拜一下了~
zeromaggot 发表于 2013-10-13 22:25
嗯,很透彻
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 21:16

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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