Gushang 逆向之“一个娱乐向CrackMe”

Easy CrackMe

0x01 逆算法
IDA, 找到main_0,F5

在这里插入图片描述
flag存到了v7中,之后有个判断,
if (v10 < 0 || v10 > 10) 条件成立则打印Failed-> flag的长度在1-10之间,
但是具体的位数不定,继续往下看
在这里插入图片描述
发现是以位数作为入口点,继续往下看
在这里插入图片描述
发现关键点,v8 != 9 则打印Failed-> v8 == 9则打印Success!, 该判断的标签为LABEL_21
接下来用排除法,把位数排除了

case 9:
case 9: break;

这里直接跳出switch,然后往下执行,来到
在这里插入图片描述
假设第一个字符为z, 那么这里条件不满足
此时v9 = 1, v8 = 1
在这里插入图片描述
来到第二个循环,假设第二个字符还是为z,那么goto LABEL_48
此时v9 = 2, v8 = 0
在这里插入图片描述
假设第三个字符为h, goto LABEL_9
此时v9 = 3, v8 = 2
在这里插入图片描述
假设第四个字符为w, goto LABEL_44
此时v9 = 4, v8 = 4
在这里插入图片描述
假设第五个字符为a, goto LABEL_13
此时v9 = 5, v8 = 7
在这里插入图片描述
假设第六个字符为x, goto LABEL_40
此时v9 = 6, v8 = 8
在这里插入图片描述
假设第七个字符为y, goto LABEL_17
此时v9 = 7, v8 = 9
在这里插入图片描述
假设第八个字符为!goto LABEL_36
此时v9 = 8, v8 = 10
来到最后一个字符,所以需要跳出循环,那么此时最后一个字符,只能是<
可以发现刚好v8 - 1 = 9, 符合LABEL_21的要求
在这里插入图片描述
综上,可以得到flag为zzhwaxy!<
在这里插入图片描述

0x02 爆破

拖进OD,搜索字符串
在这里插入图片描述
跟进来到该位置
在这里插入图片描述
下F2断点,运行
在这里插入图片描述
单步往下走,到0040104C会卡住,这里需要输入键值
在这里插入图片描述
随便输入点东西就可以了
在这里插入图片描述
之后有两个cmp,这两个就是判断输入长度的,那么00401058就是strlen函数,该函数计算完的值放在eax寄存器中,之后将该值传给局部变量[local.1]
在这里插入图片描述
看到jmp跳转的地址00401450
在这里插入图片描述
看到第一个JCC指令,有机会跳到jmp,所以这里将其NOP掉即可,
在这里插入图片描述
第二个JCC指令会绕过跳向失败的jmp,将第二个JCC修改为jmp无条件跳转
在这里插入图片描述
修改后:
在这里插入图片描述
往下单步,这个ja跳的地址也是00401450,所以这里将其NOP
在这里插入图片描述
之后的JMP指令跳到了, 发现Success字符串,单步,发现有个JNZ,这里也可以直接NOP
在这里插入图片描述
单步之后输出Success,那么破解就成功了
在这里插入图片描述
之后dump即可。
在这里插入图片描述

ps: 该程序来源于https://www.52pojie.cn/thread-1179305-1-1.html,有兴趣的小伙伴可以自行去该帖下载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值