首页
社区
课程
招聘
[原创]算法分析入门之--告别爆破
发表于: 2005-1-29 17:30 25470

[原创]算法分析入门之--告别爆破

2005-1-29 17:30
25470

不要以为你一次就可以搞明白 就是搞十次 二十次 你一定要彻底搞明白才能有大收获! 切记!

    附件下载:http://yjtv.900y.com/crackme1.rar
    课后练习:http://yjtv.900y.com/Key-Crackme2.rar

    当你仔细  用心  耐心  的看完此文  之后   并按照注释做  你就可以入门算法了   (不会吧  看完此文就能入门算法  ^_^  那不是很吓人)   就是就是  太危险了    看来过两天我可能会删除此贴   *&^%%$$#$  !

    建议动态分析算法  动态跟踪分析看教程  也不负我熬夜写的这篇文章   希望你看此文之后有进步  步入算法圣殿  步入高手行列   回头再回个贴  那我可就傻笑了!(他们说的  呵呵  ^_^  高级算法再慢慢进步吧  先进门了再说)  文章我会继续写  大家共同进步!

    要想分析循环  不但要能看懂汇编代码  能看懂汇编代码分析不了算法的人大有人在   关键要在于  知道它的操作数(就是操作对象)的值是从哪来的   有的直接你输入的用户名、注册码或用户名注册码位数 当然还有常数分析是否是常数最直接的方法就是改变用户名和注册码


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (34)
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
用Code标签将代码括住,格式还不是太理想。
顺便将附件转到本地,怕以后整理时你给的链接失效。

附件:crackme1.rar
2005-1-29 18:05
0
雪    币: 169
活跃值: (245)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
谢谢老大帮助更改 呵呵 真不好意思!  给你添麻烦了 下次我注意!
2005-1-29 19:21
0
雪    币: 204
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看来,愿意深入下去的不多啊。不过也难怪,就是用高级语言设计一个简单的算法,在汇编下分析也不容易。
2005-1-30 15:01
0
雪    币: 97697
活跃值: (200824)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持原创!
2005-1-30 15:04
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
00401168   >  0FBE81 F32040>MOVSX EAX,BYTE PTR DS:[ECX+4020F3]       ;  像这样 DS:[ECX+4020F3]  的式子  一定要知道大都是取一位用户名、注册码或密码表(密码表是什么?  狂晕 我表达能力欠佳  说了你也不一定明白  你问表达能力好点的)  想知道它到底取什么吗? 呵呵教你一种方法  用  d  4020f3  看看   为什么不d ecx 呢   当然我也d 了  可
它是 00000000呀 有用吗?当然有用 好了 d 4020f3之后 看到什么?  看到你输入的注册名了吧  !知道这句是干什么的了吗?还不知道  那你看看OD下面的提示吧  是不是有你输入用户名的第一位呀!
0040116F   .  83F8 20       CMP EAX,20                               ;  
00401172   .  74 07         JE SHORT Crackme1.0040117B               ;  上面一个比较20  也就是用户名大于20的话 20位后就不参加运算了

这里好像不是说用户名大于20
而是看用户名里有没有空格
2005-1-30 18:05
0
雪    币: 169
活跃值: (245)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
谢谢  指出问题! 
2005-1-30 18:13
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
可能是太累了

小弟在后面 还跟了好久

004011B9   .  6A 32         PUSH 32                                  ; /Count = 32 (50.)
004011BB   .  68 57214000   PUSH Crackme1.00402157                   ; |Buffer = Crackme1.00402157
004011C0   .  68 C9000000   PUSH 0C9                                 ; |ControlID = C9 (201.)
004011C5   .  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
004011C8   .  E8 5E000000   CALL <JMP.&USER32.GetDlgItemTextA>       ; \GetDlgItemTextA      这个像是取输入注册码的吧  我没跟到这
004011CD   .  83F8 00       CMP EAX,0
004011D0   .  74 1D         JE SHORT Crackme1.004011EF
004011D0   .  74 1D         JE SHORT Crackme1.004011EF
004011D2   .  33C9          XOR ECX,ECX
004011D4   >  0FBE81 572140>MOVSX EAX,BYTE PTR DS:[ECX+402157]
004011DB   .  0FBE99 BB2140>MOVSX EBX,BYTE PTR DS:[ECX+4021BB]
004011E2   .  3BC3          CMP EAX,EBX
004011E4      . /75 09     jnz short Crackme1.004011EF

在这里还有一跳

004011C8   .  E8 5E000000   CALL <JMP.&USER32.GetDlgItemTextA>       ; \GetDlgItemTextA      这个像是取输入注册码的吧  我没跟到这

这个call 将会进行 serianl  比较

哈哈哈哈哈哈哈哈

可惜我有点懒  还没有跟出来
2005-1-30 18:18
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
004011D4   >  0FBE81 572140>MOVSX EAX,BYTE PTR DS:[ECX+402157]
004011DB   .  0FBE99 BB2140>MOVSX EBX,BYTE PTR DS:[ECX+4021BB]

刚才又试了一下  
4021BB  这里面是这册码了

献丑了
2005-1-30 18:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
998
10
或告诉破解也行,谢谢!
2005-1-31 21:37
0
雪    币: 440
活跃值: (29)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
奇怪了,为什么我的跟不进呢.我输入名字和SN后,到了这一步后
0040114D   .  83F8 00       CMP EAX,0                                ; 我的机子这里的eax显示为1,可是我明胆输了dahaij呀,不明白.
00401150   .  0F84 99000000 JE Crackme1.004011EF                     ;  
00401156   .  83F8 04       CMP EAX,4                                ;  是否大于4
00401159   .  0F82 90000000 JB Crackme1.004011EF
2005-1-31 22:44
0
雪    币: 440
活跃值: (29)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
我是在xpsp2和OD1.10中文版的上面调试的.为什么会出现这样的现象呢.楼主你是在什么环境下跟的呀.
2005-1-31 23:34
0
雪    币: 440
活跃值: (29)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
呵呵,晕..............一个我不得不狂晕的事情,我在下的中文OD1.1调试不了,而加密解密光盘提供的OD1.09却可以调试出来,我想知道为什么.是1.1的版本有问题吗.......有没有高手出来解释一下.
2005-1-31 23:46
0
雪    币: 225
活跃值: (146)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
14
最初由 dahaij 发布
奇怪了,为什么我的跟不进呢.我输入名字和SN后,到了这一步后
0040114D . 83F8 00 CMP EAX,0 ; 我的机子这里的eax显示为1,可是我明胆输了dahaij呀,不明白.
00401150 . 0F84 99000000 JE Crackme1.004011EF ;
00401156 . 83F8 04 CMP EAX,4 ; 是否大于4
00401159 . 0F82 90000000 JB Crackme1.004011EF


我好像在流行时尚里回了你的问题。实际没问题啊。我用的是flyod,xpsp1
2005-2-2 11:12
0
雪    币: 169
活跃值: (245)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
我也XP SP2 的环境呀!
2005-2-2 17:35
0
雪    币: 207
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不错,很感谢~~
2005-3-18 20:18
0
雪    币: 200
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
00401174   .  6BC0 04       IMUL EAX,EAX,4                           ;  EAX的值是在40116f处赋值的  可以看到是依次取的用户名的ASC码  像这样的句子破解过程中可能会经常用到  要多分析两遍  彻底搞明白 这里把上面取的ASC码*4  给EAX

EAX应该是在401168处赋值吧!40116F处只是EAX-20吧,只是影响标志寄存器,EAX的值不变的!
2005-3-24 19:20
0
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
晕哦  跟了3个小时才写好了  破解好辛苦啊
谁能讲讲变量名要怎么写才又能和反汇编后的一致  然后又具有可读性吗  下面那些象垃圾堆里弄出来的 _-##

int _tmain(int argc, _TCHAR* argv[])
{
        int length,eax,ebx,esi,i;  
        char szUser[20],szPwd[20];
        char s[30];

        eax=0;
        ebx=0;
        esi=0;
        i=0;
        printf("input user\n");
        scanf("%s",szUser);

        length=strlen(szUser);
        printf("length=%d\n",length);
        for(i=0;i<length;i++)
        {
                   eax=szUser[i];   //asicc转10进制
                   if(eax<20)
                {       
                        printf("error");
                        exit;
                }
                   eax=eax*4;
                  ebx=ebx+eax;
                   esi=ebx;
        }

        if(esi==0)
        {
                printf("esi<0\n");
                exit;
        };

        //-----------------------------------------------
        ebx=0x654789;  
        for(i=length-1;i>-1;i--)   
        {
                  eax=szUser[i];  //asicc码转成10进制的
                  ebx--;
                  eax=ebx*2;
                  ebx=ebx+eax;
                  ebx--;
               
        }

        sprintf(s,"BS-%LX-%lu",ebx,esi);
        printf("%s",s);
        getchar();
        getchar();

        return 0;
}
2005-5-2 22:00
0
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
课后练习米有了 楼主再放上来下好不  跟asm写的比较不吃力
2005-5-2 22:06
0
雪    币: 205
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
我调试的注册码是:
NAME:ZJXTE75
CN:BS-613A0E4F-2692

希望多出精品

http://washcn.com
2005-5-17 22:00
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
004011A3   . 68 BB214000   PUSH Crackme1.004021BB      ; |s = Crackme1.004021BB
004011A8   . E8 6C000000   CALL <JMP.&USER32.wsprintfA>   ;断在此
004011AD   . 58             POP EAX
004011AE   . 58             POP EAX    ;  Crackme1.004020C7:真码送EAX
004011AF   . 58             POP EAX
004011B0   . 58             POP EAX
2005-6-12 00:12
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
我喜欢这样的
2005-6-12 21:44
0
雪    币: 328
活跃值: (925)
能力值: ( LV9,RANK:1010 )
在线值:
发帖
回帖
粉丝
23
支持一下!
2005-6-17 08:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
楼主,附件不能下载呀
2005-6-17 13:04
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
不错
的确特别的详细
收藏啦
谢谢楼主哦

辛苦啦
这么照顾我们新手
2005-7-5 15:09
0
游客
登录 | 注册 方可回帖
返回
//