吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6643|回复: 3
收起左侧

[分享] 算法分析一篇

[复制链接]
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 00000000  mov eax,dword ptr fs:[0]
  00425B2D    50              push eax
  00425B2E    64:8925 0000000>mov dword ptr fs:[0],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:[esp+18]
  00425B49    E8 58080000     call sxwjjjm.004263A6           ; jmp 到 mfc42.#540
  00425B4E    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
  00425B52    C74424 48 00000>mov dword ptr ss:[esp+48],0
  00425B5A    E8 47080000     call sxwjjjm.004263A6           ; jmp 到 mfc42.#540
  00425B5F    8D4C24 10       lea ecx,dword ptr ss:[esp+10]
  00425B63    C64424 48 01    mov byte ptr ss:[esp+48],1
  00425B68    E8 39080000     call sxwjjjm.004263A6           ; jmp 到 mfc42.#540
  00425B6D    8DBE F8080000   lea edi,dword ptr ds:[esi+8F8]
  00425B73    8D4424 1C       lea eax,dword ptr ss:[esp+1C]
  00425B77    B3 02           mov bl,2
  00425B79    50              push eax
  00425B7A    8BCF            mov ecx,edi
  00425B7C    885C24 4C       mov byte ptr ss:[esp+4C],bl
  00425B80    E8 5BBDFEFF     call sxwjjjm.004118E0
  00425B85    50              push eax
  00425B86    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
  00425B8A    C64424 4C 03    mov byte ptr ss:[esp+4C],3
  00425B8F    E8 5C090000     call sxwjjjm.004264F0           ; jmp 到 mfc42.#858
  00425B94    8D4C24 1C       lea ecx,dword ptr ss:[esp+1C]
  00425B98    885C24 48       mov byte ptr ss:[esp+48],bl
  00425B9C    E8 F9070000     call sxwjjjm.0042639A           ; jmp 到 mfc42.#800
  00425BA1    8D4C24 1C       lea ecx,dword ptr ss:[esp+1C]
  00425BA5    6A 03           push 3
  00425BA7    51              push ecx
  00425BA8    8D4C24 18       lea ecx,dword ptr ss:[esp+18]
  00425BAC    E8 15090000     call sxwjjjm.004264C6           ; jmp 到 mfc42.#4129
  00425BB1    50              push eax
  00425BB2    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
  00425BB6    C64424 4C 04    mov byte ptr ss:[esp+4C],4
  00425BBB    E8 30090000     call sxwjjjm.004264F0           ; jmp 到 mfc42.#858
  00425BC0    8D4C24 1C       lea ecx,dword ptr ss:[esp+1C]
  00425BC4    885C24 48       mov byte ptr ss:[esp+48],bl
  00425BC8    E8 CD070000     call sxwjjjm.0042639A           ; jmp 到 mfc42.#800
  00425BCD    8D5424 10       lea edx,dword ptr ss:[esp+10]
  00425BD1    68 2CEF4300     push sxwjjjm.0043EF2C
  00425BD6    8D4424 24       lea eax,dword ptr ss:[esp+24]
  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:[esp+20]
  00425BEA    50              push eax
  00425BEB    51              push ecx
  00425BEC    C64424 54 05    mov byte ptr ss:[esp+54],5
  00425BF1    E8 F20A0000     call sxwjjjm.004266E8           ; jmp 到 mfc42.#924
  00425BF6    50              push eax
  00425BF7    8D4C24 1C       lea ecx,dword ptr ss:[esp+1C]
  00425BFB    C64424 4C 06    mov byte ptr ss:[esp+4C],6
  00425C00    E8 EB080000     call sxwjjjm.004264F0           ; jmp 到 mfc42.#858
  00425C05    8D4C24 1C       lea ecx,dword ptr ss:[esp+1C]
  00425C09    C64424 48 05    mov byte ptr ss:[esp+48],5
  00425C0E    E8 87070000     call sxwjjjm.0042639A           ; jmp 到 mfc42.#800
  00425C13    8D4C24 20       lea ecx,dword ptr ss:[esp+20]
  00425C17    885C24 48       mov byte ptr ss:[esp+48],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+24],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:[esp+24]
  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:[esp+48],7
  00425C45    50              push eax
  00425C46    8D4C24 18       lea ecx,dword ptr ss:[esp+18]
  00425C4A    E8 A1080000     call sxwjjjm.004264F0           ; jmp 到 mfc42.#858
  00425C4F    8D4C24 20       lea ecx,dword ptr ss:[esp+20]
  00425C53    885C24 48       mov byte ptr ss:[esp+48],bl
  00425C57    E8 3E070000     call sxwjjjm.0042639A           ; jmp 到 mfc42.#800
  00425C5C    8B4C24 14       mov ecx,dword ptr ss:[esp+14]
  00425C60    8B86 04010000   mov eax,dword ptr ds:[esi+104]
  00425C66    8DAE 04010000   lea ebp,dword ptr ds:[esi+104]
  00425C6C    51              push ecx
  00425C6D    50              push eax
  00425C6E    FF15 6CD74200   call dword ptr ds:[42D76C]      ; 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:[0]
  0040A3BD    50      push eax
  0040A3BE    64:8925>mov dword ptr fs:[0],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:[esp+14],0
  0040A3D4    BB 0100>mov ebx,1
  0040A3D9    8D4C24 >lea ecx,dword ptr ss:[esp+10]
  0040A3DD    895C24 >mov dword ptr ss:[esp+60],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:[esp+18]
  0040A3F1    6A 00   push 0
  0040A3F3    F3:AB   rep stos dword ptr es:[edi]
  0040A3F5    66:AB   stos word ptr es:[edi]
  0040A3F7    B9 0700>mov ecx,7
  0040A3FC    33C0    xor eax,eax
  0040A3FE    8D7C24 >lea edi,dword ptr ss:[esp+3C]
  0040A402    C64424 >mov byte ptr ss:[esp+64],2
  0040A407    F3:AB   rep stos dword ptr es:[edi]
  0040A409    8D4C24 >lea ecx,dword ptr ss:[esp+70]
  0040A40D    66:AB   stos word ptr es:[edi]
  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:[esp+18]
  0040A41F    F2:AE   repne scas byte ptr es:[edi]
  0040A421    F7D1    not ecx
  0040A423    2BF9    sub edi,ecx
  0040A425    8B6C24 >mov ebp,dword ptr ss:[esp+6C]
  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:[edi],dword ptr>
  0040A434    8BC8    mov ecx,eax
  0040A436    8B45 F8 mov eax,dword ptr ss:[ebp-8]
  0040A439    83E1 03 and ecx,3
  0040A43C    F3:A4   rep movs byte ptr es:[edi],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:[esp+18]
  0040A44D    2BF9    sub edi,ecx
  0040A44F    8A4C34 >mov cl,byte ptr ss:[esp+esi+18]       ; 取机器码代码
  0040A453    8D4434 >lea eax,dword ptr ss:[esp+esi+18]
  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    0FAFC6  imul 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:[edx+4370DC]    ; 取[余数加4370DC]地址的固定字串的ASCII 放入EAX
  0040A473    0FBED1  movsx 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:[edx+4370DC]    ; 取[余数加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:[edx+eax+17]     ; 把上面2个结果相加后加17
  0040A499    99      cdq
  0040A49A    F7F9    idiv ecx                              ; 整除25余数放入DX
  0040A49C    8A92 DC>mov dl,byte ptr ds:[edx+4370DC]       ; 余数加 4370DC地址的固定字符
  0040A4A2    885434 >mov byte ptr ss:[esp+esi+38],dl       ; 上面得出注册码的第一部分
  0040A4A6    8B45 F8 mov eax,dword ptr ss:[ebp-8]
  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:[esp+18]
  0040A4B7    8D7434 >lea esi,dword ptr ss:[esp+esi+38]
  0040A4BB    8BCB    mov ecx,ebx
  0040A4BD    4F      dec edi
  0040A4BE    0FBE040>movsx eax,byte ptr ds:[edi+ecx]       ; 取机器码的ASCII
  0040A4C2    0FAFC1  imul 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:[edx+4370DC]
  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:[edx+eax+3]
  0040A4E7    99      cdq
  0040A4E8    F7FD    idiv ebp
  0040A4EA    41      inc ecx
  0040A4EB    46      inc esi
  0040A4EC    8D41 FF lea eax,dword ptr ds:[ecx-1]
  0040A4EF    83F8 08 cmp eax,8
  0040A4F2    8A92 DC>mov dl,byte ptr ds:[edx+4370DC]
  0040A4F8    8856 FF mov byte ptr ds:[esi-1],dl
  0040A4FB  ^ 7C C1   jl short sxwjjjm.0040A4BE
  0040A4FD    8D4C24 >lea ecx,dword ptr ss:[esp+38]         ; 算法完毕
  
  算法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

免费评分

参与人数 1威望 +1 收起 理由
CHHSun + 1 感谢发布原创作品,[吾爱破解]因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

秋风夜雪 发表于 2010-3-21 13:48
飞过,学习!!
落日余晖 发表于 2010-3-21 13:57
hezy129 发表于 2010-3-24 13:14
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 16:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表