《加密与解密》笔记五(一)

1:

1:

序列号保护机制一般情况下,我们所使用一个程序如果是要付费的话最常见的方法应该就是使用一个序列号即可,那么这个序列号总是明着(暗着)会提供一个(几个)特殊信息来对其特殊转换最终呈现为一个用于交易的注册码(这里的信息就是类似于用户名密码,或者是单纯的用户名,甚至是我们唯一的硬件上的识别码)一般的验证情况有以下几种:
这里写图片描述
这个方法就是把用户输入的注册码和此时返回得注册码做比较的,同时这个也可以是一个编写注册码的方法,先讨论为验证注册的情况
这里写图片描述
这种的话是比较不安全的一种方法,因为此时我们的序列号是一个明显的值(可能是字符串或是某个变量,此时这些信息都是在内存里面,或者是寄存器eax等,都是可以直接得到的)
我们现在讨论一下F为编写注册码的方法但是要求此时保证了函数F可逆,那么就会有:这样子的形式,此时就会相对安全一些,但是由于可逆,所以我们可以直接对F-1做分析直接得到一个注册机,或者是我们直接用一个用户名来穷举注册码,这样子会很花费时间,其实最简单的方法就是随机注册码然后直接使用返回的用户名为自己的用户名就可以了。
上面这两个方法的推广可以是:
这里写图片描述
这个方法破解的方法也和上面的类似
另外的方法:
这里写图片描述
这种的话对于写一个注册机就会有一点难度但是对于破解,我们可以直接对那个特定值做修改,让它永远都是那个特定值而不进行验证。

2:

对于一个注册类程序我们的破解方法一般简单一点的就是对一下函数下断:
找获取输入窗口的值的函数:

GetDlgItemText()
GetDlgItemInt()
hemecpy()//这个函数是9x和ME的版本的万能断点,因为这里设计到了32位函数转16位的一个内存拷贝

还有弹出注册成功窗口的函数:

MessageBox()
DialogBoxParam()
CreateDialogIndirectParam()
MessageBoxIndirect()

或者是创建文件的函数(将注册信息保存在本地磁盘内的)

RegQueryValue()
GetPrivatePorfileString()
GetPrivatePorfileInt()
GetPrivateInt()
CreateFile()
_lopen()

(以上函数的A,W,参数均未表示)
还有一个书上说的比较牛逼的一个“数据约束性”这个意思大概就是在我们输入了用户名和序列号以后会在这个假的序列号的大概加减90H左右的区域出现(这个性质并不是对所有的验证方式都有效,只限于明文比较(就是会把真的注册码自己计算出来然后存在内存中和我们的的注册码比较的方式))

3:

在我们做比较的时候如何获取到要比较函数的位置呢?
第一点就是对上面那些函数下断
第二就是对相应的窗口过程的消息下断(鼠标按键之类的(WM_LBUTTONDOWN)等)
第三就是让它弹出错误消息的消息框,然后查找相应的注释的ASCII(UNICODE)码就可以
然后我们可以在这些弹出错误提示的弹窗上面找到相关的跳转目的地址,然后就可以返回去猜测大概的验证函数是什么,然后就可以求逆了。

2:

Nag窗口
这个窗口就是在某些特定操作或者运行某一段时间以后弹出的窗口我们可以对通常弹出窗口的函数下断(上面有写就不在这写了)然后找到调用这个窗口的返回的地址然后把这个显示的函数跳过或者NOP就好。
当然还可能会出现书上的一个比较变态的例子:主程序就是从这个窗口里面启动的,书上 给了两个解决方法,这里总结一下:

1:

我们直接在调用之初就直接调用创建主程序窗口的位置就好。

2:

对于用资源管理器拖出来的窗口我们可以直接修改调用参数。

3:

对于很多程序都有一个时限性,就是可以试用这个程序多长时间,这一段笔记就记录了这个计时器的实现方法和某些破解的方法:
我们用到的获取时间的API主要为:

SetTimer()
GetTickCount()
time()
temeGetTime()

对于第一个API这个API每进行一次时间计数器归零就会对窗口过程发送一个WM_TIMER消息,此时我们可以对这个消息下断然后看看在这个消息内所发生的不可描述的事情,然后做相关处理。
对于一些有时限的程序通常的方法就是将第一次运行的时间和退出时的时间保存到磁盘,注册表但是单单保存一份可能会被一些检测软件察觉,此时我们应该分随机时段多随机保留记录几个,为什么保存最后一次退出时的时间,这个是为了防止有的人把系统时间改为之前的时间。
还有,如果要防范别人对以上时间函数下断,我们可以直接获取一些修改频繁的系统文件的时间(user.dat,system.dat等)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值