Crackme之Acid burn.exe
破解关键:
通过定位而nop掉关键跳转,使MessageBox()弹出GOOd
首先将程序载入OD,F9开始运行,有两种登录方式
(1)输入序列号和名称和(2)单独输入序列号
先随便输入,点击check it baby,结果弹窗弹出以下内容
此时先不要点击确定按钮,回到OD暂停程序,然后查看K窗口,因为有弹窗的出现,在OD的调用函数中去寻找MessageBox函数
K:调用堆栈,可以通过它找到调用某一个函数的位置,通常会被用于查找关键代码
根据函数的范围
可以判断出第一个MessageBox位于系统领空,而第二个位于用户领空
所以选中第二个MessageBox右键——show call 查看相应调用
0042A170 /$ 55 push ebp
0042A171 |. 8BEC mov ebp,esp
0042A173 |. 83C4 F4 add esp,-0xC
0042A176 |. 53 push ebx
0042A177 |. 56 push esi
0042A178 |. 57 push edi
0042A179 |. 8BF9 mov edi,ecx
0042A17B |. 8BF2 mov esi,edx
0042A17D |. 8BD8 mov ebx,eax
0042A17F |. E8 7CB4FDFF call <jmp.&user32.GetActiveWindow> ; [GetActiveWindow
0042A184 |. 8945 F8 mov [local.2],eax
0042A187 |. 33C0 xor eax,eax
0042A189 |. E8 12A0FFFF call Acid_bur.004241A0
0042A18E |. 8945 F4 mov [local.3],eax
0042A191 |. 33C0 xor eax,eax
0042A193 |. 55 push ebp
0042A194 |. 68 D0A14200 push Acid_bur.0042A1D0
0042A199 |. 64:FF30 push dword ptr fs:[eax]
0042A19C |. 64:8920 mov dword ptr fs:[eax],esp
0042A19F |. 8B45 08 mov eax,[arg.1]
0042A1A2 |. 50 push eax ; /Style = MB_OK|MB_APPLMODAL
0042A1A3 |. 57 push edi ; |Title = "@"
0042A1A4 |. 56 push esi ; |Text = 00000102 ???
0042A1A5 |. 8B43 24 mov eax,dword ptr ds:[ebx+0x24] ; |
0042A1A8 |. 50 push eax ; |hOwner = NULL
0042A1A9 |. E8 FAB5FDFF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
在栈帧初始部分push ebp下断点
然后运行程序,继续点击check it baby,此时程序在0042A170断点处断开,查看堆栈窗口
是谁调用了MessageBox函数
点击该字符串右键——follow in disassembler
0042FA74 |. /E9 BE000000 jmp Acid_bur.0042FB37
0042FA79 |> |8D55 F0 lea edx,[local.4]
0042FA7C |. |8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]
0042FA82 |. |E8 D1AFFEFF call Acid_bur.0041AA58
0042FA87 |. |8B45 F0 mov eax,[local.4]
0042FA8A |. |0FB600 movzx eax,byte ptr ds:[eax]
0042FA8D |. |F72D 50174300 imul dword ptr ds:[0x431750]
0042FA93 |. |A3 50174300 mov dword ptr ds:[0x431750],eax
0042FA98 |. |A1 50174300 mov eax,dword ptr ds:[0x431750]
0042FA9D |. |0105 50174300 add dword ptr ds:[0x431750],eax
0042FAA3 |. |8D45 FC lea eax,[local.1]
0042FAA6 |. |BA ACFB4200 mov edx,Acid_bur.0042FBAC ; CW
0042FAAB |. |E8 583CFDFF call Acid_bur.00403708
0042FAB0 |. |8D45 F8 lea eax,[local.2]
0042FAB3 |. |BA B8FB4200 mov edx,Acid_bur.0042FBB8 ; CRACKED
0042FAB8 |. |E8 4B3CFDFF call Acid_bur.00403708
0042FABD |. |FF75 FC push [local.1]
0042FAC0 |. |68 C8FB4200 push Acid_bur.0042FBC8 ; -
0042FAC5 |. |8D55 E8 lea edx,[local.6]
0042FAC8 |. |A1 50174300 mov eax,dword ptr ds:[0x431750]
0042FACD |. |E8 466CFDFF call Acid_bur.00406718
0042FAD2 |. |FF75 E8 push [local.6]
0042FAD5 |. |68 C8FB4200 push Acid_bur.0042FBC8 ; -
0042FADA |. |FF75 F8 push [local.2]
0042FADD |. |8D45 F4 lea eax,[local.3]
0042FAE0 |. |BA 05000000 mov edx,0x5
0042FAE5 |. |E8 C23EFDFF call Acid_bur.004039AC
0042FAEA |. |8D55 F0 lea edx,[local.4]
0042FAED |. |8B83 E0010000 mov eax,dword ptr ds:[ebx+0x1E0]
0042FAF3 |. |E8 60AFFEFF call Acid_bur.0041AA58
0042FAF8 |. |8B55 F0 mov edx,[local.4]
0042FAFB |. |8B45 F4 mov eax,[local.3]
0042FAFE |. |E8 F93EFDFF call Acid_bur.004039FC
0042FB03 |75 1A jnz short Acid_bur.0042FB1F
0042FB05 |. |6A 00 push 0x0
0042FB07 |. |B9 CCFB4200 mov ecx,Acid_bur.0042FBCC ; Congratz !!
0042FB0C |. |BA D8FB4200 mov edx,Acid_bur.0042FBD8 ; Good job dude =)
0042FB11 |. |A1 480A4300 mov eax,dword ptr ds:[0x430A48]
0042FB16 |. |8B00 mov eax,dword ptr ds:[eax] ; Acid_bur.00424090
0042FB18 |. |E8 53A6FFFF call Acid_bur.0042A170
0042FB1D |. |EB 18 jmp short Acid_bur.0042FB37
0042FB1F |> |6A 00 push 0x0
0042FB21 |. |B9 74FB4200 mov ecx,Acid_bur.0042FB74 ; Try Again!
0042FB26 |. |BA 80FB4200 mov edx,Acid_bur.0042FB80 ; Sorry , The serial is incorect !
0042FB2B |. |A1 480A4300 mov eax,dword ptr ds:[0x430A48]
0042FB30 |. |8B00 mov eax,dword ptr ds:[eax] ; Acid_bur.00424090
0042FB32 |. |E8 39A6FFFF call Acid_bur.0042A170
0042FB37 |> \33C0 xor eax,eax
可以看到有两个关键跳转,若想要成功登录,需要将jnz给nop掉,点击jnz右键——Binary——Fill with Nops。
重新运行程序,再次点击check it baby即弹出Good
注册机算法
在跳转的上面一行call处下段点,运行程序,点击check it baby 触发断点,此时查看寄存器区域中,EDX寄存器存储着刚输入的serial
堆栈区域内容如下
在EAX中存储着一个特殊序列,猜测可能是正确的序列号,然后将刚才设置的断点取消,在OD中重新运行程序,成功!!!!!
0042FA79 |> |8D55 F0 lea edx,[local.4]
0042FA7C |. |8B83 DC010000 mov eax,dword ptr ds:[ebx+0x1DC]
0042FA82 |. |E8 D1AFFEFF call Acid_bur.0041AA58 ;获取账户,字符串首地址存储在EBP-0x10处
0042FA87 |. |8B45 F0 mov eax,[local.4]
0042FA8A |. |0FB600 movzx eax,byte ptr ds:[eax]
0042FA8D |. |F72D 50174300 imul dword ptr ds:[0x431750]
0042FA93 |. |A3 50174300 mov dword ptr ds:[0x431750],eax
0042FA98 |. |A1 50174300 mov eax,dword ptr ds:[0x431750]
0042FA9D |. |0105 50174300 add dword ptr ds:[0x431750],eax
0042FAA3 |. |8D45 FC lea eax,[local.1]
0042FAA6 |. |BA ACFB4200 mov edx,Acid_bur.0042FBAC ; CW
0042FAAB |. |E8 583CFDFF call Acid_bur.00403708 ;将CA字符串存储在EBP-0x4处
0042FAB0 |. |8D45 F8 lea eax,[local.2]
0042FAB3 |. |BA B8FB4200 mov edx,Acid_bur.0042FBB8 ; CRACKED
0042FAB8 |. |E8 4B3CFDFF call Acid_bur.00403708 ;将CRACKED字符串存储在EBP-0x8处
0042FABD |. |FF75 FC push [local.1]
0042FAC0 |. |68 C8FB4200 push Acid_bur.0042FBC8 ; -
0042FAC5 |. |8D55 E8 lea edx,[local.6]
0042FAC8 |. |A1 50174300 mov eax,dword ptr ds:[0x431750]
0042FACD |. |E8 466CFDFF call Acid_bur.00406718 ;将0x431750存储的十六进制转换成字符串,地址存储在EBP-0x18处
0042FAD2 |. |FF75 E8 push [local.6]
0042FAD5 |. |68 C8FB4200 push Acid_bur.0042FBC8 ; -
0042FADA |. |FF75 F8 push [local.2]
0042FADD |. |8D45 F4 lea eax,[local.3]
0042FAE0 |. |BA 05000000 mov edx,0x5
0042FAE5 |. |E8 C23EFDFF call Acid_bur.004039AC ;字符串拼接。(EBP-0X4)+(EBP-0X18)+(EBP-0X8) 存储在ebp-0xC
0042FAEA |. |8D55 F0 lea edx,[local.4]
0042FAED |. |8B83 E0010000 mov eax,dword ptr ds:[ebx+0x1E0]
0042FAF3 |. |E8 60AFFEFF call Acid_bur.0041AA58 ;得到输入的密码
0042FAF8 |. |8B55 F0 mov edx,[local.4]
0042FAFB |. |8B45 F4 mov eax,[local.3]
0042FAFE |. |E8 F93EFDFF call Acid_bur.004039FC ;输入的密码与程序计算出来的KEY做比较
0042FB03 |75 1A jnz short Acid_bur.0042FB1F ;call的返回值不等于0则跳转到输出错误信息。
0042FB05 |. |6A 00 push 0x0
0042FB07 |. |B9 CCFB4200 mov ecx,Acid_bur.0042FBCC ; Congratz !!
0042FB0C |. |BA D8FB4200 mov edx,Acid_bur.0042FBD8 ; Good job dude =)
0042FB11 |. |A1 480A4300 mov eax,dword ptr ds:[0x430A48]
0042FB16 |. |8B00 mov eax,dword ptr ds:[eax] ; Acid_bur.00424090
0042FB18 |. |E8 53A6FFFF call Acid_bur.0042A170
0042FB1D |. |EB 18 jmp short Acid_bur.0042FB37
0042FB1F |> |6A 00 push 0x0
0042FB21 |. |B9 74FB4200 mov ecx,Acid_bur.0042FB74 ; Try Again!
0042FB26 |. |BA 80FB4200 mov edx,Acid_bur.0042FB80 ; Sorry , The serial is incorect !
0042FB2B |. |A1 480A4300 mov eax,dword ptr ds:[0x430A48]
0042FB30 |. |8B00 mov eax,dword ptr ds:[eax] ; Acid_bur.00424090
0042FB32 |. |E8 39A6FFFF call Acid_bur.0042A170
0042FB37 |> \33C0 xor eax,eax
关于只有序列号的登录
关键就在于jnz上一行的call,F7 跟进后
此时各寄存器的值为
可以看到EDX寄存器中是固定的字符串Hello Dube!
而EAX中存储的值是自己手动输入的序列号,可以看到代码中有cmp eax,edx
故猜测通过序列号登录可能是固定的序列号
160个CrackMe - 001 - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
[反汇编练习]160个CrackMe之001 - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
Crackme之Acid burn.exe相关推荐
- 【CrackMe 实战】逆向破解实战之 001 Acid burn.exe
CrackMe:是一些公开给别人尝试破解的小程序,制作 crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 cracker,想挑战一下其它 cracker 的破解实力,也可能 ...
- 160个破解练习之CrackMe 001 Acid burn
这款软件的破解相对比较简单,但内容比较齐全,首先打开软件,发现有一个弹窗如下: 这个弹窗可以使用爆破. 进入后,软件的主界面如下: 需要破解的地方有两个,一个是用户名/密码,一个是单独的序列号. 我们 ...
- 160 - 1 Acid burn
环境:Windows XP sp3 先打开,看看长什么样: OD载入,右键->查找->所有参考文本字串 找到Sorry,The serial is incorect 找到后就在反汇编窗口跟 ...
- Target - Neewbie shool 1cme(Acid Burn cme)
Target - Neewbie shool 1cme(Acid Burn cme) Obti瀗ost - 1/10 Nastroje - jen OllyDBG 1.10(ke stahnuti n ...
- 逆向project实战--Acid burn
0x00 序言 这是第二次破解 crackme 小程序,感觉明显比第一次熟练.破解过程非常顺利,差点儿是分分钟就能够找到正确的 serial,可是我们的目标是破解计算过程.以下将具体介绍. 0x01 ...
- cracked me.1. Acid burn
作为一个小菜.最近在52pojie上看了一些逆向破解的知识. 发现论坛有160个crack me.觉得不错.拿来做做. 这可把一个没基础没经验的我 弄得是稀里糊涂昏天黑地.看着前辈的经验贴,才有点懂. ...
- [反汇编练习]160个CrackMe之001
[反汇编练习] 160个CrackMe之001. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- 视频+图文+注册+机源码 | 160个CrackMe深度解析合集 | 逆向破解入门
全部合集的获取请关注微信公众号:逆向驿站 回复:160 即可获得其余合集 以下是示例文章 160个CrackMe深度解析合集-001 提倡"刨根问底",拒绝"浅尝辄止&q ...
- CrackMe_001
本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如 ...
最新文章
- 【Spring】银行转账案例
- Netty3 源代码分析 - NIO server绑定过程分析
- 皮一皮:当你在上海地铁里被夹住后...
- 获取Windwos的版本和名称 -- GetVersion|GetVersionEx
- 最全Windows下搭建go语言开发环境以及开发IDE
- jqGrid getGridParam办法
- python编程入门教程100例_Python3入门经典100例(60-70)
- 前端:高德地图快速入门使用
- 机器视觉牛人及其相关领域分类科普
- js字符串常用判断方法
- c语言编程图形并颜色,C语言图形编程(三、绘图函数1)
- MongoDB分片集群搭建
- jdbcType (null) combination
- Android使用MediaCodec进行视频编码 视频的一些基础概念介绍
- ActiveMQ消费者断开重连
- 牛客小白月赛60(A~C)题解
- Informatica元数据库解析
- jsvascript === 和==的区别
- 想转行人工智能?机会来了!!!
- 云服务器vCPU和CPU有什么区别?
热门文章
- python刷题:哥德巴赫猜想
- 年终盘点跨平台技术(Hybrid、RN、Weex、Flutter)-全栈系列
- 第十二届全国大学生信息安全竞赛-RE部分WP(目前前两题,待更)
- Redis的客户端Jedis
- MySQL基础之索引
- 信息化,不只是技术-某公司局域网改造实例(转)
- python中numpy.random.gamma()函数
- 京东数据分析软件 | 如何获取京东平台的“增长榜单”
- 向指定的excel文件中追加数据
- 安卓(Android)手机Flash Player官方下载地址