【文章标题】: 文件夹加密精灵算法分析
【文章作者】: 8713007
【软件名称】: 文件夹加密精灵
【软件大小】: 448k
【下载地址】: 自己搜索下载
【保护方式】: 序列号(机器码)+重起
【编写语言】: Vc++
【使用工具】: OD,W32dsm8.93+
【操作平台】: WinXp
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
启动程序,点击注册,输入序列号:12345678901234567890,程序提示重起。复制机器码后搜索注册表发现程序在注册表名
为000处保存机器码。利用OD载入,下段bp RegQueryValueExA,F9
77DA2410 > 55 push ebp/////////////////段在这里,ctrl+F9返回
77DA2411 8BEC mov ebp, esp
77DA2413 83EC 2C sub esp, 2C
77DA2416 57 push edi
77DA2417 33FF xor edi, edi
77DA2419 397D 10 cmp [ebp+10], edi
77DA241C 897D F8 mov [ebp-8], edi
77DA241F 897D F4 mov [ebp-C], edi
77DA2422 0F85 37F60000 jnz 77DB1A5F
77DA2428 397D 18 cmp [ebp+18], edi
77DA242B 0F85 C9000000 jnz 77DA24FA
77DA2431 53 push ebx
77DA2432 8D45 F4 lea eax, [ebp-C]
77DA2435 50 push eax
77DA2436 FF75 08 push dword ptr [ebp+8]
77DA2439 E8 92F2FFFF call 77DA16D0
77DA243E 8BD8 mov ebx, eax
77DA2440 3BDF cmp ebx, edi
77DA2442 0F84 EDF50000 je 77DB1A35
77DA2448 56 push esi
77DA2449 897D E0 mov [ebp-20], edi
77DA244C 64:A1 18000000 mov eax, fs:[18]
77DA2452 FF75 0C push dword ptr [ebp+C]
77DA2455 8DB0 F80B0000 lea esi, [eax+BF8]
77DA245B 8D45 D4 lea eax, [ebp-2C]
77DA245E 50 push eax
77DA245F FF15 7413DA77 call [<&ntdll.RtlInitAnsiString>] ; ntdll.RtlInitAnsiString
77DA2465 57 push edi
/////////////////////////////////////////////////
0040518F |. 8945 E4 mov [ebp-1C], eax/////////////////////////返回在这里,F8单步跟踪
00405192 |. 837D E4 00 cmp dword ptr [ebp-1C], 0
00405196 |. 74 04 je short 0040519C
00405198 |. 33C0 xor eax, eax
0040519A |. EB 53 jmp short 004051EF
0040519C |> C745 E8 00000>mov dword ptr [ebp-18], 0
004051A3 |. EB 09 jmp short 004051AE
004051A5 |> 8B55 E8 /mov edx, [ebp-18]///////ebp-18入edx
004051A8 |. 83C2 01 |add edx, 1/////////////////edx+1
004051AB |. 8955 E8 |mov [ebp-18], edx
004051AE |> 837D E8 14 cmp dword ptr [ebp-18], 14/////比较是否大于20
004051B2 |. 7D 17 |jge short 004051CB
004051B4 |. 8B45 E0 |mov eax, [ebp-20]
004051B7 |. 0345 E8 |add eax, [ebp-18]
004051BA |. 8B4D E8 |mov ecx, [ebp-18]
004051BD |. 8A90 C4000000 |mov dl, [eax+C4]
004051C3 |. 8891 54E84500 |mov [ecx+45E854], dl/////循环取注册码前20位入ecx+45E854
004051C9 |.^ EB DA \jmp short 004051A5
004051CB |> C605 68E84500>mov byte ptr [45E868], 0
004051D2 |. 68 54E84500 push 0045E854 ; /Arg1 = 0045E854
004051D7 |. 8B4D E0 mov ecx, [ebp-20] ; |
004051DA |. E8 D1080000 call 00405AB0 ; \FolderPr.00405AB0//////// 关键call,F7跟进
004051DF |. 8945 F0 mov [ebp-10], eax
004051E2 |. 8B45 EC mov eax, [ebp-14]
004051E5 |. 50 push eax ; /hKey
004051E6 |. FF15 00F04400 call [<&ADVAPI32.RegCloseKey>] ; \RegCloseKey
004051EC |. 8B45 F0 mov eax, [ebp-10]
004051EF |> 8BE5 mov esp, ebp
004051F1 |. 5D pop ebp
004051F2 \. C3 retn
/////////////////////////////////F7跟进后来到这里
00405AB0 /$ 55 push ebp
00405AB1 |. 8BEC mov ebp, esp
00405AB3 |. 83EC 24 sub esp, 24
00405AB6 |. 894D DC mov [ebp-24], ecx
00405AB9 |. C745 FC 01000>mov dword ptr [ebp-4], 1
00405AC0 |. C745 E0 00000>mov dword ptr [ebp-20], 0
00405AC7 |. EB 09 jmp short 00405AD2
00405AC9 |> 8B45 E0 /mov eax, [ebp-20]
00405ACC |. 83C0 01 |add eax, 1
00405ACF |. 8945 E0 |mov [ebp-20], eax
00405AD2 |> 837D E0 14 cmp dword ptr [ebp-20], 14////////////////比较是否取够20位
00405AD6 |. 7D 17 |jge short 00405AEF///取够以后跳向00405AEF
00405AD8 |. 8B4D E0 |mov ecx, [ebp-20]
00405ADB |. 51 |push ecx ; /Arg1
00405ADC |. B9 6CE84500 |mov ecx, 0045E86C ; |
00405AE1 |. E8 3ADEFFFF |call 00403920 /////////////取得机器码
00405AE6 |. 8B55 E0 |mov edx, [ebp-20]
00405AE9 |. 884415 E4 |mov [ebp+edx-1C], al////////机器码入ebp+edx-1c
00405AED |.^ EB DA \jmp short 00405AC9
00405AEF |> C705 1CE54500>mov dword ptr [45E51C], 0
00405AF9 |. EB 0D jmp short 00405B08
00405AFB |> A1 1CE54500 /mov eax, [45E51C]
00405B00 |. 83C0 01 |add eax, 1
00405B03 |. A3 1CE54500 |mov [45E51C], eax
00405B08 |> 833D 1CE54500> cmp dword ptr [45E51C], 14
00405B0F |. 0F83 86000000 |jnb 00405B9B
00405B15 |. 8B0D 1CE54500 |mov ecx, [45E51C]
00405B1B |. 8A540D E4 |mov dl, [ebp+ecx-1C]/////依次取机器码的Ascii每一位入dl,
00405B1F |. 8855 F8 |mov [ebp-8], dl///////////dl入ebp-8
00405B22 |. 0FBE45 F8 |movsx eax, byte ptr [ebp-8]/////ebp-8入eax
00405B26 |. 83F8 30 |cmp eax, 30///////////////////Ascii小于30跳走
00405B29 |. 7C 1E |jl short 00405B49
00405B2B |. 0FBE4D F8 |movsx ecx, byte ptr [ebp-8]
00405B2F |. 83F9 39 |cmp ecx, 39/////////////////Ascii大于39跳走
00405B32 |. 7F 15 |jg short 00405B49
00405B34 |. 0FBE55 F8 |movsx edx, byte ptr [ebp-8]//////机器码入edx
00405B38 |. B8 69000000 |mov eax, 69//////////////////69入eax
00405B3D |. 2BC2 |sub eax, edx////////////////////edx-eax结果入eax
00405B3F |. 8B0D 1CE54500 |mov ecx, [45E51C]
00405B45 |. 88440D E4 |mov [ebp+ecx-1C], al//////将计算的结果取代原来的机器码
00405B49 |> 0FBE55 F8 |movsx edx, byte ptr [ebp-8]////////机器码的Ascii大于39来到这里
00405B4D |. 83FA 41 |cmp edx, 41////////////比较机器码的Ascii大于41跳走
00405B50 |. 7C 1D |jl short 00405B6F
00405B52 |. 0FBE45 F8 |movsx eax, byte ptr [ebp-8]///机器码入eax
00405B56 |. 83F8 5A |cmp eax, 5A/////////////大于5A跳走
00405B59 |. 7F 14 |jg short 00405B6F
00405B5B |. 0FBE4D F8 |movsx ecx, byte ptr [ebp-8]//////机器码入ecx
00405B5F |. BA 9B000000 |mov edx, 9B////9B入edx
00405B64 |. 2BD1 |sub edx, ecx///////edx-ecx结果入edx
00405B66 |. A1 1CE54500 |mov eax, [45E51C]
00405B6B |. 885405 E4 |mov [ebp+eax-1C], dl//////将计算的结果取代原来的机器码
00405B6F |> 0FBE4D F8 |movsx ecx, byte ptr [ebp-8]//////////机器码的Ascii<30 或Ascii>39来到这里
00405B73 |. 83F9 61 |cmp ecx, 61////////////////小于61则重新取值
00405B76 |. 7C 1E |jl short 00405B96
00405B78 |. 0FBE55 F8 |movsx edx, byte ptr [ebp-8]
00405B7C |. 83FA 7A |cmp edx, 7A/////////////////大于7A则重新取值
00405B7F |. 7F 15 |jg short 00405B96
00405B81 |. 0FBE45 F8 |movsx eax, byte ptr [ebp-8]
00405B85 |. B9 DB000000 |mov ecx, 0DB //////DB入ecx
00405B8A |. 2BC8 |sub ecx, eax//////
00405B8C |. 8B15 1CE54500 |mov edx, [45E51C]
00405B92 |. 884C15 E4 |mov [ebp+edx-1C], cl
00405B96 |>^ E9 60FFFFFF \jmp 00405AFB///////////////////////循环
计算完成后的数组我们设为X,X共21位
////////////////////////////////计算完成后来到这里
00405B9B |> \8A45 E5 mov al, [ebp-1B]
00405B9E |. 8845 F8 mov [ebp-8], al///////////X的第二位入X最后一位
00405BA1 |. 8A4D F6 mov cl, [ebp-A]
00405BA4 |. 884D E5 mov [ebp-1B], cl//////////X的倒数第三位入第二位
00405BA7 |. 8A55 F8 mov dl, [ebp-8]
00405BAA |. 8855 F6 mov [ebp-A], dl////////最后一位入X的倒数第三位
00405BAD |. 8A45 E7 mov al, [ebp-19]
00405BB0 |. 8845 F8 mov [ebp-8], al//////////X的第四位入最后一位
00405BB3 |. 8A4D EE mov cl, [ebp-12]
00405BB6 |. 884D E7 mov [ebp-19], cl/////////X的第十一位入第四位
00405BB9 |. 8A55 F8 mov dl, [ebp-8]
00405BBC |. 8855 EE mov [ebp-12], dl///////X的最后一位入第十一位
00405BBF |. 8A45 E9 mov al, [ebp-17]
00405BC2 |. 8845 F8 mov [ebp-8], al///////////X第六位入最后一位
00405BC5 |. 8A4D F0 mov cl, [ebp-10]
00405BC8 |. 884D E9 mov [ebp-17], cl///////////X的第十三位入第六位
00405BCB |. 8A55 F8 mov dl, [ebp-8]
00405BCE |. 8855 F0 mov [ebp-10], dl//////////X的最后一位入第十三位
00405BD1 |. 8A45 EB mov al, [ebp-15]
00405BD4 |. 8845 F8 mov [ebp-8], al//////////X第八位入最后一位
00405BD7 |. 8A4D F2 mov cl, [ebp-E]
00405BDA |. 884D EB mov [ebp-15], cl/////////X的第十五位入第八位
00405BDD |. 8A55 F8 mov dl, [ebp-8]
00405BE0 |. 8855 F2 mov [ebp-E], dl//////////X的最后一位入第十五位
00405BE3 |. 8A45 ED mov al, [ebp-13]
00405BE6 |. 8845 F8 mov [ebp-8], al///////////X第十位入最后一位
00405BE9 |. 8A4D F4 mov cl, [ebp-C]
00405BEC |. 884D ED mov [ebp-13], cl/////////X的第十七位入第十位
00405BEF |. 8A55 F8 mov dl, [ebp-8]
00405BF2 |. 8855 F4 mov [ebp-C], dl//////////X的最后一位入第十七位
00405BF5 |. C745 E0 00000>mov dword ptr [ebp-20], 0
00405BFC |. /EB 09 jmp short 00405C07
00405BFE |> /8B45 E0 /mov eax, [ebp-20]
00405C01 |. |83C0 01 |add eax, 1
00405C04 |. |8945 E0 |mov [ebp-20], eax
00405C07 |> |837D E0 14 cmp dword ptr [ebp-20], 14
00405C0B |. |7D 20 |jge short 00405C2D
00405C0D |. |8B4D 08 |mov ecx, [ebp+8]
00405C10 |. |034D E0 |add ecx, [ebp-20]
00405C13 |. |0FBE11 |movsx edx, byte ptr [ecx]
00405C16 |. |8B45 E0 |mov eax, [ebp-20]
00405C19 |. |0FBE4C05 E4 |movsx ecx, byte ptr [ebp+eax-1C]
00405C1E |. |3BD1 |cmp edx, ecx
00405C20 |74 09 je short 00405C2B
00405C22 |. |C745 FC 00000>|mov dword ptr [ebp-4], 0
00405C29 |. |EB 02 |jmp short 00405C2D
00405C2B |>^\EB D1 \jmp short 00405BFE
00405C2D |> 8B45 FC mov eax, [ebp-4]
00405C30 |. 8BE5 mov esp, ebp
00405C32 |. 5D pop ebp
00405C33 \. C2 0400 retn 4/////////////////完成后返回
/////////////////////////////////////////////////
程序算法到此完成
第一次写破文,不当之处请指正
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年11月14日 12:10:05
[课程]Android-CTF解题方法汇总!