猫子1992 发表于 2016-3-25 11:28

CrackMe

本帖最后由 猫子1992 于 2016-3-26 14:02 编辑

最近在学C语言,老师要求我们写一个加密程序,把程序放上来给大神玩玩,想看看程序的强度,如果哪位大神破解出来了希望能分享一下思路,主要测试一下防爆破如何









Vancir 发表于 2016-7-22 11:52

菜菜总算是做出了一道cm了。好高兴!
加密算法
--------------------------------------------------
对输入的name和sn进行逐位的not运算,运算结果再和注册码的not运算形式比对。
这里name的not运算结果是【00 BC B4 B1 BE B2】【即本埠】【地址:00403010】
       sn   的not运算结果是【A0 BC AD BE BC B4 B6 B1 B8 A0 A0 AF BE AC AC A8 B0 AD BB A0】   【地址:0040303A】
然后进行相反的运算就可以了,答案之前有人贴出来啦我就不贴了。
不过PEiD查为什么查不出是C编的呀?
--------------------------------------------------
代码注释
--------------------------------------------------
0040113B|.83C4 20       |add esp,0x20
0040113E|.33C0          |xor eax,eax
00401140|>8A4C04 14   |/mov cl,byte ptr ss:      ;对name转移到12FF10处
00401144|.884C04 7C   ||mov byte ptr ss:,cl
00401148|.40            ||inc eax
00401149|.3ACB          ||cmp cl,bl
0040114B|.^ 75 F3         |\jnz short CrackMe.00401140
0040114D|.33C0          |xor eax,eax
0040114F|.90            |nop
00401150|>8A4C04 44   |/mov cl,byte ptr ss:
00401154|.888C04 AC0000>||mov byte ptr ss:,cl
0040115B|.40            ||inc eax
0040115C|.3ACB          ||cmp cl,bl
0040115E|.^ 75 F0         |\jnz short CrackMe.00401150             ;将sn转移到12FF40处
00401160|.8D4424 14   |lea eax,dword ptr ss:         ;EAX存储name地址
00401164|.8D50 01       |lea edx,dword ptr ds:          ;EDX存储ancir,也即名字地址的下一位
00401167|>8A08          |/mov cl,byte ptr ds:               ;计算输入的name的长度
00401169|.40            ||inc eax
0040116A|.3ACB          ||cmp cl,bl
0040116C|.^ 75 F9         |\jnz short CrackMe.00401167
0040116E|.2BC2          |sub eax,edx
00401170|.33C9          |xor ecx,ecx                           ;CrackMe.0040301A
00401172|.3BC3          |cmp eax,ebx                           ;判断输入的name是否为空
00401174|.7E 0F         |jle short CrackMe.00401185
00401176|>8A540C 14   |/mov dl,byte ptr ss:
0040117A|.F6D2          ||not dl                                 ;将name进行not操作
0040117C|.88540C 14   ||mov byte ptr ss:,dl
00401180|.41            ||inc ecx                              ;CrackMe.0040301A
00401181|.3BC8          ||cmp ecx,eax
00401183|.^ 7C F1         |\jl short CrackMe.00401176
00401185|>8D4424 44   |lea eax,dword ptr ss:
00401189|.8D50 01       |lea edx,dword ptr ds:
0040118C|.8D6424 00   |lea esp,dword ptr ss:
00401190|>8A08          |/mov cl,byte ptr ds:               ;计算输入的sn的长度
00401192|.40            ||inc eax
00401193|.3ACB          ||cmp cl,bl
00401195|.^ 75 F9         |\jnz short CrackMe.00401190
00401197|.2BC2          |sub eax,edx
00401199|.33C9          |xor ecx,ecx                           ;CrackMe.0040301A
0040119B|.3BC3          |cmp eax,ebx                           ;判断输入的sn长度是否为空
0040119D|.7E 10         |jle short CrackMe.004011AF
0040119F|.90            |nop
004011A0|>8A540C 44   |/mov dl,byte ptr ss:
004011A4|.F6D2          ||not dl                                 ;进行逐位not操作
004011A6|.88540C 44   ||mov byte ptr ss:,dl
004011AA|.41            ||inc ecx                              ;CrackMe.0040301A
004011AB|.3BC8          ||cmp ecx,eax
004011AD|.^ 7C F1         |\jl short CrackMe.004011A0
004011AF|>B9 18304000   |mov ecx,CrackMe.00403018                ;即本埠   ->应该是变换后的答案name
004011B4|.8D4424 14   |lea eax,dword ptr ss:         ;这里EAX取的是变换后的name地址
004011B8|>8A10          |/mov dl,byte ptr ds:
004011BA|.3A11          ||cmp dl,byte ptr ds:
004011BC|.75 1A         ||jnz short CrackMe.004011D8             ;关键的判断跳转
004011BE|.3AD3          ||cmp dl,bl                              ;判断是否逐字比较完毕
004011C0|.74 12         ||je short CrackMe.004011D4
004011C2|.8A50 01       ||mov dl,byte ptr ds:
004011C5|.3A51 01       ||cmp dl,byte ptr ds:
004011C8|.75 0E         ||jnz short CrackMe.004011D8             ;关键的判断跳转
004011CA|.83C0 02       ||add eax,0x2
004011CD|.83C1 02       ||add ecx,0x2                            ;答案存储在ecx地址中
004011D0|.3AD3          ||cmp dl,bl
004011D2|.^ 75 E4         |\jnz short CrackMe.004011B8
004011D4|>33C0          |xor eax,eax
004011D6|.EB 05         |jmp short CrackMe.004011DD
004011D8|>1BC0          |sbb eax,eax
004011DA|.83D8 FF       |sbb eax,-0x1
004011DD|>3BC3          |cmp eax,ebx
004011DF|.75 38         |jnz short CrackMe.00401219
004011E1|.B9 48304000   |mov ecx,CrackMe.00403048
004011E6|.8D4424 44   |lea eax,dword ptr ss:
004011EA|.8D9B 00000000 |lea ebx,dword ptr ds:
004011F0|>8A10          |/mov dl,byte ptr ds:               ;很显然这里就是对sn的比较
004011F2|.3A11          ||cmp dl,byte ptr ds:
004011F4|.75 1A         ||jnz short CrackMe.00401210             ;关键判断跳转
004011F6|.3AD3          ||cmp dl,bl
004011F8|.74 12         ||je short CrackMe.0040120C
004011FA|.8A50 01       ||mov dl,byte ptr ds:
004011FD|.3A51 01       ||cmp dl,byte ptr ds:
00401200|.75 0E         ||jnz short CrackMe.00401210
00401202|.83C0 02       ||add eax,0x2
00401205|.83C1 02       ||add ecx,0x2
00401208|.3AD3          ||cmp dl,bl
0040120A|.^ 75 E4         |\jnz short CrackMe.004011F0

--------------------------------------------------

SeriousSnow 发表于 2016-8-15 14:54

好像是加解密的。。。。这。是我要整的话。先有正确的用户名密码一组。然后看

00401000/$56            push esi                                 ;msvcr90.printf
00401001|.57            push edi                                 ;msvcr90.scanf
00401002|.8BF9          mov edi,ecx                              ;msvcr90.7855215C
00401004|.8BF0          mov esi,eax
00401006|.8A07          mov al,byte ptr ds:
00401008|.33C9          xor ecx,ecx                              ;msvcr90.7855215C
0040100A|.84C0          test al,al
0040100C|.74 18         je short CrackMe.00401026
0040100E|.53            push ebx
0040100F|.90            nop
00401010|>0FBEC0      /movsx eax,al
00401013|.99            |cdq
00401014|.BB 0A000000   |mov ebx,0xA
00401019|.F7FB          |idiv ebx
0040101B|.8A47 01       |mov al,byte ptr ds:
0040101E|.47            |inc edi                                 ;msvcr90.scanf
0040101F|.03CA          |add ecx,edx                           ;msvcr90.785BBB60
00401021|.84C0          |test al,al
00401023|.^ 75 EB         \jnz short CrackMe.00401010
00401025|.5B            pop ebx                                  ;CrackMe.00402130
00401026|>8A06          mov al,byte ptr ds:
00401028|.84C0          test al,al
0040102A|.74 19         je short CrackMe.00401045
0040102C|.8D6424 00   lea esp,dword ptr ss:
00401030|>0FBEC0      /movsx eax,al
00401033|.99            |cdq
00401034|.BF 0A000000   |mov edi,0xA
00401039|.F7FF          |idiv edi                              ;msvcr90.scanf
0040103B|.8A46 01       |mov al,byte ptr ds:
0040103E|.46            |inc esi                                 ;msvcr90.printf
0040103F|.03CA          |add ecx,edx                           ;msvcr90.785BBB60
00401041|.84C0          |test al,al
00401043|.^ 75 EB         \jnz short CrackMe.00401030
00401045|>803D 80304000>cmp byte ptr ds:,0x0
0040104C|.5F            pop edi                                  ;CrackMe.00402130
0040104D|.5E            pop esi                                  ;CrackMe.00402130
0040104E|.74 2D         je short CrackMe.0040107D
00401050|.B8 89888888   mov eax,0x88888889
00401055|.F7E9          imul ecx                                 ;msvcr90.7855215C
00401057|.03D1          add edx,ecx                              ;msvcr90.7855215C
00401059|.C1FA 05       sar edx,0x5
0040105C|.8BC2          mov eax,edx                              ;msvcr90.785BBB60
0040105E|.C1E8 1F       shr eax,0x1F
00401061|.03C2          add eax,edx                              ;msvcr90.785BBB60
00401063|.8BD0          mov edx,eax
00401065|.C1E2 04       shl edx,0x4
00401068|.2BD0          sub edx,eax
0040106A|.03D2          add edx,edx                              ;msvcr90.785BBB60
0040106C|.03D2          add edx,edx                              ;msvcr90.785BBB60
0040106E|.2BCA          sub ecx,edx                              ;msvcr90.785BBB60
00401070|.B8 80304000   mov eax,CrackMe.00403080               ;ASCII "95"
00401075|>0008          /add byte ptr ds:,cl
00401077|.40            |inc eax
00401078|.8038 00       |cmp byte ptr ds:,0x0
0040107B|.^ 75 F8         \jnz short CrackMe.00401075
0040107D\>C3            retn


解密后正确的到底是个什么东西,然后下次直接path

v191995501 发表于 2016-3-25 11:46

没图,应该不算是求破吧

猫子1992 发表于 2016-3-25 12:18

v191995501 发表于 2016-3-25 11:46
没图,应该不算是求破吧

自己写的东西来求破

jvy007 发表于 2016-3-25 16:40


CKNAME
_CRACKING__PASSWORD_

猫子1992 发表于 2016-3-25 19:43

jvy007 发表于 2016-3-25 16:40
CKNAME
_CRACKING__PASSWORD_

能分享一下思路吗?

别人都叫我老木 发表于 2016-3-26 12:48

本帖最后由 别人都叫我老木 于 2016-3-26 13:25 编辑

https://yunpan.cn/cqgHKRhVF6Xcs (提取码:1326) 这个不知道行不行。

猫子1992 发表于 2016-3-26 14:00

Math 发表于 2016-3-26 13:56
CKNAME和_CRACKING__PASSWORD_
你把输入的用户名和密码全部都not了然后比较,找到比较的变量一个个not过来 ...

对的,就用了一个取反的操作,算法比较简单,主要试一试防爆破,然后的话最主要是看看这个设计体系是否合理,加密算法的话以后可以直接用别人现成的

猫子1992 发表于 2016-3-26 14:09

别人都叫我老木 发表于 2016-3-26 12:48
https://yunpan.cn/cqgHKRhVF6Xcs (提取码:1326) 这个不知道行不行。

你这个不行的,如果正确的话会出现提示的OK,   OK就相当于重要数据,算法比较简单,主要就是试一试防爆破

D1peng 发表于 2016-3-29 22:09

羡慕楼主有老师教,自学小菜鸡路过 ,好难~
页: [1] 2
查看完整版本: CrackMe