JoyChou 发表于 2012-5-14 01:26

一个真的适合新手的Crackme

脚本已经注明出处 by willJ
作者:————JoyChou
查壳是yoda's Protector 1.03.2
然后脚本我已经打包了,用脚本脱壳后会有个自校验,然后自己F12调用堆栈,nop掉那个“雅蠛蝶就ok了”

这里就由菜鸟我简单说下这个CM的不脱壳破解。
F12调用堆栈后,来到这,其实看到下面的提示就知道可以通过下断点可以关键的地方
在77D6657A    C2 1000         retn 10处下段,单步到程序领空

然后观察到字符串了,关键的地方也就找到了

004011AC   .FFD6          call esi                                          ; \获取用户名,长度返回给eax
004011AE   .6A 09         push 9                                              ; /Count = 9
004011B0   .8D4424 0C   lea eax,dword ptr ss:                        ; |
004011B4   .50            push eax                                          ; |Buffer
004011B5   .68 EB030000   push 3EB                                          ; |ControlID = 3EB (1003.)
004011BA   .57            push edi                                          ; |hWnd
004011BB   .FFD6          call esi                                          ; \获取假码,长度依然给eax
004011BD   .8D7424 08   lea esi,dword ptr ss:                        ;假码
004011C1   .8D4C24 1C   lea ecx,dword ptr ss:                     ;用户名
004011C5   .E8 36FEFFFF   call Crackwho.00401000                              //这里就是算法,进去看就知道了,算法了,很简单的,还是比较适合新手,这里我就把注册机贴出来吧。
004011CA   .5E            pop esi
004011CB   .6A 00         push 0
004011CD   .68 3C9A4000   push Crackwho.00409A3C
004011D2   .85C0          test eax,eax
004011D4   .74 20         je short Crackwho.004011F6
004011D6   .68 449A4000   push Crackwho.00409A44                              ;UNICODE "Congratulation"
004011DB   .57            push edi
004011DC   .FF15 FC804000 call dword ptr ds:
004011E2   .33C0          xor eax,eax
004011E4   .5F            pop edi
004011E5   .8B4C24 28   mov ecx,dword ptr ss:
004011E9   .33CC          xor ecx,esp
004011EB   .E8 D1000000   call Crackwho.004012C1
004011F0   .83C4 2C       add esp,2C
004011F3   .C2 1000       retn 10
004011F6   >68 649A4000   push Crackwho.00409A64                              ;UNICODE "Sorry,You are wrong"
004011FB   .57            push edi
004011FC   .FF15 FC804000 call dword ptr ds:

进入call到这发现算法,这只是第一重循环,我想下面的7次循环应该也没问题了
0040103E|.0FB701      movzx eax,word ptr ds:                         ;eax指向用户名
00401041|.0FB71424      movzx edx,word ptr ss:                         ;edx指向syclover
00401045|.33C2          xor eax,edx                                       ;第一位用户名和‘s’异或
00401047|.99            cdq
00401048|.57            push edi
00401049|.BF 1A000000   mov edi,1A
0040104E|.F7FF          idiv edi                                          ;异或的结果与1A的余数给edx
00401050|.0FB741 02   movzx eax,word ptr ds:                     ;此时将假码第二位给eax,准备进行下一次循环
00401054|.6A 09         push 9                                              ; /Arg3 = 00000009
00401056|.56            push esi                                          ; |Arg2
00401057|.51            push ecx                                          ; |Arg1
00401058|.83C2 41       add edx,41                                          ; |余数加41
0040105B|.66:8911       mov word ptr ds:,dx                            ; |结果放回ecx



用户名:JoyChou
注册码:FWAVHZQK
PS:当看到出现一个字符串:syclover就可以猜测注册码是8位的。此题是明码比较的,菜鸟就装B的吧算法写了出来,忘老鸟勿喷。


算法:
用户名每一位和syclover十六进制异或,结果%1A,再+0x41,结果转字符
换成十进制就是,结果%26,再加上65

由于菜鸟只会C语言,所以只能写个苦逼的C程序,忘大牛见怪
#include <stdio.h>

int main(void)
{
        char name;
        int i, c;
        char temp = "syclover";
        char key;
       
        printf("input your name:");
        gets(name);
       
       
       
        for (i = 0; i < 8; i++)
        {
                key = ( (name ^ temp)%26 ) + 65;
        }
        key= '\0';
       
        printf("the key is:   ");
        puts(key);
       
        printf("\n");
       
        c=getchar();
       
        return 0;
}

JoyChou 发表于 2012-5-14 01:32

菜鸟第一次写这个,好紧张

Kavia 发表于 2012-5-14 01:40

火速前来膜拜!

JoyChou 发表于 2012-5-14 01:44

现在看了下,写得太不详细了,额。可耻的匿了,睡觉去了。睡觉前先膜拜下J大牛

502468471 发表于 2012-5-14 10:13

学习下!!!

willJ 发表于 2012-5-14 10:38

可以讲讲那个壳的手动脱法,写得不错

Thend 发表于 2012-5-14 13:26

膜拜楼主 。 呵呵

leeyeah93 发表于 2012-5-14 13:34

菜鸟学习了

Mario 发表于 2012-5-14 15:34

脚臭带我算法分析...教我写C语言程序....

hsj840119 发表于 2012-5-14 16:23

分析的不错···谢谢分享!
页: [1] 2 3 4
查看完整版本: 一个真的适合新手的Crackme