首页
社区
课程
招聘
一个比较强的算法,请看是否可逆
发表于: 2005-6-16 23:19 4303

一个比较强的算法,请看是否可逆

2005-6-16 23:19
4303
一、声明:
    此Crack Me只是为了对这种算法的研究,并不用于任何商业目的。
    这种算法的加密强度很高,不见得就是名不经传的算法,但对我来说,还是第一次见到。
    Crack Me 中有原版本的KEY,从KEY中可以看出算法作者应该有逆向的方法,但我却无从知道了。如果有谁知道确切的算法名称的话,还请不啬赐教,谢谢:)
    Crack Me 地址: 点这里下载CRACK ME

二、算法流程
     把输入的注册号(128位),程序内置的种子数128位(ASCII"8E796B7905A018773ECE6313D3B2E9A6EA1EE06B09CD2AEFA954AF868D4ACCF7A089D22B2DB7F28DD85B0C06BF6953578A4418FA33DF4D559C9B84ADEB5DA909")
分别压缩为2组64位的矩阵结构,然后进行多次的循环变形,把最后变形后的ASCII颠倒顺序,并与机器号和用户名进行比较。
     我对各种算法并不熟悉,因为Crack Me中的原KEY中的数据得到的结果与机器号和用户名是完美匹配的,所以开始我认为这种算法为可逆算法,但结果却很难很难(有兴趣的可以跟踪原注册号进行比较,运算看到最后的结果就明白了)。我找了各种算法的书,并用算法工具检测,也没有关于这种算法的确切结果。
     为了节省大家的时间,我把Crack Me中需要用到的代码粗略的列在附件中,具体可以反编译Crack Me。
     

附:核心代码过程

1、主线程核心运算过程
0040AE44     53    push ebx                                    ;结果所保存的位置
0040AE45     57    push edi                                    ;程序预置的数据压缩成的64矩阵
0040AE46     55    push ebp                                    ;“010001”
0040AE47     56    push esi                                    ;输入的假注册号被压缩成的64位矩阵
0040AE48     E8 E3>call 休正dump.00430B30
0040AE4D     8D8C2>lea ecx,dword ptr ss:[esp+130]               
0040AE54     6A 00 push 0
0040AE56     51    push ecx
0040AE57     53    push ebx
0040AE58     68 00>push 100
0040AE5D     E8 7E>call 休正dump.004308E0                      ;上面运算的结果颠倒顺序,与下面的比较相吻合

2、主线程核心比较过程
0040AE82     8B942>mov edx,dword ptr ss:[esp+330]
0040AE89     8B3D >mov edi,dword ptr ds:[<&msvcrt.sprintf>]      ; msvcrt.sprintf
0040AE8F     52    push edx
0040AE90     8D442>lea eax,dword ptr ss:[esp+24]
0040AE94     68 80>push 休正dump.00444480                          ; ASCII "%s"
0040AE99     50    push eax
0040AE9A     FFD7  call edi
0040AE9C     8B8C2>mov ecx,dword ptr ss:[esp+33C]
0040AEA3     8B35 >mov esi,dword ptr ds:[<&msvcrt.strstr>]       ; msvcrt.strstr
0040AEA9     8D942>lea edx,dword ptr ss:[esp+12C]
0040AEB0     51    push ecx
0040AEB1     52    push edx
0040AEB2     FFD6  call esi
0040AEB4     83C4 >add esp,14
0040AEB7     85C0  test eax,eax
0040AEB9     5D    pop ebp
0040AEBA     0F84 >je 休正dump.0040AFB4
0040AEC0     A1 00>mov eax,dword ptr ds:[448E00]
0040AEC5     8D4C2>lea ecx,dword ptr ss:[esp+1C]
0040AEC9     50    push eax
0040AECA     68 8C>push 休正dump.00445C8C                          ; ASCII "%d"
0040AECF     51    push ecx
0040AED0     FFD7  call edi
0040AED2     8D542>lea edx,dword ptr ss:[esp+28]
0040AED6     8D842>lea eax,dword ptr ss:[esp+128]
0040AEDD     52    push edx
0040AEDE     50    push eax
0040AEDF     FFD6  call esi
0040AEE1     83C4 >add esp,14
0040AEE4     85C0  test eax,eax
0040AEE6     0F84 >je 休正dump.0040AFB4

3、子程序核心运算过程(生成最后比较的字串过程)

00430D55     56    push esi
00430D56     E8 F5>call 休正dump.00432C50
00430D5B     8B0D >mov ecx,dword ptr ds:[448F38]
00430D61     8B442>mov eax,dword ptr ss:[esp+14]
00430D65     8B91 >mov edx,dword ptr ds:[ecx+1E0]
00430D6B     52    push edx
00430D6C     50    push eax
00430D6D     E8 7E>call 休正dump.00432EF0
00430D72     8B15 >mov edx,dword ptr ds:[448F38]
00430D78     8B742>mov esi,dword ptr ss:[esp+28]
00430D7C     8B4C2>mov ecx,dword ptr ss:[esp+20]
00430D80     56    push esi
00430D81     8B82 >mov eax,dword ptr ds:[edx+1E0]
00430D87     51    push ecx
00430D88     50    push eax
00430D89     E8 22>call 休正dump.00430DB0
00430D8E     56    push esi
00430D8F     56    push esi                    ;这里是最终要进入循环运算的输入,也是循环后结果保存的地方
00430D90     E8 8B>call 休正dump.00433020      ;这里得到最终循环的结果,返回主程序后,对得到的结果的顺序进行逆向。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
2
你的crackme下载不下来
2005-6-18 09:31
0
雪    币: 4908
活跃值: (2343)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
最初由 cnbragon 发布
你的crackme下载不下来


论坛附件空间提供的有点小,刚超过520K,还是分2个包发到这里吧。
附件:CrackMe.part1.rar 附件:CrackMe.part2.rar
2005-6-18 11:15
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
4
关注中。。。。。。。。。。。。。。。
2005-6-24 23:33
0
游客
登录 | 注册 方可回帖
返回
//