汇编语言(十):软件加密与解密

作为汇编语言的课程笔记,方便之后的复习与查阅

本篇为课程第十二次课内容

本文中用到的静态分析与动态分析软件,以及作为示例的破解软件:

基础知识

  • 加密:可以对待加密文件进行加壳,压缩,反跟踪,代码变形等操作,这些操作使用汇编语言最方便,有些只能通过汇编语言实现
  • 解密:对待破解文件的分析,跟踪,打补丁等操作,也必须掌握汇编语言,否则无法实现

一些重要的汇编指令

  1. 相等跳转: JZ/JE 机器码: 74H
  2. 不等跳转: JNZ/JNE 机器码: 75H
  3. 无条件跳转: JMP 机器码: EBH / E9H
  4. 空指令: NOP 机器码: 90H 屏蔽一些指令可以把它改成90h

静态分析

  • 反汇编出来的程序清单上分析,从提示信息入手进行分析。
    • 常用的静态分析工具是 W32DASM、IDA 和 HIEW

示例:利用静态分析破解 CRACKME.EXE

  • 打开压缩包中的 CRACKME.EXE,如果输入的序列号错误,就会显示错误信息
    在这里插入图片描述
    那么我们就从这个提示信息入手,尝试破解
  • 首先打开 win32dasm,对待破解文件进行反汇编
    在这里插入图片描述
    在这里插入图片描述
  • 查找字符串数据对应的汇编
    在这里插入图片描述
    在这里插入图片描述
    双击之后就找到了对应的汇编代码位置:
    在这里插入图片描述
  • 定位要修改的汇编代码位置:在上面找到的字符串数据对应的汇编代码上面一点可以看到jne 004015ad这个跳转指令,可以猜测这个跳转指令即为序列号是否输入正确的判断语句
    在这里插入图片描述
  • 在二进制文件中更改机器指令,实现暴力破解
    • winhex打开待破解软件:
      在这里插入图片描述
    • 查找jne 004015ad对应的机器指令7516,也可以多搜索几个字节,如75166a40
      在这里插入图片描述
      在这里插入图片描述
    • 成功定位到了该机器指令处:
      在这里插入图片描述
    • 修改这里的75(jne)为74(je)即可使软件在输入错误序列号时跳转到正确的分支上。也可以将7516改为9090来屏蔽这个跳转指令。更改后即可破解
      在这里插入图片描述

动态分析

  • 虽然从静态上可以了解程序的思路,但是并不可能真正了解地了解软件的细节,如静态分析找不出线索,就要动态分析程序,另外,碰到压缩程序,或者软件显示的信息是经过加密的,在运行时解密,静态分析也无能为力了,只能动态分析。所谓动态分析是利用 SoftIceOllydbg一步一步地单步执行软件

基本 API 函数

  • GetWindowTextA: 复制指定窗口中的字符到缓冲区
  • GetDlgItemTextA:返回对话框中某一个窗口的标题或文字
  • MessageBoxA:创建、显示和操作信息框
  • 32 位API常有 A W两种形式:MessageBoxA, MessageBoxW

  • 程序获取输入的注册码时可能会用到上面这些API函数,因此可以在 ollydbg 调试时,在这些函数上设置断点 bpx+API函数名

示例:利用动态分析破解 Task Lock.EXE

  • 先以管理员方式运行 ollydbg,然后打开Task Lock.EXE
    在这里插入图片描述
  • 在左下角的命令窗口中输入bpx GetDlgItemTextA来设置断点
    在这里插入图片描述
    然后开始调试
    在这里插入图片描述
  • 先随便输入一个序列号,按下 ok 按钮之后就到达了断点
    在这里插入图片描述
  • 通过单步调试,可以发现应该要更改752b这个跳转指令
    在这里插入图片描述
    用同样的方法修改跳转指令:
    在这里插入图片描述
  • 成功破解:
    在这里插入图片描述

软件保护技术

  • 从上面的几个例子中可以看出,如果不给自己的软件进行加密工作,会很容易被别人破解。因此软件加密是十分必要的

常用的软件保护技术:

  • 给程序加壳;(防分析的第一关)
  • 防注册码破解:
    • 用户名和注册码尽量不使用明文; (防止盗取密码)
    • 注册码生成算法尽量使用多段函数完成,并加入干扰代码,以迷惑破解者; (防止注册机)
  • 防暴力破解:
    • 程序自身进行完整性检查,发现被修改使用影子文件自动修复;(防止暴破)
    • 注册码的合法性检查不只有对错两条分支,构建注册码判断的迷宫,拖死破解者;(防止暴破)
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值