作为汇编语言的课程笔记,方便之后的复习与查阅
本篇为课程第十二次课内容
本文中用到的静态分析与动态分析软件,以及作为示例的破解软件:
- 链接:https://download.csdn.net/download/weixin_42437114/15118252
(百度云一直过不了审!就先传到 CSDN 了,我设的 0 积分下载)
基础知识
- 加密:可以对待加密文件进行加壳,压缩,反跟踪,代码变形等操作,这些操作使用汇编语言最方便,有些只能通过汇编语言实现
- 解密:对待破解文件的分析,跟踪,打补丁等操作,也必须掌握汇编语言,否则无法实现
一些重要的汇编指令
- 相等跳转:
JZ/JE机器码:74H - 不等跳转:
JNZ/JNE机器码:75H - 无条件跳转:
JMP机器码:EBH/E9H - 空指令:
NOP机器码:90H屏蔽一些指令可以把它改成90h
静态分析
- 从反汇编出来的程序清单上分析,从提示信息入手进行分析。
- 常用的静态分析工具是 W32DASM、IDA 和 HIEW
示例:利用静态分析破解 CRACKME.EXE
- 打开压缩包中的
CRACKME.EXE,如果输入的序列号错误,就会显示错误信息

那么我们就从这个提示信息入手,尝试破解 - 首先打开
win32dasm,对待破解文件进行反汇编


- 查找字符串数据对应的汇编


双击之后就找到了对应的汇编代码位置:

- 定位要修改的汇编代码位置:在上面找到的字符串数据对应的汇编代码上面一点可以看到
jne 004015ad这个跳转指令,可以猜测这个跳转指令即为序列号是否输入正确的判断语句

- 在二进制文件中更改机器指令,实现暴力破解
- 用
winhex打开待破解软件:

- 查找
jne 004015ad对应的机器指令7516,也可以多搜索几个字节,如75166a40


- 成功定位到了该机器指令处:

- 修改这里的
75(jne)为74(je)即可使软件在输入错误序列号时跳转到正确的分支上。也可以将7516改为9090来屏蔽这个跳转指令。更改后即可破解

- 用
动态分析
- 虽然从静态上可以了解程序的思路,但是并不可能真正了解地了解软件的细节,如静态分析找不出线索,就要动态分析程序,另外,碰到压缩程序,或者软件显示的信息是经过加密的,在运行时解密,静态分析也无能为力了,只能动态分析。所谓动态分析是利用 SoftIce 或 Ollydbg一步一步地单步执行软件
基本 API 函数
GetWindowTextA: 复制指定窗口中的字符到缓冲区GetDlgItemTextA:返回对话框中某一个窗口的标题或文字MessageBoxA:创建、显示和操作信息框- 32 位API常有
AW两种形式:MessageBoxA,MessageBoxW
- 程序获取输入的注册码时可能会用到上面这些API函数,因此可以在 ollydbg 调试时,在这些函数上设置断点
bpx+API函数名
示例:利用动态分析破解 Task Lock.EXE
- 先以管理员方式运行 ollydbg,然后打开
Task Lock.EXE

- 在左下角的命令窗口中输入
bpx GetDlgItemTextA来设置断点

然后开始调试

- 先随便输入一个序列号,按下 ok 按钮之后就到达了断点

- 通过单步调试,可以发现应该要更改
752b这个跳转指令

用同样的方法修改跳转指令:

- 成功破解:

软件保护技术
- 从上面的几个例子中可以看出,如果不给自己的软件进行加密工作,会很容易被别人破解。因此软件加密是十分必要的
常用的软件保护技术:
- 给程序加壳;(防分析的第一关)
- 防注册码破解:
- 用户名和注册码尽量不使用明文; (防止盗取密码)
- 注册码生成算法尽量使用多段函数完成,并加入干扰代码,以迷惑破解者; (防止注册机)
- 防暴力破解:
- 程序自身进行完整性检查,发现被修改使用影子文件自动修复;(防止暴破)
- 注册码的合法性检查不只有对错两条分支,构建注册码判断的迷宫,拖死破解者;(防止暴破)
本文深入探讨了软件破解的方法,包括静态分析与动态分析技巧,使用汇编指令进行破解示例,以及软件保护技术的应对策略。介绍了重要的汇编指令,如相等跳转(JZ/JE),不等跳转(JNZ/JNE),无条件跳转(JMP),空指令(NOP),并展示了如何利用这些指令破解CRACKME.EXE和TaskLock.EXE。
2157

被折叠的 条评论
为什么被折叠?



