首先,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相关推荐

  1. Crackme006 - 全新160个CrackMe学习系列(图文|视频|注册机源码)

    知乎:逆向驿站 原文链接 CrackMe006 | 难度适中适合练手 |160个CrackMe深度解析(图文+视频+注册机源码) crackme006,依然是delphi的,而且没壳子,条线比较清晰, ...

  2. [反汇编练习] 160个CrackMe之024

    [反汇编练习] 160个CrackMe之024. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  3. [反汇编练习] 160个CrackMe之023

    [反汇编练习] 160个CrackMe之023. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  4. [反汇编练习] 160个CrackMe之021

    [反汇编练习] 160个CrackMe之021. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  5. 160个crackme 持续更新(1\2\3\4\6\8\9)

    最近感觉自己啥都不会吧,就算会也就是点皮毛,还是练的太少了,从160个crackme开始 慢慢来吧,从简单的开始 1.Acid burn OD动态调试一下,靠字符串定位打断点,如下 跟进这个函数可以看 ...

  6. 160个CrackMe之108 mfc程序 寻找按钮事件,代码还原(上)

    ·前言  虽然网上已经有帖子写160个CrackMe,我个人还是以正向的思路来逆向一部分的crackme,还有一些 代码还原的小技巧,挑选出这160个CrackMe中由c,c++,汇编编写的程序来来写 ...

  7. [反汇编练习]160个CrackMe之001

    [反汇编练习] 160个CrackMe之001. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  8. [反汇编练习] 160个CrackMe之025

    [反汇编练习] 160个CrackMe之025. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  9. 视频+图文+注册+机源码 | 160个CrackMe深度解析合集 | 逆向破解入门

    全部合集的获取请关注微信公众号:逆向驿站 回复:160 即可获得其余合集 以下是示例文章 160个CrackMe深度解析合集-001 提倡"刨根问底",拒绝"浅尝辄止&q ...

最新文章

  1. DevExpress 控件使用之GridControl基本属性设置
  2. Rails non browser app高级篇-capistrano/daemon部署
  3. MFC六大核心机制之一:MFC程序的初始化
  4. spring-boot项目打war包并部署到本地的tomcat容器
  5. [Swift]LeetCode113. 路径总和 II | Path Sum II
  6. 购物车及商品php代码_简单的php购物车代码
  7. 在控制台环境下调用MFC DLL崩溃的问题小结
  8. springboot json 嵌套_Java Bean Validation 2.0 (一): 对Spring Boot应用的数据验证
  9. linux上设置jar包加载顺序,SpringBoot配置加载顺序
  10. 源码分析:《Topic-to-Essay Generation with Neural Networks》
  11. python偶数统计_Python中查询后的偶数总数
  12. ddl(ddl是什么意思网络语)
  13. python科学计算环境配置_ATLAS + NumPy + SciPy + Theano 的Python科学计算环境搭建
  14. bat脚本--android adb一键截图
  15. Android延时执行事件的方法
  16. 深度思考故事2:出租司机的经济学
  17. Burp Suite进行账号密码爆破
  18. leetcode抢救
  19. 泛微OA自开发接口并发布
  20. (华师)CSMA技术的P—坚持算法规则是什么?

热门文章

  1. nuc9vxqnx_Intel NUC 9 Pro / Extreme(幽灵峡谷 / 石英峡谷)即将发售
  2. 宏基因组单个样本数据处理流程笔记
  3. 关于PostMan发送请求获得响应
  4. 如何在cPanel/WHM服务器上安装PostgreSQL
  5. TPAMI 2021 | 让时间走向二维,基于文本的视频时间定位新方法:MS-2D-TAN,兼顾速度与精度!...
  6. 入手评测 海信65e7g pro和雷鸟65r645c 选哪个
  7. DHTMLXGantt in Flutter DHTMLXGantt
  8. 抛物线的几何性质(传统几何法推导)
  9. AD18 PCB高亮
  10. HCL实验:OSPF路由汇聚