160个练手CrackMe-020

来源:互联网 发布:fastdfs nginx 400 编辑:程序博客网 时间:2024/06/14 12:41

1、查壳,Delphi编写

WWPack32 1.x -> Piotr Warezak,比较简单的壳。
这里写图片描述

2、脱壳

首先要了解下Delphi程序的OEP格式。
这里写图片描述

OD载入,单步跟踪,向上跳转的地方直接在它下一行F4,慢慢跟。
当遇到一个大的JMP,基本就是OEP了。
OEP:
这里写图片描述

反汇编窗口右击,用OllyDump脱壳调试程序。

这里写图片描述

直接点脱壳,保存,方式1不行就尝试方式2。
再查壳,直接显示Delphi,双击看能不能运行。

3、DarkDe4定位按钮事件

0044A2E8  /.  55            push ebp                                 ;  Spider_Click0044A2E9  |.  8BEC          mov ebp,esp0044A2EB  |.  33C9          xor ecx,ecx0044A2ED  |.  51            push ecx0044A2EE  |.  51            push ecx0044A2EF  |.  51            push ecx0044A2F0  |.  51            push ecx0044A2F1  |.  53            push ebx0044A2F2  |.  56            push esi0044A2F3  |.  8BD8          mov ebx,eax0044A2F5  |.  33C0          xor eax,eax0044A2F7  |.  55            push ebp0044A2F8  |.  68 E4A34400   push BuLLeT_8.0044A3E40044A2FD  |.  64:FF30       push dword ptr fs:[eax]0044A300  |.  64:8920       mov dword ptr fs:[eax],esp0044A303  |.  8D55 FC       lea edx,[local.1]0044A306  |.  8B83 C8020000 mov eax,dword ptr ds:[ebx+0x2C8]0044A30C  |.  E8 FBA0FDFF   call BuLLeT_8.0042440C                   ;  获取Serial0044A311  |.  8B45 FC       mov eax,[local.1]0044A314  |.  E8 EFD6FBFF   call BuLLeT_8.00407A08                   ;  int_ser = atoi(Serial)0044A319  |.  8BF0          mov esi,eax0044A31B  |.  8B45 FC       mov eax,[local.1]0044A31E  |.  E8 5DD7FBFF   call BuLLeT_8.00407A800044A323  |.  52            push edx0044A324  |.  50            push eax0044A325  |.  8BC6          mov eax,esi0044A327  |.  99            cdq0044A328  |.  030424        add eax,dword ptr ss:[esp]               ;  sum = int_ser + int_ser0044A32B  |.  135424 04     adc edx,dword ptr ss:[esp+0x4]0044A32F  |.  83C4 08       add esp,0x80044A332  |.  52            push edx0044A333  |.  50            push eax0044A334  |.  8BC6          mov eax,esi0044A336  |.  99            cdq0044A337  |.  030424        add eax,dword ptr ss:[esp]               ;  sum += int_ser  即 int_ser * 30044A33A  |.  135424 04     adc edx,dword ptr ss:[esp+0x4]0044A33E  |.  83C4 08       add esp,0x80044A341  |.  52            push edx0044A342  |.  50            push eax0044A343  |.  8D55 F8       lea edx,[local.2]0044A346  |.  B8 06000000   mov eax,0x60044A34B  |.  E8 78D6FBFF   call BuLLeT_8.004079C8                   ;  itoa(sum)0044A350  |.  8B55 F8       mov edx,[local.2]0044A353  |.  8B83 CC020000 mov eax,dword ptr ds:[ebx+0x2CC]0044A359  |.  E8 DEA0FDFF   call BuLLeT_8.0042443C0044A35E  |.  8D55 F4       lea edx,[local.3]0044A361  |.  8B83 CC020000 mov eax,dword ptr ds:[ebx+0x2CC]0044A367  |.  E8 A0A0FDFF   call BuLLeT_8.0042440C0044A36C  |.  8B45 F4       mov eax,[local.3]0044A36F  |.  50            push eax0044A370  |.  8D55 F0       lea edx,[local.4]0044A373  |.  8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0]0044A379  |.  E8 8EA0FDFF   call BuLLeT_8.0042440C0044A37E  |.  8B55 F0       mov edx,[local.4]0044A381  |.  58            pop eax0044A382  |.  E8 6198FBFF   call BuLLeT_8.00403BE8                   ;  比较函数Strcmp(eax,edx)0044A387      75 0F         jnz XBuLLeT_8.0044A398                   ;  爆破点0044A389  |.  B2 01         mov dl,0x10044A38B  |.  8B83 FC020000 mov eax,dword ptr ds:[ebx+0x2FC]0044A391  |.  E8 669FFDFF   call BuLLeT_8.004242FC0044A396  |.  EB 11         jmp XBuLLeT_8.0044A3A90044A398  |>  8B83 D4020000 mov eax,dword ptr ds:[ebx+0x2D4]

0044A382 是比较函数,edx里面存的是正确的结果“3E74984B”,也就是软件界面提示的值。

总结下算法过程:

  • 输入Serial
  • Ser转为整数型
  • 乘以3后的结果和3E74984B比较

    所以正确的Serial = 0x3E74984B / 3 = 349276185

这里写图片描述