链接: http://pan.baidu.com/s/1i50oqKt 密码: rtkd

样本来源:https://tuts4you.com/(&40个crackme)
分析环境:xp xp3 
工具:PEID Ollydbg    直接用吾爱破解工具包即可

目录:

一:crackme分析流程介绍
二:实例分析前两个crackme

一:crackme分析流程介绍

首先简介分析样本的一般方法:
(1)拿到一个样本,不管是什么,先弄清它是什么文件格式,这里就要求你要对不同的文件格式有所了解了:
window(PE),linux(ELF),android(dex,ELF),ios/mac(mach-o)
(2)然后看样本有没有壳或加密,如果有壳就脱壳,有加密就看能不能解密
(3)脱完壳,解完密,后面就是动+静态分析了
动态调试:window(od,windbg),linux(gdb,edb),android(jeb,ida),ios/mac(lldb)
静态调试: ida,010Editor,readelf,objdump,string等
(4)网络抓包工具
wireshark,tcpdump,Charles,BrupSuite
(5)当分析一个样本,有可能程序很大,我们要有快速定位问题的能力,针对不同的样本,要分析不同的功能点,
真正工作过程中分析一个样本,是需要一个快速响应,解决问题的能力的,同时在最快的时间内输出相应的分析报告,
这个就要靠平时多锻炼了,有一种“阅片无数”的感觉
(6)分析系统级的样本的时候,我们还需要对相应的系统有一个大致的了解,了解相应系统的启动过程,
每种系统的自启动方式以及注入方式都不同,我们要对这些不同的系统都比较了解。
(7)有了上面的一些基础,就是多实战了,可以从各个渠道下载不同类型的样本进行练习,积累经验。

二:实例分析前两个crackme

1.拿到样本后,首先我们可以直接观察到此文件是windows下的PE文件
2.查看样本有没有加壳,此步骤我们使用工具 PEID(具体介绍请百度或者谷歌)
3.首先动态调试使用工具ollydbg。在使用od打开样本之前请先将上次的调试信息清空,也就是od安装目录下的UDD文件夹清空,

接下来使用od打开样本即可,如图三所示:

图三汇总关键信息已经标出出来。在正式开始动态调试之前呢 我们还需要一步操作就是指定调试信息存放的文件夹图一中我们已经
建立啦文件夹 UDD 此时我们只需要在od中选择 调试->选择符号路径->指定到此文件夹 即可。

分析前的准备:
现在我们开始进行调试,因为样本使用汇编写的是,所以省略去啦启动函数 ,当我们观察图三的时候就很直接,是main的入口
我们知道当我们观察样本行为的时候,仅仅弹出对话框。当我们用od打开的时候可以看到刚才的那个对话框内容和调用函数
在图三中已经标处出 **MessageBox()**。
当我们观察程序的上下文的时候可以在CPU窗口的地址**004010D6**  ** 004010D8** 处看到两处跳转,分别是跳转到 **004010F7**
和地址 **00401205** 处的,当我们来到这两个地址处的时候,可以看到地址**00401205**地址处 是我们想要执行的,
也就是成功的标志。我们也可以看到的是此程序中有多处跳转是跳转到**004010F7**地址处的这样的跳转千万不能实现。

由图三我们可以观察到的API函数CreateFileA() MessageBoox() ReadFile()
我们可以 发现CreateFileA()函数中参数 FileName = “Keyfile.dat”,这是我们可以根据标准的CreateFile()函数参数如图四:

我们可以知道在样本的统计目录下需要一个文件名为 Keyfile.dat的文件用来保存数据。因此我们建立此文件即可,此时我们快捷键F8到地址00401078处,此时我们可以观察到寄存器eax中的值是 00000044 也就是CreateFile函数的返回值。
地址00401078处的汇编指令以及下面的 跳转语句 含义就是:如果eax 跟 -0x1 不相等则跳转实现。
此处的跳转可以延伸为(当没有KeyFile 文件的时候此处的跳转不实现,接下来就是还行 MessageBox()函数,当有KeyFile。dat文件的时候则相反)。
地址00401078跳转实现以后,如图五所示:

接下来就是调用函数ReadFile,其中ReadFile函数中 标出出来的三个参数需要特别关注:
1.pBytesRead 数据窗口的地址是00402173 此参数为实际从 Kyefile.dat中读取到的字节数
2.BytesToRead 此参数是本来要从KeyFile.dat中读取的字节数
3.Buffer 是读取到的数据放在缓冲区中的首地址 40211A
我们快捷键 F4执行到地址004010AE地址处,接下来我们在数据窗口中进行分别查看 00402173 0040211A 两个地址处的数据
光标选中数据窗口 然后快捷键 Ctrl+ G 分别输入地址 00402173 和 004211A (我们之前只是创建啦KeyFile文件,没有向里面写入值),分别如图六 图七开始


此时我们关闭od 打开keyfile.dat文件并且输入 pediy123456。接下来用od重新载入,F4快捷键到地址 004010AE
光标选中数据窗口 然后快捷键 Ctrl+ G 分别输入地址 00402173 和 004211A如图八 九所示:


0xB = 11 (证明我们的猜测完全正确)
接下来就是算法部分:如图10

如图十所示,已经很明确的标注出来啦
(只需要在KeyFile.dat文件的前70个字节中包含有八个 ‘G’ 即可)附件中已经附加啦算法部分的c语言源码。

由于前两个crackme一样,,所以我们只分析一和三即可

第三个
1.首先分析样本行为,如图11.12.13



通过弹窗我们可以知道,只需要去除样本中的Nags即可
2.查壳:仍然是用汇编写的
3.调试思路

去除Nags 
1.由弹窗我们知道可能是调用啦 MessageBox函数
2.如果想去除的话,只需要使此函数不在被调用即可

我们用od打开样本如图14:

如图14所示,我们已经标注出啦,其中的第一个 第三个是我们需要去除的(也就是想办法使此函数不在被调用)
如图15我们仅仅做两处修改即可完成要求:

如图两处被修改为无条件跳转即可:当然此处还有别的方法(暂时没想到)希望大家不吝赐教

总结

需要掌握的
1.cmp jmp/jl/je...等跳转指令的实现条件
2.认识简单的汇编代码
3.看不懂的多看几次 一定要反复调试才会熟悉流程
4.想到啦再说吧
打赏