![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
新Crackme160题
分享自己学习Crackme160题的过程和心得
西瓜君wtml
这个作者很懒,什么都没留下…
展开
-
046-keyme1
算法其实就是通过GetVersionExA获取一些系统版本信息,根据下面注册机进行一些简单算法。原创 2023-06-27 10:52:48 · 111 阅读 · 0 评论 -
042-crackme
6个字节的情况是这样,超过6个字节的话第3步经历循环1,每个ASCII xor 字符串长度2,前三个字节与 T(54) M(4D) G(47) 分别xor3,后三个的ASCII与前三个ASCII分别xor放到后三个字节中4,xor后的前三个字节必须是 0x4b 0x34 0x4e5,xor后三个字节中必须有一个是0x20 0x20后面的就是你显示到exe上的名字。原创 2023-06-27 08:55:06 · 109 阅读 · 0 评论 -
041-genocide1
这个算法就是取name字符串的ascii码值,除以0xA,如果得到的结果大于0xA,再除以0xA,就是每一个文本框里的值。原创 2023-06-26 09:15:40 · 104 阅读 · 0 评论 -
036-Andrnalin.2
算法:取name的每一个字符ascii进行相加,之后再与1234567890相乘,将其转为字符串,并将第4和第9个字符转为“-”。这题看了解析,好多函数不认识。原创 2023-06-24 22:07:43 · 92 阅读 · 0 评论 -
031-Cruehead.1
我们可以利用第一个call的计算结果,再异或0x1234,得到serial数字字符串。原创 2023-06-24 08:33:23 · 68 阅读 · 0 评论 -
030-Acid_Bytes.4
先使用Exeinfo查壳,发现是UPX壳我们先使用ESP定律脱壳,得到脱壳后的程序利用OD附加该程序,字符串搜索关键引擎,找到关键位置,分析上下逻辑代码。这2段代码就是name,serial字符串,并且name字符串的长度不能小于6。继续分析,接下来的代码就是计算name字符串每一位的ascii码2之和。最后把上面计算出来的和+name字符串长度之和2 转化成字符串,再和serial字符串进行比较。原创 2023-06-23 15:38:59 · 50 阅读 · 0 评论 -
026-KeygenMe
就是经过上述算法的计算出来的值和密码字符串取前4个字节的转成DWORD类型进行比较。注意输出字符为可见的。原创 2023-06-23 10:30:54 · 71 阅读 · 0 评论 -
016-fty_crkme3
这题其实就是求水仙花数,水仙花数是指一个 n 位数,它的每个位上的数字的 n次幂之和等于它本身。原创 2023-06-22 20:14:26 · 264 阅读 · 0 评论 -
012-ACG-crcme1
用IDE查壳,发现没有壳,是Delphi程序字符串搜索关键位置,分析上下的逻辑代码显示获取用户名和密码字符串,计算用户名字符串每一位的ascii码和,但是每一位的ascii码不能小于0x20,之后再把和右移三位,异或0x515A5,入栈。分析第二段关键代码,发下就是判断密码字符串是不是[‘0’,‘9’]这个范围内,其实这段代码就是把密码字符串转化为数字保存在edi中,之后再异或0x87CA。原创 2023-06-22 08:53:42 · 66 阅读 · 0 评论 -
009-Boonz-KeygenMe#1
这个算法其实就是计算出来三个数字字符串,拼接成"Bon-%s-%s-%s"这种形式。第一个算法:i < nLen;i++)第二个算法:第三个算法:(是一个固定值)取每轮算法的计算结果值,进行上述拼接就是答案。0 };printf("字符串长度不对\n");return 0;i < nLen;i ++) {0 };//计算第二个字符串 int nEax = nEbx * nEbx;0 };原创 2023-06-21 19:45:50 · 94 阅读 · 0 评论 -
159-CRC32crackme
Exeinfo查壳,发现没有壳,是Delphi程序字符串搜索关键位置,分析上下的逻辑分析那个关键的call,是一个crc32算法。这题看了解析,给出KeyGen程序。原创 2023-06-21 08:48:28 · 67 阅读 · 0 评论 -
162-moons_kgme_1
首先使用Exeinfo查壳,发现是UPX壳我们使用OD附加程序,使用esp定律脱壳。得到脱壳后的程序。是Delphi程序。字符串搜索关键位置,分析上下代码。这个也比较简单,不给出总结,直接写出注册机。原创 2023-06-20 15:42:05 · 40 阅读 · 0 评论 -
147-Prolixe-KeygenMe#1
Exeinfo查壳,发现没有壳,是Delphi程序OD字符串搜索,找到关键位置,发现一个关键的call,和一个strcmp比较函数。进入关键call进行分析,结合IDA。分析这个call,发现输入的name字符串长度必须是偶数,否则最后构造的字符串会出现乱码,这里类似构造了一个汉字。但是当输入的字符串长度是奇数时。会出现乱码。我们根据关键call的逻辑,编写注册机程序。原创 2023-06-20 09:19:53 · 131 阅读 · 0 评论 -
148-Crackme#0704
我们使用DIE工具,发现程序是加了壳的。先进行脱壳操作,我们使用OD附加进程。使用ESP定律进行脱壳。F9执行,发现断在ntdll系统领空里。继续执行。多次执行之后。到达OEP处。之后,我们使用OllyDump脱壳工具,进行脱壳。脱壳成功,程序正常运行。我们字符串搜索搜到关键位置,往上分析。观察必须是local.6这个局部变量不能为0,程序才可以通过验证。而local.6是什么值由这个关键call决定。原创 2023-06-19 21:25:19 · 83 阅读 · 1 评论 -
145-CrackMe_5__by_thechaos
Exeinfo查壳,发现有.BJFnt壳。我们先进行脱壳,OD附加这个程序发现,代码段进行一些加密,字符串搜索也搜索不到关键字符串。我们单步调试这个壳,发现运行到一个位置,下面的代码发生了变化,猜测这个就是OEP。我们使用OllyDump脱壳,发现程序无法运行,之后再用lordPE进行查看,发现LordPe自动对它进行简单的修复,程序可以运行。继续使用OD附加程序。分析这段逻辑代码,我们可以知道把三个部分的数字部分总和加起来等于4078就可以通过验证。原创 2023-06-19 20:30:23 · 46 阅读 · 0 评论 -
139-crackme_n.3_by_COSTY
首先Exeinfo查看有没有壳,发现是VC++程序。首先我们字符串搜索,找到一些关键位置,往上分析。这段代码是判断我们输入的数字不能小于10000000。小于就会直接弹出错误框。继续往下分析。我们综合分析两段代码,发现我们必须让[ebp-0x10]一直为初始值0,所以分析第一段算法逻辑,我们可以知道这是一个判断程序是否是质数的逻辑,如果是质数,则只有1和数字本身这两个因子,不会转到给[ebp-0x10]赋值为1的操作,程序即可通过操作。我们编写注册机。原创 2023-06-18 21:56:37 · 74 阅读 · 0 评论 -
137-Get_The_Password
小计一下,就是字符串慢慢观察出来。原创 2023-06-18 13:34:39 · 1106 阅读 · 0 评论 -
136-nago
这个算法就是把name字符串小于0x39的减去0x30,再放到另一个缓冲区地址里。当然如果一个都没有,转化后的字符串长度为0,直接无法通过验证。之后再把转换字符串每一位的ascii码取出来,经过一个计算的算法。我们可以设计一个随机的字符串,为了方便通过验证计算,字符串的所有字符都小于0x39,大于0,通过程序的单步调试发现,name字符串并不会太长,我们随机一个字符串长度,为10以内,通过逆向的思维,我们构造一个结果字符串,并且回推回去。原创 2023-06-18 09:28:07 · 192 阅读 · 0 评论 -
128-fist_crackme
其实就是构造0xF长度的key。原创 2023-06-17 13:52:10 · 31 阅读 · 0 评论 -
134-KGNME2-KiTo
这题其实也比较简单,就是把name字符串的每一位ascii码求和,转化位10进制数字字符串。注意name字符串的长度必须大于3。原创 2023-06-17 13:27:02 · 38 阅读 · 0 评论 -
121-bRaINbuSY-crackme1
这个算法就是把name字符串每一位的ascii码左移3位的和计算出来,再加上name字符串长度左移三位的值,最后再乘以4,这个数字就是serial字符串。原创 2023-06-17 09:14:14 · 39 阅读 · 0 评论 -
117-delphi-crackme
很简单的逻辑,取出字符串第一个字节的ascii码异或0xE,再取字符串的长度,把他们转化成十进制数字字符串,再进行拼接,就可以得到serial字符串。原创 2023-06-16 18:42:19 · 79 阅读 · 0 评论 -
070-CodeFantasy-crackme
这个crackme最好动静态结合,有些关键库函数需要IDA去识别。其实关键算法就是把输入的用户名字符串每一个位的ascii码加上(1+2+3+4)的和,然后然后转化为16进制数字字符串,就是密码字符串。原创 2023-06-16 09:37:12 · 70 阅读 · 0 评论 -
092-FaNtOm-crackme6
首先Exeinfo查壳,发现没有壳,观察是汇编语言程序字符串搜索,找到关键逻辑,其实是很简单的逻辑根据红框处构建key文件,就可以通过验证。原创 2023-06-16 09:23:02 · 43 阅读 · 0 评论 -
054-vcrkme01
综合分析上述代码,添加了很多冗余指令。核心算法就是:1.基于name字符串取第一个字节和最后一个字节 比如wanao构造成 w-O2.计算每个name字符串数组的字符的ascii总和+0x6064,转化为字符串添加到字符串末尾 w-O252103.再把25210这个计算出来的数+0x6064,转化为字符串添加到字符串末尾w-O25210-49886。原创 2023-06-16 09:05:21 · 44 阅读 · 0 评论 -
093-kesan
其实就是通过反编译工具和IDA,可以帮助我们更快的找到关键call和关键算法逻辑。算法其实就是把name字符串的每一个ascii异或和加上一个固定数字,最后再与一个数字进行异或。0 };printf("name字符串长度不对\n");return 0;i < nLen;i ++) {0 };return 0;原创 2023-06-16 08:52:45 · 40 阅读 · 0 评论 -
109-Jony-crackme
我们分析得到,有一个关键算法call,应该是根据name计算出serial字符串的算法,下方有一个数字转10进制字符串的过程。就是取出每次nEsi^2和nEsi ^2 -1的下标的字符串ascii码,进行按位或操作,再把结果和字符串长度相加。找到这个函数地址之后,我们配合IDA的静态分析,F5功能生成C语言代码,我们提前用Shift+F5添加Delphi函数的库函数识别,帮助我们更快的分析。我们OD附加这个程序,字符串搜索,找到关键的位置,分析附近的逻辑代码。结合OD,我们分析。原创 2023-06-16 08:16:56 · 66 阅读 · 0 评论