欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

冷雨飘心的CrkMe2自战解说以及关于加密算法RC5,请指教 (4千字)

冷雨飘心的CrkMe2自战解说以及关于加密算法RC5,请指教 (4千字)

首先声明:我写crackme的目的不是想难倒任何人,也不是用于任何水平测试,只是想把自己一点幼稚的想法通过他与同好者分享.

        我的crkMe2以及RC5算法[自战解说]
                --嘿嘿,看大家这么轻松就破了,我自己也来凑热闹

完成
        前言
;======================================================================
crack和保护就象矛和盾,只有研究保护才能更有效的crack,isn't it?
最近没有时间破解那些大东西,只好研究一下保护,这过程中感觉到欠缺的知识太多
看来得学习一阵子了...
这个crackme只是演示一下密码学的应用,如果不知道这个可逆的话,穷举攻击是很困难的
本来还是想加一点anti-trw or SICE的代码和花指令,还有内存校验防止爆破的东东,可
自己时间有限,这个东东用一下午来写,调试又用了2个小时,(我用的是纯汇编),结果还有BUG!~_~
最可惜的是我花费一多半时间搞的DDraw画面还和一些设置冲突无法运行.
当然为了不浪费大家的时间也没有必要把所有的保护全放进来,所以把所有条件都给出了,
计算注册码仅仅是求逆的过程,重点在于考察对于简单算法的了解,实际应用不可能如此简单!
呵呵不废话了,还是进入正文:
;=======================================================================
RC5是由 Rivest(RSA的发明者之一,还设计了许多加密算法,崇拜~_~)设计的一种序列密码算法,只
用了几种最简单的的运算(XOR,ADD,sub和LOOP)但是统计特性很好,在加密多轮后(15轮以上)可以有
效抗击穷举攻击.这里讨论64位分组,为什么?呵呵,便于计算机实现,我的crkme2就是个64位分组最简
单的情形.
原理:
将64位分为两个各32位分组A,B,准备加密X轮,需密钥相关32位字数目2X+2个设为S[0],S[1]...
加密:
A+=S[0]
B+=S[1]
for (i=1 to i=X)
A=((A xor B)<<B)+S[2i]

output:-->A和B

解密:
for (i=X to i=1)
B=((b-S[2i+1])>>A) Xor A
A=((A-S[2i])>>B) xor B
B-=S[1]
A-=S[0]
呵呵,谁说密码学全部难啊,这个够简单罢,呵呵,好就用他来保护我的crkme2:
RC5struct    STRUC
turn    dd 8
cont    dd 0
S0        dd " CCG"  ;密钥全部给出了实际上完全可以隐藏密钥只发给注册用户
S1        dd "&BCG"    ;再计算这个密钥分组,注册码里可以有一部分是这个密钥
S2        dd "Good"    ;然后根据一定的规则初始化密钥相关分组
S3        dd "hehe"    ;这个是大家娱乐的,就这样吧
S4        dd "hehe"    ;另外还可以存放关键部分数据,用他加密特征字,然后
S5        dd "hehe"    ;适当时用密钥解密,如果结果与特征字不同不同就证明遭到
S6        dd "hehe"    ;暴力修改或者损坏,失败
S7        dd "CRYP"
S8        dd "CRYP"
S9        dd "CRYP"
S10        dd "CRYP"
S11        dd "love"
S12        dd "love"
S13        dd "love"
S14        dd "love"
S15        dd "myth"
S16        dd "myth"
S17        dd "myth"
        dd 4  dup(0)
RC5struct    ENDS
我的crackme2的关键就是由用户名计算得到一个32位字,另外一个B也给出了,(实际上可以只发给注
册用户),作为明文.而将注册码部分作为密文,然后解密则应必定与明文相同(这里可以对密钥相关的S0..
是否被修改做出反映,可以CRC的,呵呵这次就不加了),这里得到的结果与用户名计算的特征字比较
不同就失败,呵呵.
如何计算注册码?写这个crackme主要是想测试一下有没有人试图穷举攻击,如果是,呵呵,很不幸,上当了!
实际上所有资料都已经给出,直接逆运算不就好了,呵呵,简单吧!!!对明文加密得到的密文就是注册码,没有
任何难度!
当然实际软件保护不可能这么容易,他可以隐藏一个密文(只发给注册用户)或者密钥部分的生成作些手脚,使你不容易分析,也可以导致得不到正确的注册码便无法作注册机,还可以用来作CRC保护...(类似winhex?),
当然对于这种保护来说,写注册机和追注册码一样"简单".
附加密和解密函数(我自己写的,呵呵丑陋不要骂我):
加密:
RC5MainCall_Encrypt    PROC   
            add eax,rc5key.S0      ;in eax & edx
            add edx,rc5key.S1
            lea esi,rc5key.S2
            mov edi,rc5key.cont        
        @gRc5encrypt:
            inc edi
            
            mov ecx,edx
            xor eax,edx
            and ecx,1fh    ;to get the shift result
            rol eax,cl
            add eax,[esi]
            add esi,4
            mov ecx,eax
            xor edx,eax
            and ecx,1fh
            rol edx,cl
            add edx,[esi]
            add esi,4
            cmp edi,rc5key.turn
            jb  @gRc5encrypt
            mov RC5_r3,eax
            mov RC5_r4,edx
            mov rc5key.cont,0
            ret
RC5MainCall_Encrypt    ENDP
解密:
RC5MainCall_Decrypt    PROC    ;key data to be decrypt is in eax,edx
            lea esi,rc5key.S17
            mov edi,rc5key.cont        
        @gRc5decrypt:
            inc edi        
            mov ecx,eax
            sub edx,[esi]
            sub esi,4
            and ecx,1fh    ;to get the  shift result
            ror edx,cl
            xor edx,eax
            mov ecx,edx
            sub eax,[esi]
            sub esi,4
            and ecx,1fh
            ror eax,cl
            xor eax,edx
            cmp edi,rc5key.turn
            jb  @gRc5decrypt
            sub edx,rc5key.S1
            sub eax,rc5key.S0
            mov RC5_r5,eax
            mov RC5_r6,edx
            ret
RC5MainCall_Decrypt    ENDP

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功