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

验证:

时间: 2024-10-21 09:18:00

160个CrackMe 077 firework2的相关文章

[反汇编练习] 160个CrackMe之020

[反汇编练习] 160个CrackMe之020. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

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

原地址:http://www.cnblogs.com/lopezycj/archive/2012/05/16/unity3d_tuchao.html Unity3D吐槽1--FBX导入 Unity3d用了也不久,也就几个月时间.插件很丰富,但有的是在很贵.编辑器写脚本还是不错,挺喜欢的,写好了,就能用,只是有些数据修改了脚本就无法保存了,场景内脚本控制的变量数据.如果要改脚本,就得先记录,后处理. 从3ds max导出带有动作的fbx文件,放进Unity3d里发生了如下的如下的错误: Impor

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

[反汇编练习] 160个CrackMe之024. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

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

[反汇编练习] 160个CrackMe之023. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

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

[反汇编练习] 160个CrackMe之021. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习] 160个CrackMe之015

[反汇编练习] 160个CrackMe之015. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习] 160个CrackMe之016

[反汇编练习] 160个CrackMe之016. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习] 160个CrackMe之014

[反汇编练习] 160个CrackMe之014. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大

[反汇编练习] 160个CrackMe之008

[反汇编练习] 160个CrackMe之008. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大