CrackMe
本帖最后由 猫子1992 于 2016-3-26 14:02 编辑最近在学C语言,老师要求我们写一个加密程序,把程序放上来给大神玩玩,想看看程序的强度,如果哪位大神破解出来了希望能分享一下思路,主要测试一下防爆破如何
菜菜总算是做出了一道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
--------------------------------------------------
好像是加解密的。。。。这。是我要整的话。先有正确的用户名密码一组。然后看
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
没图,应该不算是求破吧
自己写的东西来求破
CKNAME
_CRACKING__PASSWORD_ jvy007 发表于 2016-3-25 16:40
CKNAME
_CRACKING__PASSWORD_
能分享一下思路吗? 本帖最后由 别人都叫我老木 于 2016-3-26 13:25 编辑
https://yunpan.cn/cqgHKRhVF6Xcs (提取码:1326) 这个不知道行不行。 Math 发表于 2016-3-26 13:56
CKNAME和_CRACKING__PASSWORD_
你把输入的用户名和密码全部都not了然后比较,找到比较的变量一个个not过来 ...
对的,就用了一个取反的操作,算法比较简单,主要试一试防爆破,然后的话最主要是看看这个设计体系是否合理,加密算法的话以后可以直接用别人现成的 别人都叫我老木 发表于 2016-3-26 12:48
https://yunpan.cn/cqgHKRhVF6Xcs (提取码:1326) 这个不知道行不行。
你这个不行的,如果正确的话会出现提示的OK, OK就相当于重要数据,算法比较简单,主要就是试一试防爆破 羡慕楼主有老师教,自学小菜鸡路过 ,好难~
页:
[1]
2