逆向破解之160个CrackMe —— 004-005
CrackMe —— 004
160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合一共160个待逆向破解的程序
CrackMe:它们都是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。
编号 | 作者 | 保护方式 |
004 | ajj | Name/Serial(Delphi) |
005 | ajj | Serial(Delphi) |
工具
x32dbg
DelphiDecompiler
peid
LordPE
ImportREC
开始破解之旅
ON.1
使用x32dbg打开004号程序,和程序一起的还有一个帮助文件,从文件中我们得知程序是Delphi
打开程序,我们发现没有一个确认按钮,这下应该怎么来操作呢?
先搜索字符串
1 2 3 | 地址=004580A9 反汇编=mov edx,ckme.458114 字符串= "恭喜恭喜!注册成功" |
双击,在这个地址向上翻看
第二个跳转跳过了注册成功,该跳转为注册码判断跳转将其NOP,输入框被输入数据????怎么没有任何反应
我们使用DelphiDecompiler 来打开004号程序,该程序是一个Delphi反编译程序,点击Procedures,在Events窗口下发现单击,双击事件和一个chkcode,chkcode汉意疑似检测code
回到程序,我们单击bingo~,结果出现了,美丽的朱茵小姐出现了
接下来我们使用追码的方式来尝试破解
记录两个地址 00457E7C ,00457FB8和00457C40 在x32dbg 中设置断点,来到程序在输入框内输入数据,单击
停在了断点处
单步向下开始走
到达00457C88处时出现dseloffc-012-OK 疑似注册码,继续单步向下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 00457C50 | 51 | push ecx | 00457C51 | 874D FC | xchg dword ptr ss:[ebp-4],ecx | 00457C54 | 53 | push ebx | ebx: "紋E" 00457C55 | 56 | push esi | 00457C56 | 8BD8 | mov ebx,eax | ebx: "紋E" , eax:& "10" " 00457C58 | 33C0 | xor eax,eax | eax:& "10" 00457C5A | 55 | push ebp | 00457C5B | 68 3D7E4500 | push ckme.457E3D | 00457C60 | 64:FF30 | push dword ptr fs:[eax] | 00457C63 | 64:8920 | mov dword ptr fs:[eax],esp | 00457C66 | 8BB3 F8020000 | mov esi,dword ptr ds:[ebx+2F8] | 00457C6C | 83C6 05 | add esi,5 | 00457C6F | FFB3 10030000 | push dword ptr ds:[ebx+310] | [ebx+310]: "黑头Sun Bird" 00457C75 | 8D55 F8 | lea edx,dword ptr ss:[ebp-8] | [ebp-8]: "10" 00457C78 | 8BC6 | mov eax,esi | eax:& "10" 00457C7A | E8 85FEFAFF | call ckme.407B04 | 00457C7F | FF75 F8 | push dword ptr ss:[ebp-8] | [ebp-8]: "10" 00457C82 | FFB3 14030000 | push dword ptr ds:[ebx+314] | [ebx+314]: "dseloffc-012-OK" 疑似注册码 00457C88 | 8D55 F4 | lea edx,dword ptr ss:[ebp-C] | 00457C8B | 8B83 D4020000 | mov eax,dword ptr ds:[ebx+2D4] | eax:& "10" , [ebx+2D4]: "聪A" 00457C91 | E8 B2B6FCFF | call ckme.423348 | 00457C96 | FF75 F4 | push dword ptr ss:[ebp-C] | 00457C99 | 8D83 18030000 | lea eax,dword ptr ds:[ebx+318] | eax:& "10" , [ebx+318]: "黑头Sun Bird10dseloffc-012-OK12345" 00457C9F | BA 04000000 | mov edx,4 | 00457CA4 | E8 93BFFAFF | call ckme.403C3C | 00457CA9 | 33D2 | xor edx,edx | 00457CAB | 8B83 F4020000 | mov eax,dword ptr ds:[ebx+2F4] | eax:& "10" , [ebx+2F4]:& "HPB" 00457CB1 | E8 AAB5FCFF | call ckme.423260 | 00457CB6 | 8B93 18030000 | mov edx,dword ptr ds:[ebx+318] | [ebx+318]: "黑头Sun Bird10dseloffc-012-OK12345" 00457CBC | 8B83 F4020000 | mov eax,dword ptr ds:[ebx+2F4] | eax:& "10" , [ebx+2F4]:& "HPB" 00457CC2 | E8 B1B6FCFF | call ckme.423378 | 00457CC7 | 33F6 | xor esi,esi | 00457CC9 | 8D55 EC | lea edx,dword ptr ss:[ebp-14] | |
继续单步向下发现00457CBC处[ebx+318]堆栈处出现一串更长的字符串,疑似注册码也在里面,难道这个才是真正的注册码吗,记录下来
在注册码内输入“黑头Sun Bird10dseloffc-012-OK12345”双击窗口,图片显示成功
我们换个账号765 发现注册码变了“黑头Sun Bird8dseloffc-012-OK765” 中间10变为了8 ,最后12345变为了765,观察发现最后应该是账号
中间应该是计算所得
发现8在00457C7F压入栈内
1 | 00457C7F | FF75 F8 | push dword ptr ss:[ebp-8] | [ebp-8]:L "8" |
向上翻看,发现00457C44和00457C4E为计算8的方式
1 2 3 4 5 | 00457C44 | B9 05000000 | mov ecx,5 | 00457C49 | 6A 00 | push 0 | 00457C4B | 6A 00 | push 0 | 00457C4D | 49 | dec ecx | 00457C4E | 75 F9 | jne ckme.457C49 | |
固定变量5,5+用户名长度
注册码计算方式为“黑头Sun Bird”+用户名长度+“dseloffc-012-OK”+用户名
CrackMe —— 005
NO.1
用PEID查壳,发现存在UPX
我们脱壳,在程序入口处停下来,单步一次,发现寄存器窗口ESP变为红色
在ESP处右键内存窗口转到,在该位置下硬件断点,F9运行
此时停在了我们的OEP
1 2 3 4 5 6 7 8 | 0044768C 55 push ebp 0044768D 8BEC mov ebp,esp 0044768F 83C4 F4 add esp,-0xC 00447692 B8 2C754400 mov eax,CKme002.0044752C ; UNICODE "+" 00447697 E8 20EAFBFF call CKme002.004060BC 0044769C A1 D88C4400 mov eax,dword ptr ds:[0x448CD8] 004476A1 8B00 mov eax,dword ptr ds:[eax] 004476A3 E8 64A4FFFF call CKme002.00441B0C |
打开LordPE
找到我们的进程,右键修复镜像大小,再次右键完整转存
接下来使用ImportRec修复IAT
输入OEP地址4768C 查找IAT,获取输入表,点击无效函数,在无效函数处删除指针->转储到文件
提示:此处不要选择剪切指针,否则会程序会异常
脱壳成功
ON.2
搜索字符串发现“注册了”字符串,进入地址向上翻看发现多个跳转
发现跳转全部跳过注册成功,将其全部NOP
运行,发现界面发生变化,破解成功
通过查看字符串发现一个疑似文件地址,跳转到汇编处发现会读取X盘内ok.txt文件
1 2 3 | 地址=00446D49 反汇编=mov edx,dumped_.446DEC 字符串= "X:\\ajj.126.c0m\\j\\o\\j\\o\\ok.txt" |
在X盘内,博主只有一个C盘,感觉到了无穷的麻烦....这部分交给正在观看本文章的你啦(^_^)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?