Loading...

文章背景图

decode me

2026-05-05
11
-
- 分钟

下载链接

https://crackmes.one/crackme/69245c422d267f28f69b806e

解压密码

crackmes.one

难度

简单

解题步骤

用IDA打开并反编译

查看字符串,发现大概是写入密码然后进行判断的程序,密码可能是Pa100-322-1L@101,如果是只是想测试是否是真的密码可以直接运行程序然后尝试即可,当然最终分析密码不是这个硬编码内容

进入transformChar函数查看逻辑,可以看到Destination只在红框出现,且用到strcpy函数来将Source内容复制给Destination

然后是后续对部分内容的处理,如果当前字符为0则改成_,如果当前字符为1则改成>,如果当前字符为2则改成\

查看byteEncoder函数,可以看到主要是是对a2地址指向的字符串赋值,按字符依次将传入的字符串Str进行转换成十六进制,然后以\xXX形式传入a2地址指向的字符串,v5+=4正好对应了\xXX四个字符,sprintf函数是按找指定格式将指定数据拼成字符串写入指定内存,sprintf(目标地址, "格式字符串", 要格式化的值),原文机将v6(Str中的每个字符)按照\x%02X格式写入v7(a2执行的地址)

根据前面分析初步可以判断后面函数作用,函数scanf_constprop_0用于将用户输入传入字符串Str,然后对Str处理后传入Str2,最后通过checker函数来做核心逻辑判断,最后输出结果然后结束函数,所以后面应该关注checker函数

查看checker函数,前面的运算比较复杂,可以先找找关键输出或者关键逻辑判断,可以在最末尾看到有比较Str1和Str2两个字符串,然后如果相同输出Yes!,不同则输出No!,后面再简单看看前面是否会对Str1和Str2值会产生影响,大概率是混淆

先分析第一段处理,将Str1的/都去除

第二段处理类似,将Str1的x去除

这里对Str2的处理也是雷同,先去掉所有的/,再去掉所有的x

最终比较处理过后的字符串Str1和Str2,其实是处理掉/x,保留的是每一个原字符串的十六进制编码(两位)

简单的处理脚本

输入密码Pa>_-3\->L@>>

上一篇 easycrack
下一篇 没有了
评论交流

文章目录