飘云 发表于 2005-4-6 07:35:42

[PYG]算法分析入门第四课

【破文标题】算法分析入门第四课
【破文作者】飘云
【作者主页】https://www.chinapyg.com
【破解平台】winxp
【破解工具】PEiD0.93、AspackDie、w32dasm、OD二哥修改版
【作者邮箱】[email protected]
【软件名称】私人保险箱 V5.61
【软件大小】1482 KB
【原版下载】http://www3.skycn.com/soft/14176.html
【软件简介】为了不使自己的文件能被他人随意使用,你可能会使用一些加密软件来对文件进行加密,但在这种情况下,在文件较大或文件很多的情况下需要花费较多的时间,而且当要使用这些文件的时候,还需要对其进行解密,而使用完毕后,又要重新加密,十分麻烦。其实只要能将这些文件彻底隐藏起来不就行了。本软件就能帮您实现这个功能。
    软件能够帮助您方便快捷彻底地隐藏文件。无论有多少个文件,只要把这些文件或这些文件所在的文件夹存放到所设置的私人保险箱中,又或者直接将这些文件所在的目录设置为私人保险箱,即可实现文件的彻底隐藏。本软件在使用上非常简单。第一次运行的时候请以管理员的身份登录,至少创建一个用户,然后以用户的身份登录,设置该用户的私人保险箱。设置完成后,当要使用私人保险箱时,只需在\\\"我的电脑\\\"或任何一个文件夹上单击右键,选取\\\"进入私人保险箱\\\",输入正确的密码即可使用属于你的所有私人保险箱。
【分析过程】先用PEiD探测一下:ASPack 2.12 -> Alexey Solodovnikov 用AspackDie解决,当然用手动也很快的 再查为Borland Delphi 6.0 - 7.0编写,用W32DASM找到以下关键(为了方便,我用OD看的代码):

004DACA3      |.55         push ebp
004DACA4      |.68 95AD4D00push Unpacked.004DAD95
004DACA9      |.64:FF30      push dword ptr fs:
004DACAC      |.64:8920      mov dword ptr fs:,esp
004DACAF      |.8D55 FC      lea edx,dword ptr ss:
004DACB2      |.8B86 0404000>mov eax,dword ptr ds:
004DACB8      |.E8 ABACF6FFcall Unpacked.00445968
004DACBD      |.8B45 FC      mov eax,dword ptr ss:
004DACC0      |.50         push eax                            ;假码入栈
004DACC1      |.6A 03      push 3
004DACC3      |.8D45 F8      lea eax,dword ptr ss:
004DACC6      |.50         push eax
004DACC7      |.8D45 F4      lea eax,dword ptr ss:
004DACCA      |.E8 91AEFEFFcall Unpacked.004C5B60
004DACCF      |.8B45 F4      mov eax,dword ptr ss:      ;=机器码
004DACD2      |.B9 02000000mov ecx,2                           ;
004DACD7      |.BA 01000000mov edx,1                           ;EDX=1 注意~~
004DACDC      |.E8 57AFFEFFcall Unpacked.004C5C38            ;算法call,进去!!
004DACE1      |.8B55 F8      mov edx,dword ptr ss:
004DACE4      |.58         pop eax
004DACE5      |.E8 A2A3F2FFcall Unpacked.0040508C            ;比较call
004DACEA      |.75 66      jnz short Unpacked.004DAD52         ;这里跳就完了,爆破点
004DACEC      |.B2 01      mov dl,1
004DACEE      |.A1 847A4600mov eax,dword ptr ds:

一下是来到算法call中
004C5C38      /$55         push ebp
004C5C39      |.8BEC         mov ebp,esp
004C5C3B      |.83C4 F0      add esp,-10
004C5C3E      |.53         push ebx
004C5C3F      |.56         push esi
004C5C40      |.57         push edi
004C5C41      |.33DB         xor ebx,ebx
004C5C43      |.895D F0      mov dword ptr ss:,ebx
004C5C46      |.894D F8      mov dword ptr ss:,ecx
004C5C49      |.8BF2         mov esi,edx                         ;esi=edx=1
004C5C4B      |.8945 FC      mov dword ptr ss:,eax
004C5C4E      |.8B7D 08      mov edi,dword ptr ss:
004C5C51      |.33C0         xor eax,eax                         ;eax清0
004C5C53      |.55         push ebp
004C5C54      |.68 CB5C4C00push Unpacked.004C5CCB
004C5C59      |.64:FF30      push dword ptr fs:
004C5C5C      |.64:8920      mov dword ptr fs:,esp
004C5C5F      |.8BC7         mov eax,edi
004C5C61      |.E8 2AF0F3FFcall Unpacked.00404C90
004C5C66      |.8B45 FC      mov eax,dword ptr ss:      ;机器码送到eax
004C5C69      |.E8 DAF2F3FFcall Unpacked.00404F48            ;计算长度
004C5C6E      |.84C0         test al,al
004C5C70      |.76 43      jbe short Unpacked.004C5CB5         ;是否有机器码
004C5C72      |.8845 F7      mov byte ptr ss:,al          ;长度放到
004C5C75      |.B3 01      mov bl,1                            ;bl=1
004C5C77      |>8D45 F0      /lea eax,dword ptr ss:
004C5C7A      |.33D2         |xor edx,edx                        ;edx清0
004C5C7C      |.8AD3         |mov dl,bl
004C5C7E      |.8B4D FC      |mov ecx,dword ptr ss:       ;机器码送到ecx
004C5C81      |.8A5411 FF    |mov dl,byte ptr ds:   ;逐位取ascii值送到dl
004C5C85      |.8BCE         |mov ecx,esi                        ;ecx=esi   esi初始值为1
004C5C87      |.C1E9 08      |shr ecx,8                        ;右移8位
004C5C8A      |.32D1         |xor dl,cl                        ;dl=dl xor cl
004C5C8C      |.E8 DFF1F3FF|call Unpacked.00404E70             ;转换成ascii
004C5C91      |.8B55 F0      |mov edx,dword ptr ss:
004C5C94      |.8BC7         |mov eax,edi
004C5C96      |.E8 B5F2F3FF|call Unpacked.00404F50
004C5C9B      |.33C0         |xor eax,eax
004C5C9D      |.8AC3         |mov al,bl
004C5C9F      |.8B17         |mov edx,dword ptr ds:
004C5CA1      |.0FB64402 FF|movzx eax,byte ptr ds:;逐位取机器码ascii
004C5CA6      |.03F0         |add esi,eax                        ;esi=esi+eax
004C5CA8      |.0FAF75 F8    |imul esi,dword ptr ss:      ;esi=esi×2    是定值2
004C5CAC      |.0375 0C      |add esi,dword ptr ss:       ;esi=esi+3   为定值3
004C5CAF      |.43         |inc ebx                            ;计数器加1(即机器码后移一位)
004C5CB0      |.FE4D F7      |dec byte ptr ss:            ;计算完的就去掉
004C5CB3      |.^ 75 C2      \jnz short Unpacked.004C5C77      ;循环
004C5CB5      |>33C0         xor eax,eax
004C5CB7      |.5A         pop edx
004C5CB8      |.59         pop ecx
004C5CB9      |.59         pop ecx
004C5CBA      |.64:8910      mov dword ptr fs:,edx
004C5CBD      |.68 D25C4C00push Unpacked.004C5CD2
004C5CC2      |>8D45 F0      lea eax,dword ptr ss:
004C5CC5      |.E8 C6EFF3FFcall Unpacked.00404C90
004C5CCA      \.C3         retn


【总结】
利用了每位机器码循环计算方式得到注册码
我的机器码:注册码
我的注册码:3FDAALX{

内存注册机:
中断地址:4DACE5
中断次数:1
第一字节:E8
指令长度:5
内存方式-寄存器-edx

注册信息保存在:HKEY_CURRENT_USER\Software\SafeBox\RegNum,删除后可继续研究


【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

yijun 发表于 2005-4-6 13:02:16

收下,学习^_^

铁雪龙 发表于 2005-4-9 20:16:24

哈哈

老大,搞得不错啊~~~谢谢拉

ihhvqu 发表于 2005-10-16 20:43:53

顶..............

第4、5、12、13课以及别的文章严重灌水! -20分!!希望尊重一下别人的劳动!By 飘云

gwp02 发表于 2005-10-21 12:56:46

Iceman 发表于 2005-11-4 11:37:57

好好学习。

wzwgp 发表于 2006-1-14 10:34:55

看见第四课了,真高兴。

谢谢总坛主!!!

kingdom 发表于 2006-1-16 18:33:04

感觉到难度了。。。。

wbhing 发表于 2006-2-13 01:06:35

复制一下,慢慢学习

菜儿 发表于 2006-3-3 20:31:07

垫底算法分析入门第二课
页: [1] 2 3 4
查看完整版本: [PYG]算法分析入门第四课