zmjxx341 发表于 2010-3-21 12:35

算法分析一篇

【文章标题】: 算法分析一篇
【文章作者】: zmjxx341
【软件名称】: 省心文件夹加密普通版
【软件大小】: 1.18MB
【下载地址】: 自己搜索下载
【加壳方式】: ASProtect v1.23 RC1
【保护方式】: CDKEY
【使用工具】: OD
【操作平台】: WINDOWS
【软件介绍】: 加密文件目录啦!!
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
OD载入壳没脱掉。就带壳搞了F9运行吧
直接输入假码出现错误提示。F12调用堆栈
向上到段首下断
00425B20    6A FF         push -1                         ; 断在这里
00425B22    68 68C44200   push sxwjjjm.0042C468
00425B27    64:A1 00000000mov eax,dword ptr fs:
00425B2D    50            push eax
00425B2E    64:8925 0000000>mov dword ptr fs:,esp
00425B35    83EC 30         sub esp,30
00425B38    53            push ebx
00425B39    55            push ebp
00425B3A    56            push esi
00425B3B    57            push edi
00425B3C    8BF1            mov esi,ecx
00425B3E    6A 01         push 1
00425B40    E8 79080000   call sxwjjjm.004263BE         ; jmp 到 mfc42.#6334
00425B45    8D4C24 18       lea ecx,dword ptr ss:
00425B49    E8 58080000   call sxwjjjm.004263A6         ; jmp 到 mfc42.#540
00425B4E    8D4C24 14       lea ecx,dword ptr ss:
00425B52    C74424 48 00000>mov dword ptr ss:,0
00425B5A    E8 47080000   call sxwjjjm.004263A6         ; jmp 到 mfc42.#540
00425B5F    8D4C24 10       lea ecx,dword ptr ss:
00425B63    C64424 48 01    mov byte ptr ss:,1
00425B68    E8 39080000   call sxwjjjm.004263A6         ; jmp 到 mfc42.#540
00425B6D    8DBE F8080000   lea edi,dword ptr ds:
00425B73    8D4424 1C       lea eax,dword ptr ss:
00425B77    B3 02         mov bl,2
00425B79    50            push eax
00425B7A    8BCF            mov ecx,edi
00425B7C    885C24 4C       mov byte ptr ss:,bl
00425B80    E8 5BBDFEFF   call sxwjjjm.004118E0
00425B85    50            push eax
00425B86    8D4C24 14       lea ecx,dword ptr ss:
00425B8A    C64424 4C 03    mov byte ptr ss:,3
00425B8F    E8 5C090000   call sxwjjjm.004264F0         ; jmp 到 mfc42.#858
00425B94    8D4C24 1C       lea ecx,dword ptr ss:
00425B98    885C24 48       mov byte ptr ss:,bl
00425B9C    E8 F9070000   call sxwjjjm.0042639A         ; jmp 到 mfc42.#800
00425BA1    8D4C24 1C       lea ecx,dword ptr ss:
00425BA5    6A 03         push 3
00425BA7    51            push ecx
00425BA8    8D4C24 18       lea ecx,dword ptr ss:
00425BAC    E8 15090000   call sxwjjjm.004264C6         ; jmp 到 mfc42.#4129
00425BB1    50            push eax
00425BB2    8D4C24 14       lea ecx,dword ptr ss:
00425BB6    C64424 4C 04    mov byte ptr ss:,4
00425BBB    E8 30090000   call sxwjjjm.004264F0         ; jmp 到 mfc42.#858
00425BC0    8D4C24 1C       lea ecx,dword ptr ss:
00425BC4    885C24 48       mov byte ptr ss:,bl
00425BC8    E8 CD070000   call sxwjjjm.0042639A         ; jmp 到 mfc42.#800
00425BCD    8D5424 10       lea edx,dword ptr ss:
00425BD1    68 2CEF4300   push sxwjjjm.0043EF2C
00425BD6    8D4424 24       lea eax,dword ptr ss:
00425BDA    52            push edx
00425BDB    50            push eax
00425BDC    E8 1F0B0000   call sxwjjjm.00426700         ; jmp 到 mfc42.#922
00425BE1    68 D0744300   push sxwjjjm.004374D0         ; ASCII "regfile.asxe"
00425BE6    8D4C24 20       lea ecx,dword ptr ss:
00425BEA    50            push eax
00425BEB    51            push ecx
00425BEC    C64424 54 05    mov byte ptr ss:,5
00425BF1    E8 F20A0000   call sxwjjjm.004266E8         ; jmp 到 mfc42.#924
00425BF6    50            push eax
00425BF7    8D4C24 1C       lea ecx,dword ptr ss:
00425BFB    C64424 4C 06    mov byte ptr ss:,6
00425C00    E8 EB080000   call sxwjjjm.004264F0         ; jmp 到 mfc42.#858
00425C05    8D4C24 1C       lea ecx,dword ptr ss:
00425C09    C64424 48 05    mov byte ptr ss:,5
00425C0E    E8 87070000   call sxwjjjm.0042639A         ; jmp 到 mfc42.#800
00425C13    8D4C24 20       lea ecx,dword ptr ss:
00425C17    885C24 48       mov byte ptr ss:,bl
00425C1B    E8 7A070000   call sxwjjjm.0042639A         ; jmp 到 mfc42.#800
00425C20    51            push ecx
00425C21    8BCC            mov ecx,esp
00425C23    896424 24       mov dword ptr ss:,esp
00425C27    68 F4534400   push sxwjjjm.004453F4         ; ASCII "8P="
00425C2C    E8 B7070000   call sxwjjjm.004263E8         ; jmp 到 mfc42.#535
00425C31    8D5424 24       lea edx,dword ptr ss:
00425C35    B9 F0534400   mov ecx,sxwjjjm.004453F0
00425C3A    52            push edx
00425C3B    E8 7047FEFF   call sxwjjjm.0040A3B0         ; 算法跟进
00425C40    C64424 48 07    mov byte ptr ss:,7
00425C45    50            push eax
00425C46    8D4C24 18       lea ecx,dword ptr ss:
00425C4A    E8 A1080000   call sxwjjjm.004264F0         ; jmp 到 mfc42.#858
00425C4F    8D4C24 20       lea ecx,dword ptr ss:
00425C53    885C24 48       mov byte ptr ss:,bl
00425C57    E8 3E070000   call sxwjjjm.0042639A         ; jmp 到 mfc42.#800
00425C5C    8B4C24 14       mov ecx,dword ptr ss:
00425C60    8B86 04010000   mov eax,dword ptr ds:
00425C66    8DAE 04010000   lea ebp,dword ptr ds:
00425C6C    51            push ecx
00425C6D    50            push eax
00425C6E    FF15 6CD74200   call dword ptr ds:      ; msvcrt._mbscmp
00425C74    83C4 08         add esp,8
00425C77    85C0            test eax,eax
00425C79    6A 00         push 0
00425C7B    75 4A         jnz short sxwjjjm.00425CC7      ; 跳了就完蛋了

算法CALL
0040A3B0    6A FF   push -1
0040A3B2    68 377C>push sxwjjjm.00427C37
0040A3B7    64:A1 0>mov eax,dword ptr fs:
0040A3BD    50      push eax
0040A3BE    64:8925>mov dword ptr fs:,esp
0040A3C5    83EC 48 sub esp,48
0040A3C8    53      push ebx
0040A3C9    55      push ebp
0040A3CA    56      push esi
0040A3CB    57      push edi
0040A3CC    C74424 >mov dword ptr ss:,0
0040A3D4    BB 0100>mov ebx,1
0040A3D9    8D4C24 >lea ecx,dword ptr ss:
0040A3DD    895C24 >mov dword ptr ss:,ebx
0040A3E1    E8 C0BF>call sxwjjjm.004263A6               ; jmp 到 mfc42.#540
0040A3E6    B9 0700>mov ecx,7
0040A3EB    33C0    xor eax,eax
0040A3ED    8D7C24 >lea edi,dword ptr ss:
0040A3F1    6A 00   push 0
0040A3F3    F3:AB   rep stos dword ptr es:
0040A3F5    66:AB   stos word ptr es:
0040A3F7    B9 0700>mov ecx,7
0040A3FC    33C0    xor eax,eax
0040A3FE    8D7C24 >lea edi,dword ptr ss:
0040A402    C64424 >mov byte ptr ss:,2
0040A407    F3:AB   rep stos dword ptr es:
0040A409    8D4C24 >lea ecx,dword ptr ss:
0040A40D    66:AB   stos word ptr es:
0040A40F    E8 CCC1>call sxwjjjm.004265E0               ; jmp 到 mfc42.#2915
0040A414    8BF8    mov edi,eax                           ; 机器码放入EDI
0040A416    83C9 FF or ecx,FFFFFFFF
0040A419    33C0    xor eax,eax
0040A41B    8D5424 >lea edx,dword ptr ss:
0040A41F    F2:AE   repne scas byte ptr es:
0040A421    F7D1    not ecx
0040A423    2BF9    sub edi,ecx
0040A425    8B6C24 >mov ebp,dword ptr ss:
0040A429    8BC1    mov eax,ecx
0040A42B    8BF7    mov esi,edi
0040A42D    8BFA    mov edi,edx
0040A42F    C1E9 02 shr ecx,2
0040A432    F3:A5   rep movs dword ptr es:,dword ptr>
0040A434    8BC8    mov ecx,eax
0040A436    8B45 F8 mov eax,dword ptr ss:
0040A439    83E1 03 and ecx,3
0040A43C    F3:A4   rep movs byte ptr es:,byte ptr d>算法1
0040A43E    33F6    xor esi,esi
0040A440    85C0    test eax,eax                        ; 比较机器码长度
0040A442    7E 6F   jle short sxwjjjm.0040A4B3
0040A444    BF 0700>mov edi,7
0040A449    8D4C24 >lea ecx,dword ptr ss:
0040A44D    2BF9    sub edi,ecx
0040A44F    8A4C34 >mov cl,byte ptr ss:       ; 取机器码代码
0040A453    8D4434 >lea eax,dword ptr ss:
0040A457    80F9 30 cmp cl,30                           ; 和30比较
0040A45A    7C 4A   jl short sxwjjjm.0040A4A6
0040A45C    03C7    add eax,edi                           ; 循环一次加一‘我这里第一次是7
0040A45E    BB 2500>mov ebx,25
0040A463    0FAFC6imul eax,esi                        ; esi = esi +1    初始是0
0040A466    83C0 03 add eax,3                           ; 加3
0040A469    99      cdq
0040A46A    F7FB    idiv ebx                              ; eax整除25余方入DX
0040A46C    0FBE82 >movsx eax,byte ptr ds:    ; 取[余数加4370DC]地址的固定字串的ASCII 放入EAX
0040A473    0FBED1movsx edx,cl                        ; 机器码的ASCII 放入EDX
0040A476    33C2    xor eax,edx                           ; 2个值XOR结果放入EAX
0040A478    8BCB    mov ecx,ebx
0040A47A    99      cdq
0040A47B    F7F9    idiv ecx                              ; eax整除25余方入DX
0040A47D    B8 ABAA>mov eax,2AAAAAAB
0040A482    0FBE8A >movsx ecx,byte ptr ds:    ; 取[余数加4370DC]地址的固定字串的ASCII 放入ECX
0040A489    C1E1 03 shl ecx,3                           ; ECX左移动3位
0040A48C    F7E9    imul ecx                              ; 2AAAAAAB乘以 ECX取DX的值
0040A48E    8BC2    mov eax,edx                           ; 把DX放AX
0040A490    8BCB    mov ecx,ebx
0040A492    C1E8 1F shr eax,1F                            ; EAX 右移 1F
0040A495    8D4402 >lea eax,dword ptr ds:   ; 把上面2个结果相加后加17
0040A499    99      cdq
0040A49A    F7F9    idiv ecx                              ; 整除25余数放入DX
0040A49C    8A92 DC>mov dl,byte ptr ds:       ; 余数加 4370DC地址的固定字符
0040A4A2    885434 >mov byte ptr ss:,dl       ; 上面得出注册码的第一部分
0040A4A6    8B45 F8 mov eax,dword ptr ss:
0040A4A9    46      inc esi
0040A4AA    3BF0    cmp esi,eax
0040A4AC^ 7C A1   jl short sxwjjjm.0040A44F
0040A4AE    BB 0100>mov ebx,1                              算法2
0040A4B3    8D7C24 >lea edi,dword ptr ss:
0040A4B7    8D7434 >lea esi,dword ptr ss:
0040A4BB    8BCB    mov ecx,ebx
0040A4BD    4F      dec edi
0040A4BE    0FBE040>movsx eax,byte ptr ds:       ; 取机器码的ASCII
0040A4C2    0FAFC1imul eax,ecx                        ; ASCII码乘ECX (ECX= ECX + 1
0040A4C5    99      cdq
0040A4C6    BD 2500>mov ebp,25
0040A4CB    F7FD    idiv ebp
0040A4CD    B8 ABAA>mov eax,2AAAAAAB
0040A4D2    0FBE92 >movsx edx,byte ptr ds:
0040A4D9    C1E2 03 shl edx,3
0040A4DC    F7EA    imul edx
0040A4DE    8BC2    mov eax,edx
0040A4E0    C1E8 1F shr eax,1F
0040A4E3    8D4402 >lea eax,dword ptr ds:
0040A4E7    99      cdq
0040A4E8    F7FD    idiv ebp
0040A4EA    41      inc ecx
0040A4EB    46      inc esi
0040A4EC    8D41 FF lea eax,dword ptr ds:
0040A4EF    83F8 08 cmp eax,8
0040A4F2    8A92 DC>mov dl,byte ptr ds:
0040A4F8    8856 FF mov byte ptr ds:,dl
0040A4FB^ 7C C1   jl short sxwjjjm.0040A4BE
0040A4FD    8D4C24 >lea ecx,dword ptr ss:         ; 算法完毕

算法2的注释没怎么加因为跟第一段差不多

字符对应的地址前面的4370省略了
DC=Q DD=5 DE=A DF=0 E0=Z E1=P E2=L E3=M E4=8 E5=2 E6=X E7=S E8=W E9=0 EA=4
EB=K EC=N ED=7 EE=1 EF=E F0=D F1=C F2=B F3=J F4=I F5=3 F6=U F7=H F8=9 F9=V
FA=R FB=F FC=6 FD=G FE=Y FF=T 100=F

算法第一部分

((7+i) * (esi+i) mod 25 + DC ) 取对应字符表= a
((a xor n) mod 25 ) + DC) 取对应字符 = b             '机器码的ASCII设n
取(2AAAAAAB * (b 左移 3 )) DX位的值= c
c 右移动 1F= d
s1 = ((d + c + 17) mod 25+ DC )取对应字符表
上面循环机器码长度次得到注册吗第一部分

第二部分

(N*I ) MOD 25 + DC取对应字符表)= a
取(2AAAAAAB * (a 左移 3 )) DX位的值= b
b 右移 1F   = c
s2 = ((b + c + 3 ) mod 25 ) + DC 取对应字符表
第2断循环8次得注册码第二部分

差不多就这样子了。写的有点乱 失误之处敬请诸位大侠赐教。

对了注册码存放在C:\safeguard\2009wjjhw`@$ .目录里。。可我打不开也删 不掉。谁有办法告诉我
--------------------------------------------------------------------------------
【版权声明】: 本文原创于www.52pojie.cn, 转载请注明作者并保持文章的完整, 谢谢!
                                                       2010年03月21日 11:29:34

秋风夜雪 发表于 2010-3-21 13:48

飞过,学习!!

落日余晖 发表于 2010-3-21 13:57

谢谢 收藏啦,没事学习

hezy129 发表于 2010-3-24 13:14

这样好象也挺复杂,算法分析太难
页: [1]
查看完整版本: 算法分析一篇