🍬 博主介绍
👨🎓 博主介绍:大家好,我是 JTZ_ ,很高兴认识大家~
✨主攻领域:【WEB 安全】
✨兼攻领域:【逆向分析】【SSM 网页制作】【应用程序编写】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
全文参考 B 站视频 新160个CrackMe算法分析
下载链接: 链接:https://pan.baidu.com/s/1BaROP5e9UbJMSN1sgOOKbA
提取码:z2i6
开始破解
-
使用 OD 打开软件后进行分析
-
对代码区的代码进行分析
在圈中的一段代码中,要求我们需要有一个名为 : CRACKME3.KEY 的文件,
如果没有这个文件,我们可以看到 在下一条语句中的 cmp eax ,0x1 ,就会将 EAX 的值变为 FFFFFFFF, 下一条的指令 JNZ 会判断是否为 零,如果不是就跳转,如果是就不跳转 -
我已经在电脑上创建了 CRACKME3.KEY 的文件, 并在其中书写内容为:
abcdefghijklmnopqrstuvwxyz
-
现在我们照常进行,运行到 cmp eax,0x1 附近, 很明显这里发生了跳转
-
我们查看下方代码:
可以发现,下方有一个 ReadFile 是读取文件的意思,那么意思也很明显,就是读取我们所创建的文化中的内容
-
我们执行完指令可以发现如下情况:
- 为什么值读取了 18 个字符,这是因为在这些语句上面我们执行了一句 mov eax,0x12 , 而 0x12 的十进制就是 18 ,所以我们可以猜测这里是根据这个值来判断读取几个值的
-
继续执行到下面这一步,然后按 F7 步入
-
步入后,我们对其中代码进行分析
00401319 |. B3 41 mov bl,0x41 # 将 BL 的值修改为 41
0040131B |> 8A06 /mov al,byte ptr ds:[esi] # 我们从文件中读取的数据被放在栈中,ds 的值就是栈底的位置,esi 就是相对于栈底的数据偏移地址,这里的意思是按照 abcdefghijklm 顺序读取,并将结果赋值给 AL
0040131D |. 32C3 |xor al,bl # 将 AL 和 BL 的值进行异或,并将值存放在 AL 中
0040131F |. 8806 |mov byte ptr ds:[esi],al # 将 AL 中的值存放到 ds 的 ESI 处
00401321 |. 46 |inc esi # ESI 的值自增 1
00401322 |. FEC3 |inc bl # BL 的值自增 1
00401324 |. 0105 F9204000 |add dword ptr ds:[0x4020F9],eax # 将 EAX 的值和 ds:[0x4020F9](初始为 0) 值相加,并存储到 ds:[0x4020F9]
0040132A |. 3C 00 |cmp al,0x0 # 判断字符串是否读完
0040132C |. 74 07 |je short Cruehead.00401335 # 字符串读完跳转
0040132E |. FEC1 |inc cl # CL 的值自增 1
00401330 |. 80FB 4F |cmp bl,0x4F # Bl 的值和 0x4F 比较,这里的意思是限制计算的最长字符个数,限制为 15
00401333 |.^ 75 E6 \jnz short Cruehead.0040131B # 跳出循环
00401335 |> \890D 49214000 mov dword ptr ds:[0x402149],ecx #
0040133B \. C3 retn
-
执行完毕按 F8 返回
我们可以看到原先的字符串之剩下了四位,
-
继续执行命令 这是一条异或指令
有人可能会对这里的 ds:[0x4020F9] 的值感到懵,建议滑到 八点 查看代码
-
继续运行指令
这里的 EAX 的值的解释:
-
现在我们已经知道了这个程序的大致执行流程,那么我们也就可以编写代码来进行编写破解码了
编写代码,输出文件
我本来计划用 JAVA 写一下,奈何本人水平不够,粘贴老师的代码吧