160个CrackMe 077 firework2
首先,PEID查壳
是一个Delphi程序
伪码检验:
弹出错误对话框,于是去OD中,查找文本字符串:
可以看到,在OD中字符串有点乱码,果然OD不太适用于处理Delphi的程序。
推荐一个极其强大的Delphi反汇编工具DeDe。
下面我们的思路就是用它来打开程序,找到程序的关键点,然后再OD中动态调试,破解程序。
OK,用DeDe 打开程序: 点击过程:
关于DeDe的使用
找到关键位置:
Button1Click对应的正是用户点击OK按钮,双击后我们可以在DeDe看到代码:
仅仅这样看代码我们很难分析出序列号算法,所以我们还是放到OD中去,找到函数的入口地址:
004416EC 55 push ebp
OD中Crtl+G过去:
在函数头部F2下断,然后F9运行起来,输入伪码
开始F8对代码进行分析,注意将每一个Call指令都当做是黑箱进行,分析出了程序的大致流程如下:
00441706 |. 8D55 FC lea edx,[local.1] 00441709 |. 8B83 C8020000 mov eax,dword ptr ds:[ebx+0x2C8] 0044170F |. E8 901AFEFF call fireworx.004231A4 ; ;计算serial的长度 00441714 |. 8B45 FC mov eax,[local.1] 00441717 |. 50 push eax 00441718 |. 8D55 F4 lea edx,[local.3] 0044171B |. 8B83 C4020000 mov eax,dword ptr ds:[ebx+0x2C4] 00441721 |. E8 7E1AFEFF call fireworx.004231A4 ; ;计算name字符串的长度 00441726 |. FF75 F4 push [local.3] 00441729 |. 8D55 F0 lea edx,[local.4] 0044172C |. 8B83 C4020000 mov eax,dword ptr ds:[ebx+0x2C4] 00441732 |. E8 6D1AFEFF call fireworx.004231A4 00441737 |. FF75 F0 push [local.4] 0044173A |. 68 BC174400 push fireworx.004417BC ; ASCII 36,"25" 0044173F |. 68 C8174400 push fireworx.004417C8 ; UNICODE "g" 00441744 |. 68 D4174400 push fireworx.004417D4 ; UNICODE "祝" 00441749 |. 8D45 F8 lea eax,[local.2] 0044174C |. BA 05000000 mov edx,0x5 00441751 |. E8 9E23FCFF call fireworx.00403AF4 ; ;序列号生成算法 00441756 |. 8B55 F8 mov edx,[local.2] ; ;serila算法后的正确字符串 00441759 |. 58 pop eax ; ;用户输入的字符串 0044175A |. E8 E523FCFF call fireworx.00403B44 ; 字符串比较 0044175F 75 17 jnz short fireworx.00441778 ; ;返回值等于0说明匹配成功,不等于0说明失败
这部分的堆栈,OD的识别有些乱,我们通过数据窗口跟随,得到值。
0044173A |. 68 BC174400 push fireworx.004417BC ; ASCII 36,"25" 625 0044173F |. 68 C8174400 push fireworx.004417C8 ; UNICODE "g" g 00441744 |. 68 D4174400 push fireworx.004417D4 ; UNICODE "祝" 72
之后我们进入序列号生成算法:
00403AF7 . 50 push eax 00403AF8 . 89D3 mov ebx,edx 00403AFA . 31C0 xor eax,eax ; ;循环变量edx=5进入循环 00403AFC > 8B4C94 10 mov ecx,dword ptr ss:[esp+edx*4+0x10] 00403B00 . 85C9 test ecx,ecx ; fireworx.0041E530 00403B02 . 74 03 je short fireworx.00403B07 00403B04 . 0341 FC add eax,dword ptr ds:[ecx-0x4] 00403B07 > 4A dec edx ; ;edx-- 00403B08 .^ 75 F2 jnz short fireworx.00403AFC 00403B0A . E8 69FDFFFF call fireworx.00403878 00403B0F . 50 push eax 00403B10 . 89C6 mov esi,eax 00403B12 > 8B449C 14 mov eax,dword ptr ss:[esp+ebx*4+0x14] 00403B16 . 89F2 mov edx,esi ; ;循环变量ebx=5进入循环 00403B18 . 85C0 test eax,eax 00403B1A . 74 0A je short fireworx.00403B26 00403B1C . 8B48 FC mov ecx,dword ptr ds:[eax-0x4] 00403B1F . 01CE add esi,ecx ; fireworx.0041E530 00403B21 . E8 86ECFFFF call fireworx.004027AC ; ;字符串拼接函数 00403B26 > 4B dec ebx ; ;ebx-- 00403B27 .^ 75 E9 jnz short fireworx.00403B12 00403B29 . 5A pop edx ; ;序列号已经生成 00403B2A . 58 pop eax ; 0018F4A4 00403B2B . 85D2 test edx,edx 00403B2D . 74 03 je short fireworx.00403B32 ; ;整理栈中数据
实话说,看到这个我是有点懵B的,之后多进行了几组伪码测试,我找到了规律之后再去分析代码就相对简单了,可见汇编基础的重要性。
算法就是name*2+625g72,就是一个字符串的拼接操作,只不过没有封装成函数,吓唬人罢了。
写注册机:
python:
name=raw_input("Please input your name") serial=name+name+'625g72' print serial
验证:
转载于:https://www.cnblogs.com/Space-of-Bruce/p/5559672.html
160个CrackMe 077 firework2相关推荐
- Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)
知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...
- [反汇编练习] 160个CrackMe之024
[反汇编练习] 160个CrackMe之024. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- [反汇编练习] 160个CrackMe之023
[反汇编练习] 160个CrackMe之023. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- [反汇编练习] 160个CrackMe之021
[反汇编练习] 160个CrackMe之021. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- 160个crackme 持续更新(1\2\3\4\6\8\9)
最近感觉自己啥都不会吧,就算会也就是点皮毛,还是练的太少了,从160个crackme开始 慢慢来吧,从简单的开始 1.Acid burn OD动态调试一下,靠字符串定位打断点,如下 跟进这个函数可以看 ...
- 160个CrackMe之108 mfc程序 寻找按钮事件,代码还原(上)
·前言 虽然网上已经有帖子写160个CrackMe,我个人还是以正向的思路来逆向一部分的crackme,还有一些 代码还原的小技巧,挑选出这160个CrackMe中由c,c++,汇编编写的程序来来写 ...
- [反汇编练习]160个CrackMe之001
[反汇编练习] 160个CrackMe之001. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- [反汇编练习] 160个CrackMe之025
[反汇编练习] 160个CrackMe之025. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...
- 视频+图文+注册+机源码 | 160个CrackMe深度解析合集 | 逆向破解入门
全部合集的获取请关注微信公众号:逆向驿站 回复:160 即可获得其余合集 以下是示例文章 160个CrackMe深度解析合集-001 提倡"刨根问底",拒绝"浅尝辄止&q ...
最新文章
- DevExpress 控件使用之GridControl基本属性设置
- Rails non browser app高级篇-capistrano/daemon部署
- MFC六大核心机制之一:MFC程序的初始化
- spring-boot项目打war包并部署到本地的tomcat容器
- [Swift]LeetCode113. 路径总和 II | Path Sum II
- 购物车及商品php代码_简单的php购物车代码
- 在控制台环境下调用MFC DLL崩溃的问题小结
- springboot json 嵌套_Java Bean Validation 2.0 (一): 对Spring Boot应用的数据验证
- linux上设置jar包加载顺序,SpringBoot配置加载顺序
- 源码分析:《Topic-to-Essay Generation with Neural Networks》
- python偶数统计_Python中查询后的偶数总数
- ddl(ddl是什么意思网络语)
- python科学计算环境配置_ATLAS + NumPy + SciPy + Theano 的Python科学计算环境搭建
- bat脚本--android adb一键截图
- Android延时执行事件的方法
- 深度思考故事2:出租司机的经济学
- Burp Suite进行账号密码爆破
- leetcode抢救
- 泛微OA自开发接口并发布
- (华师)CSMA技术的P—坚持算法规则是什么?
热门文章
- nuc9vxqnx_Intel NUC 9 Pro / Extreme(幽灵峡谷 / 石英峡谷)即将发售
- 宏基因组单个样本数据处理流程笔记
- 关于PostMan发送请求获得响应
- 如何在cPanel/WHM服务器上安装PostgreSQL
- TPAMI 2021 | 让时间走向二维,基于文本的视频时间定位新方法:MS-2D-TAN,兼顾速度与精度!...
- 入手评测 海信65e7g pro和雷鸟65r645c 选哪个
- DHTMLXGantt in Flutter DHTMLXGantt
- 抛物线的几何性质(传统几何法推导)
- AD18 PCB高亮
- HCL实验:OSPF路由汇聚