零、前言
来自whitecell-club的Wens0n同学将在接下来的日子里给大家带来二进制破解科普系列教程。本教程面向新手爱好者,欢迎大家探讨、建议,大牛轻喷。
壹、准备工作
学习这个系列,我们首先需要科普一下ollydbg这个工具。ollydbg主线程窗口:
1. 汇编代码对应的地址窗口
2. 汇编代码对应的十六进制机器码窗口
3. 反汇编窗口
4. 反汇编代码对应的注释信息窗口
5. 寄存器信息窗口
6. 当前执行到的反汇编代码的信息窗口
7~9. 数据所在的内存地址,十六进制,ASCII码
10~12.栈地址,存放的数据,对应说明信息
OD基本快捷键及功能:
F2 下断点,也就是指定断点的地址
F3 加载一个可执行程序,进行调试分析
F4 程序执行到光标处
F5 缩小、还原当前窗口
F7 单步步入
F8 单步步过
F9 直接运行程序,遇到断点处,程序暂停
Ctrl+F2 重新运行程序到起始处,一般用于重新调试程序
Ctrl+F9 执行到函数返回处,用于跳出函数实现
Alt+F9 执行到用户代码处,用于快速跳出系统函数
Ctrl+G 输入十六进制地址,快速定位到该地址处
贰、破解TraceMe
本次试验我们将尝试对TraceMe这个程序的序列号进行破解,TraceMe序列号验证程序流程图:
1. 打开程序加载在ollydbg,如下图。
通常系统在调用的是时候都需要通过调用api接口的。Windows的输入文本框的常见有,GetDlgItemTextA(A:accii)GetDlgItemTextW(w:unicol 的编码)
GetWindowTextA和GetWindowTextW
知道调用了之后,那我们通过搜索程序,搜索关键字,通过ctrl+G搜素GetDlgItemTextA来找到断点。
按下F2设置断点。
再按下ctrl+b查看设置的断点。
然后按下F9走到断点来。然后弹窗,输入内容。按下F7单步步入。
通过按下F7进入里面,调用他、
如下图:
然后按下F8单步步过,可以看到,也可以按下ctal+f9
也可以通过搜索按下ctrl+g查看
那我们继续走,看回显的信息。
可以发现led 存的是edx,然后通过push edx 可以存用户名的值。
也可以看到edx 等于00000006,6代表了用户的长度6位数。通过push edx
我们继续走,按下F8 查看。
通过观察可以看出edx是eax是我们存放密码的地址,通过push edx可以看到。
通过push eax,edx,ebx对用的密码,用户名,长度。
我们在这里是通过暴力破解,我们这里就不走进去call里面,因为暴力破解只需要判断他的返回值就可以咯。
我们继续用f8走,走到text可以看到eax, 任何函数在汇编中返回值都存放在eax,在编译性语言都会转化汇编再转化机器代码。
然后我们继续F8走,我们发现je和test的返回值不一样。 1代表的是标注位寄存器。
通过双击让1->0 让1变成0、可以看到结果。
然后继续F8走。看有什么结果。
爆破成功咯!关键点是我们把1改为0这里,在这里可以下一个断点。
其实在1改为的是说跳转已实现,如果是0的话,跳转未实现。
如果我们不想让他跳转到的话,有2种方法:
1.对eax的值进行改变。 2.把判断去掉,我们可以通过空格,或者改为NOP,取消填充
既然我们都通过暴力破解之后,我们之后保存程序呢。
通过复制可以执行文件->选择。
然后右键-》保存数据到文件
如果被加壳的话,就无法正常运行。那我们接下来继续运行我们保存的文件。
原本的程序,我们这样运行是不成功的,只能通过我们爆破的文件运行,才能成功的破解。
实验TraceMe程序下载地址:http://pan.baidu.com/s/1bfpNFC
提取密码:pykb
本文作者:whitecell-club Wens0n
文章欢迎转载,转载请保留作者与出处
本文始发于微信公众号(WhiteCellClub):二进制破解科普系列之TraceMe
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论