首页
社区
课程
招聘
[原创]呀呀`一个CrackMe的算法分析+注册机
发表于: 2007-1-26 08:59 12044

[原创]呀呀`一个CrackMe的算法分析+注册机

2007-1-26 08:59
12044

【破解作者】大菜一号


【破解对象】一个加了壳的CrackMe


【破解目的】1、新手稍微接确一下手动脱壳;


         2、算法的分析


【破解声明】


            声声声声明呀``~~这个CrackMe早就有人破过了``偶也是从附件上下下来的`不过可没看一句答案`````是一句也没看呀!不相信滴下面部分就别看了`早点跳出循环吧!~汗~~~`


这个CrackMe呢加了一个很垃圾的UPX壳`所以这里我们就不用工具`就稍微加强一些手脱脱壳的技术(也到时候该勤快些哩呀``不然以后吃啥?)



参考了二哥的脱壳教程(感谢二哥~)



手动脱壳时,用Olldbg载入程序,脱壳程序里面会有有好多循环。对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈(也就是知道一个跳转要往回跳了,就在它下一条码处点一下,F4执行到下一句,不要让它往回跳)。不要用Peid查入口,单步跟踪,提高手动找入口能力。程序加壳段地址 应该都会有跨段跳跃,一般都是在内存中脱壳完毕,准备运行程序,手动脱壳就是要在入口将程序Dump出来。转到入口时一般都有Popad语句和开始的PUSHAD对应。我们再这里用Od的Dump插件直接脱壳。好,手动脱壳说明就到这~


下面是手动脱壳的文本过程`不懂有个动画,不过很粗糙,要了解就将就着看吧``动画在这里也声明一下:动画过程只简短加注释,详细的下面会讲到`结合一下就行了!~



程序用OD载入后提示有壳,选否不再继续分析,我们停在这里:


00406CC0 > $  60            pushad  //这个pushad,前面说了`后面会有个popad和它对应,那就要密切关注一下这个popad了


00406CC1   .  BE 00604000   mov     esi, 00406000


00406CC6   .  8DBE 00B0FFFF lea     edi, dword ptr [esi+FFFFB000]


00406CCC   .  57            push    edi


00406CCD   .  83CD FF       or      ebp, FFFFFFFF


00406CD0   .  EB 10         jmp     short 00406CE2


00406CD2      90            nop


00406CD3      90            nop


00406CD4      90            nop


00406CD5      90            nop


00406CD6      90            nop


00406CD7      90            nop


00406CD8   >  8A06          mov     al, byte ptr [esi]


00406CDA   >  46            inc     esi


00406CDB   .  8807          mov     byte ptr [edi], al


00406CDD   .  47            inc     edi


00406CDE   >  01DB          add     ebx, ebx


00406CE0   .  75 07         jnz     short 00406CE9


00406CE2   >  8B1E          mov     ebx, dword ptr [esi]


00406CE4   .  83EE FC       sub     esi, -4


00406CE7   .  11DB          adc     ebx, ebx


00406CE9   >^ 72 ED         jb      short 00406CD8  //这个要往回跳了``我们就在下面点一下,F4到下一代码


00406CEB   .  B8 01000000   mov     eax, 1


00406CF0   >  01DB          add     ebx, ebx


00406CF2   .  75 07         jnz     short 00406CFB


00406CF4   .  8B1E          mov     ebx, dword ptr [esi]


00406CF6   .  83EE FC       sub     esi, -4


00406CF9   .  11DB          adc     ebx, ebx


00406CFB   >  11C0          adc     eax, eax


00406CFD   .  01DB          add     ebx, ebx


00406CFF   .^ 73 EF         jnb     short 00406CF0


00406D01   .  75 09         jnz     short 00406D0C


00406D03   .  8B1E          mov     ebx, dword ptr [esi]


00406D05   .  83EE FC       sub     esi, -4


00406D08   .  11DB          adc     ebx, ebx


00406D0A   .^ 73 E4         jnb     short 00406CF0


00406D0C   >  31C9          xor     ecx, ecx


00406D0E   .  83E8 03       sub     eax, 3


00406D11   .  72 0D         jb      short 00406D20


00406D13   .  C1E0 08       shl     eax, 8


00406D16   .  8A06          mov     al, byte ptr [esi]


00406D18   .  46            inc     esi


00406D19   .  83F0 FF       xor     eax, FFFFFFFF


00406D1C   .  74 74         je      short 00406D92


00406D1E   .  89C5          mov     ebp, eax


00406D20   >  01DB          add     ebx, ebx


00406D22   .  75 07         jnz     short 00406D2B


00406D24   .  8B1E          mov     ebx, dword ptr [esi]


00406D26   .  83EE FC       sub     esi, -4


00406D29   .  11DB          adc     ebx, ebx


00406D2B   >  11C9          adc     ecx, ecx


00406D2D   .  01DB          add     ebx, ebx


00406D2F   .  75 07         jnz     short 00406D38


00406D31   .  8B1E          mov     ebx, dword ptr [esi]


00406D33   .  83EE FC       sub     esi, -4


00406D36   .  11DB          adc     ebx, ebx


00406D38   >  11C9          adc     ecx, ecx


00406D3A   .  75 20         jnz     short 00406D5C


00406D3C   .  41            inc     ecx


00406D3D   >  01DB          add     ebx, ebx


00406D3F   .  75 07         jnz     short 00406D48


00406D41   .  8B1E          mov     ebx, dword ptr [esi]


00406D43   .  83EE FC       sub     esi, -4


00406D46   .  11DB          adc     ebx, ebx


00406D48   >  11C9          adc     ecx, ecx


00406D4A   .  01DB          add     ebx, ebx


00406D4C   .^ 73 EF         jnb     short 00406D3D  //这个要跳了`F4到下面


00406D4E   .  75 09         jnz     short 00406D59


00406D50   .  8B1E          mov     ebx, dword ptr [esi]


00406D52   .  83EE FC       sub     esi, -4


00406D55   .  11DB          adc     ebx, ebx


00406D57   .^ 73 E4         jnb     short 00406D3D


00406D59   >  83C1 02       add     ecx, 2


00406D5C   >  81FD 00F3FFFF cmp     ebp, -0D00


00406D62   .  83D1 01       adc     ecx, 1


00406D65   .  8D142F        lea     edx, dword ptr [edi+ebp]


00406D68   .  83FD FC       cmp     ebp, -4


00406D6B   .  76 0F         jbe     short 00406D7C


00406D6D   >  8A02          mov     al, byte ptr [edx]


00406D6F   .  42            inc     edx


00406D70   .  8807          mov     byte ptr [edi], al


00406D72   .  47            inc     edi


00406D73   .  49            dec     ecx


00406D74   .^ 75 F7         jnz     short 00406D6D  //看这`有两个跳转呢!没办法了`只好让它往回跳了`为啥?有人会说我们可以F4到下面,要往回跳再F4再到下面`这样行么`?你们试试看就知道`程序马上就运行起来了~不过可以发现00406d6b那个跳转可以跳过这里`所以就让它往回跳吧`待某一时刻就可以跳过这里了,F4到下面那个无条件跳转,让它跳


00406D76   .^ E9 63FFFFFF   jmp     00406CDE //这个


00406D7B      90            nop


00406D7C   >  8B02          mov     eax, dword ptr [edx] //跳过之后会在这


00406D7E   .  83C2 04       add     edx, 4


00406D81   .  8907          mov     dword ptr [edi], eax


00406D83   .  83C7 04       add     edi, 4


00406D86   .  83E9 04       sub     ecx, 4


00406D89   .^ 77 F1         ja      short 00406D7C  //这个要跳,F4到下面


00406D8B   .  01CF          add     edi, ecx


00406D8D   .^ E9 4CFFFFFF   jmp     00406CDE  //这个也要跳`F4再到下面


00406D92   >  5E            pop     esi


00406D93   .  89F7          mov     edi, esi


00406D95   .  B9 64000000   mov     ecx, 64


00406D9A   >  8A07          mov     al, byte ptr [edi]


00406D9C   .  47            inc     edi


00406D9D   .  2C E8         sub     al, 0E8


00406D9F   >  3C 01         cmp     al, 1


00406DA1   .^ 77 F7         ja      short 00406D9A   //要跳了`再F4


00406DA3   .  803F 01       cmp     byte ptr [edi], 1


00406DA6   .^ 75 F2         jnz     short 00406D9A


00406DA8   .  8B07          mov     eax, dword ptr [edi]


00406DAA   .  8A5F 04       mov     bl, byte ptr [edi+4]


00406DAD   .  66:C1E8 08    shr     ax, 8


00406DB1   .  C1C0 10       rol     eax, 10


00406DB4   .  86C4          xchg    ah, al


00406DB6   .  29F8          sub     eax, edi


00406DB8   .  80EB E8       sub     bl, 0E8


00406DBB   .  01F0          add     eax, esi


00406DBD   .  8907          mov     dword ptr [edi], eax


00406DBF   .  83C7 05       add     edi, 5


00406DC2   .  89D8          mov     eax, ebx


00406DC4   .^ E2 D9         loopd   short 00406D9F  //这是个循环`F4跳到下面去


00406DC6   .  8DBE 00400000 lea     edi, dword ptr [esi+4000]


00406DCC   >  8B07          mov     eax, dword ptr [edi]


00406DCE   .  09C0          or      eax, eax


00406DD0   .  74 45         je      short 00406E17


00406DD2   .  8B5F 04       mov     ebx, dword ptr [edi+4]


00406DD5   .  8D8430 086900>lea     eax, dword ptr [eax+esi+6908]


00406DDC   .  01F3          add     ebx, esi


00406DDE   .  50            push    eax


00406DDF   .  83C7 08       add     edi, 8


00406DE2   .  FF96 6C690000 call    dword ptr [esi+696C]


00406DE8   .  95            xchg    eax, ebp


00406DE9   >  8A07          mov     al, byte ptr [edi]


00406DEB   .  47            inc     edi


00406DEC   .  08C0          or      al, al


00406DEE   .^ 74 DC         je      short 00406DCC


00406DF0   .  89F9          mov     ecx, edi


00406DF2   .  79 07         jns     short 00406DFB


00406DF4   .  0FB707        movzx   eax, word ptr [edi]


00406DF7   .  47            inc     edi


00406DF8   .  50            push    eax


00406DF9   .  47            inc     edi


00406DFA      B9            db      B9


00406DFB   .  57            push    edi


00406DFC   .  48            dec     eax


00406DFD   .  F2:AE         repne   scas byte ptr es:[edi]


00406DFF   .  55            push    ebp


00406E00   .  FF96 70690000 call    dword ptr [esi+6970]


00406E06   .  09C0          or      eax, eax


00406E08   .  74 07         je      short 00406E11


00406E0A   .  8903          mov     dword ptr [ebx], eax


00406E0C   .  83C3 04       add     ebx, 4


00406E0F   .^ EB D8         jmp     short 00406DE9  //这里,看到没`那个下面的popad,我们F4直接到popad那去


00406E11   >  FF96 74690000 call    dword ptr [esi+6974]


00406E17   >  61            popad  //这个,够熟悉了吧~~


00406E18   .- E9 D3ABFFFF   jmp     004019F0  //`夸段了`让它跳



004019F0    55              push    ebp //上面就会跳到这`好了`我们已经执行过pushad和popad了,就在这里用OD的Dump插件就可以了!



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


壳脱完了`不懂?我也不懂`西西`~不懂看下动画吧!


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


算法分析:


虽然在程序点注册得不到任何错误信息`,不过正确信息总一定有吧`所以我们就


Ultra String Reference->Find ASCII->找到一个Vrey good~字眼~这分明就是成功信息嘛`呵,


往上看就整体的断在这里吧:


004015E0    6A FF           push    -1


004015E2    68 C81C4000     push    00401CC8


004015E7    64:A1 00000000  mov     eax, dword ptr fs:[0]


004015ED    50              push    eax


004015EE    64:8925 0000000>mov     dword ptr fs:[0], esp


004015F5    51              push    ecx


004015F6    53              push    ebx


004015F7    56              push    esi


004015F8    57              push    edi


004015F9    8BF9            mov     edi, ecx


004015FB    6A 01           push    1


004015FD    E8 74030000     call    ---->这个地方取name了


00401602    8D4C24 0C       lea     ecx, dword ptr [esp+C]


00401606    E8 5F030000     call   


0040160B    8B47 68         mov     eax, dword ptr [edi+68]--------->把name传给eax


0040160E    C74424 18 00000>mov     dword ptr [esp+18], 0


00401616    8B48 F8         mov     ecx, dword ptr [eax-8]---------->name长度传给ecx了


00401619    85C9            test    ecx, ecx


0040161B    7F 12           jg      short 0040162F


0040161D    68 18314000     push    00403118                        


00401622    8D4F 60         lea     ecx, dword ptr [edi+60]


00401625    E8 3A030000     call   


0040162A    E9 0C010000     jmp     0040173B


0040162F    8B57 64         mov     edx, dword ptr [edi+64]-------->假码传给edx



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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
2
不能超过1024000字节`?`西西
分开传了`
上传的附件:
2007-1-26 09:03
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
3
```
2007-1-26 09:04
0
雪    币: 220
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
支持一下!
btw:这个字符数组赋值用的...
2007-1-26 09:31
0
雪    币: 370
活跃值: (78)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
5
传说中的UPX?
2007-1-26 10:28
0
雪    币: 297
活跃值: (26)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
6
写得很详尽,支持~~~
2007-1-26 11:39
0
雪    币: 46
活跃值: (38)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
7
学习
2007-1-26 17:31
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好东东好东东,study,study
2007-1-28 13:59
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
9
跳出循环用IDA最爽了
2007-1-28 18:42
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主,你有没有二哥的脱壳教程呀,在DFCG上没有权限下载不了.可不可提供下载呀,谢谢先!!!!!!!
2007-1-29 11:09
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习了一下
谢谢楼主的详尽分析。
辛苦了
2007-1-29 14:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
我是只会用别人成果的超菜啦, 下下来学习下. 谢谢楼主
2007-2-1 16:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢楼主提供动画,很受用!
2007-2-3 20:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
经典,谢谢分享
2007-2-4 04:17
0
雪    币: 4441
活跃值: (805)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
谢谢楼主,非常适应我学习
2007-2-4 11:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习以下,自己不会的东西还很多呢,慢慢学习了
2007-2-4 11:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
写得好详细哦!对偶的帮助很大!  谢谢!!!!!!!!!
2007-2-6 14:39
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
算学习了一点了~
2007-6-14 20:51
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
感谢楼主的帮助!
2007-6-24 12:32
0
雪    币: 347
活跃值: (30)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
20
我要说明一点:upx一点都不垃圾,是压缩壳的王者,你说那个是垃圾,只能说明你遇见的是那个CM的作者改的入口什么的,还有,这个又是个密码表,这样的算法偶虽然能看懂,但是不会写注册机
2007-7-16 15:00
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
21
呃``老贴又被灌上来了``i
汗`
2007-7-16 15:24
0
游客
登录 | 注册 方可回帖
返回