新手逆向学习记录-CrackMe
一个比较简单的CrackMe文件第一步看一下exe信息,是否加壳之类的,这个比较简单,没有涉及到加壳脱壳
接下来运行软件:
按照提示我们输入用户名和序列号,弹窗提示错误信息,拿到相关信息,接着打开x64dbg开始分析,打开之后先搜索字符串:
可以看到相关的字符串,这里我们定位到"You Get It",双击查看:
这里是一个跳转,根据zf寄存器的状态进行跳转。
在这里可以进行爆破,将je命令直接使用nop填充或者修改成相反的命令jne都可以实现:
但是我们的目的是分析序列号是怎么产生的,所以接着往上找,找一下相关的函数之类的:
往上一点点看到了strcmp函数,下个断点,然后重新运行输入用户名和序列号,在这里也可以看到push了一个字符串"AKA-487757",推测这个应该就是真正的序列号,重新打开软件验证确实如此,只不过还不知道这个序列号是怎么生成的,还要继续找。
一直往上翻一直到函数开始的地方,在这里下个断点,然后开始进行跟踪:
在这里看到我们输入的用户名了,推测序列号的产生应该跟用户名相关,一边f8单步执行一边观察,因为程序比较简单,所以很快就找到关键的地方了:
在0x402415处,有一个函数"lenbstr",它获取用户名的长度,返回值在eax里面,接着下一行把eax的值给edi,然后再跳过一行,在0x402420处,把用户名的长度乘以0x17cfb;
接下来在0x40242d处,这个函数从用户名中返回第一个字母的ascii码的值,接下来的两行把ascii码的值加到刚才计算出来的值上面;
然后在0x40243f处,这个函数把16进制的值转换成10进制,序列码的后半部分就生成了。
再往下跟就到了字符串拼接函数跟我们最开始找到的字符串比较函数了:
到这里,整个序列码的生成就分析完成了,接下来可以按照这个步骤写一个生成序列号的代码:
username = "FZZZP"
len_username = len(username)
mid_value = len_username * 0x17cfb
first_ascii = ord(username)
key = mid_value + first_ascii
Serial = "AKA-" + str(key)
print(Serial)
在这里我们使用"FZZZP"作为用户名,生成的序列号为:AKA-487725
最终验证:
hackchen 发表于 2026-5-19 11:49
想请问一下,到逆向入门级别需要学习多久
这个我也是刚开始,推荐在b站看一下滴水逆向3期的视频【滴水逆向三期视频(配套纸质教材)】 https://www.bilibili.com/video/BV1w54y1y7Di/?share_source=copy_web&vd_source=a71c9e7974c3f29b094140fb89f4c66b
还有52破解的视频【吾爱破解论坛官方入门教学培训第一课:破解基础知识之介绍常见工具和壳的特征 讲师:Hmily】 https://www.bilibili.com/video/BV1BS42197ub/?share_source=copy_web&vd_source=a71c9e7974c3f29b094140fb89f4c66b
然后我这个分析是从这里面找的【新160个CrackMe算法分析-001-简介】 https://www.bilibili.com/video/BV1XL4y1H766/?share_source=copy_web&vd_source=a71c9e7974c3f29b094140fb89f4c66b
相关的一些资料还有《加密与解密》这本书,这个资源在站内也有可以搜到 学习了。感谢大佬 感觉破解很难,写破文更要有耐心。楼主{:1_921:} 学习一下,楼主不错 向楼主学习了!感谢分享 这个讲解过程新手也能看懂。 学习了,感谢巨佬 想请问一下,到逆向入门级别需要学习多久 感谢悉心指导{:1_893:}