算法分析一篇
【文章标题】: 算法分析一篇【文章作者】: 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 飞过,学习!! 谢谢 收藏啦,没事学习 这样好象也挺复杂,算法分析太难
页:
[1]