首页 > 其他分享 >【加密与解密】第五章②

【加密与解密】第五章②

时间:2023-01-30 02:44:20浏览次数:34  
标签:限制 加密 函数 拆解 解密 第五章 计时器 窗口 数据包

前面几天过年去了,直接他妈摆了小半个月,要死,最近继续之前的进度。

警告窗口

Nag的意思是烦人。Nag窗口是软件设计者用来不时提醒用户购买正式版本的窗口。
去除Nag窗口常用的办法有三个:1.修改程序的资源2.静态分析3.动态分析
使用资源修改工具去除窗口是不错的方法。可以通过将可执行文件中警告窗口的属性改成透明或者不可见来变相去除警告窗口。若要完全去除警告窗口,只需要找到创建该窗口的代码并跳过。
以下为一个实例。


这里使用的方法也可以理解为直接关闭对话框。

时间限制

时间显示程序分为两类,一类是限制每次运行的时间,一类是不限制单次,限制总时间,比如使用三十天。

1.计时器

在Dos中,应用程序通过接管系统的计时器中断来维护一个计时器(int 8h或者int 1Ch)。每55ms发生一次(18.2次/秒)。

setTimer()函数

在初始化时调用这个API函数,会向系统申请一个计时器并指定计时器的时间间隔,并获得一个处理计时器超时的回调函数。若超时,系统会向申请该计时器的窗口过程发送消息WM_TIMER或者调用回调函数。

因为通过Windows消息的方式工作,因此精度有一定的限制。

高精度的多媒体计时器

精度可以达到1ms。

GetTickCount()函数

精度取决于系统的设置。

timeGetTime()函数

一般不用。

2.时间限制

安装时就已经获取了当前的系统日期并记录在某个地方,也许是注册表中某个不起眼的位置等等。解除这种限制也比较容易。到期后重新调整日期就可以。而与此相对加密者最好将这个时间值存在多个地方。
另一个时间值就是软件最后一次的日期。这个是为了防止用户将机器日期改回去而存在的。如果这个日期早于系统日期就是用户修改了机器日期。
用来获取时间的API函数也有很多,程序一般不直接获取,而是通过采用高级语言中封装好的类来操作系统时间等。
需要注意的是采用时间限制的软件必须能防范regmon,filemon之类的监视软件。

3.拆解时间限制保护。


菜单功能限制

用来限制菜单的某些功能。

1.相关函数

2.拆解菜单限制保护

KeyFile保护

就是利用文件来注册软件的一种方式,KeyFile一般是一个小文件,可以是纯文本文件也可以是不显示字符的二进制文件。
软件作者可以加入一些垃圾信息来干扰解密者,或者分散开来并且通过算法来计算出秘钥。

1.相关API函数

2.拆解KeyFile保护

1.拆解KeyFile一般思路
①用监视软件来监视文件的操作,找到keyfile的文件名
②伪造一个keyfiile,用编辑软件。
③调试器里使用creatfileA设断,查看打开的文件名指针并记下返回的句柄。
④用ReadFile设断,分析传递给ReadFile函数的文件句柄和缓冲区地址。
以上是大致步骤,有的程序判断Keyfile会先判断文件大小,属性,移动指针等。
总之,对keyfile的分析深入与否取决于API编程水平
2.监视文件的操作


3.分析过程



网络验证

是一种很流行的保护技术,优点是可以将一些关键数据放到服务器上,软件必须从服务器中得到这些数据才能运行。拆解它的思路就是拦截服务器返回的数据包,分析程序是如何处理数据包的。

1.相关函数

有send(),recv(),前者是发,后者是收。

2.一般思路。

如果网络验证的数据包固定,可以将数据包抓取,写一个本地服务端来模拟服务器
如果验证的数据包不固定,则必须分析结构找出算法。
实际操作中难以接触到服务端,所以要从客户端入手,利用一组正确的账号来击破网络验证保护机制。

1.分析发送的数据包



2.分析接受的数据包


3.解除网络验证

光盘验证

最简单也最常见的是程序在启动时看看光盘里是否有特定的文件,一般是用getlogicaldrivestrings或者getlogicaldrives函数得到所有驱动表,再用函数检查每个驱动器。
这样的方法是比较容易被破解的。解密者只要在上面的api函数设断就可以找到判断指令。
有一种增强型是把程序运行时需要的关键数据放在光盘中,这样的话即使解密者能够强行跳过程序启动的检查,但由于没有关键信息,就无法运行。应对方法是利用刻录等技术将光盘复制多份。

1.相关函数

2.拆解

只运行一个实例

有实际与安全性的考虑,要求程序只能运行一个实例。

1.实现方法

实现方法有很多,在此列出常见几种。

2.实例

常用断点设置

标签:限制,加密,函数,拆解,解密,第五章,计时器,窗口,数据包
From: https://www.cnblogs.com/Corax0o0/p/17074168.html

相关文章

  • 易灵思钛金系列加密方案
     易灵思钛金系列加密方案(qq.com)......
  • 常见的JS加密解密
    一种常见的JavaScript解密案例是使用JavaScript的​​eval()​​函数来解密已经加密的代码。例如,一段加密的代码可能看起来像这样:scssCopycodevarencrypted="eval(f......
  • IDE中自带的java springboot项目的密码加密和解密
    IDE里搜这个类org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI,跑类的main方法进行加密参数:input=你的明文密码password=固定你自己公司的某个固定值algorithm=PBEWi......
  • JAVA加解密之AES
      <!--AES加密--><dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-ext-jdk16</artifactId><......
  • JS加解密之AES
      demo<scriptsrc="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js"></script><script>alert(aesDecrypt(aesEncrypt("yvioo","wa1234535")......
  • [转]利用python的PyPDF2和PyMuPDF库玩转PDF的提取、合并、旋转、缩放、加密
    本文转自:https://www.cnblogs.com/steven0325/p/16888425.html一、安装PyPDF2和PyMuPDF库pipinstallPyPDF2pipinstallpymupdf#fitz是pymupdf的子模块二、工具......
  • Golang实现16/32位MD5加密
    ​​Golang实现16/32位MD5加密​​packagemainimport("crypto/md5""encoding/hex""fmt")//返回一个32位md5加密后的字符串funcGetMD5Encode(datastring)string{......
  • 密钥封装和公钥加密的联系和区别?
    密钥封装和公钥加密的联系和区别?转载&学习:https://www.zhihu.com/question/443779639先理解下面这句话:密钥封装机制是面向的互联网应用,最大的用处是网络连接时建立双......
  • 一个可逆加密的例子
    ​​一个可逆加密的例子​​​​http://lucky_elove.www1.dotnetplayground.com/​​下面的这个例子实现了一个可逆加密的例子功能。代码很简单,这里就不多解释了。代码如下......
  • 保护个人数据安全,使用luks加密硬盘分区
    create:2023-01-2417:44:44准备工作新硬盘4T,无数据。在root用户或sudo状态下执行。首先创建分区表,由于mbr最大支持只有2T,因此分区表创建为gpt格式。然后创建一个临时......