国产某文件夹加密软件全面分析
工具OD,DeDe,记事本,还有不知道算不算是,DOS方式下的Dir命令
软件号称:国防级的加密强度!让我们看看,它的真面目吧!
1.反调试:
有两处调用FindWindows检查进行中是否有TDedeMainForm,和Olldby,如果有,发送WM_QUIT结束进程.
用Olldbg加载,查找FindWindows或TDedeMainForm,OllDbg,修改JE为JMP,跳过检查.
2.次数限制:用DeDe查看DPR工程入口发现
* Possible String Reference to: '\SOFTWARE\软件注册信息'
004E6570 BA18714E00 mov edx, $004E7118
发现一个文件,'msimtf.dll?',注意文件名后面有空格,运行后发现,此文件是运行次数的记录,用打开一次,就+1.
由于软件有30次限制,此文件内容记录了运行次数,手工修改手,发现,记录恢复,继续跟踪后发现,运行次数还保存在注册表
'SOFTWARE\Macromedia\Dreamweaver\7' AutoUpdateTest中,我开始想不明白,怎么能和Dreamweaver有关,现在明白了,
同时修改这两处,次数限制取消了.
3.软件运行时密码设置:
用DeDe查看TForm7.Button1Click,发现,密码保存在注册表'\SOFTWARE\软件注册信息'下有
E ,设置密码1122对应的注册表是5566 1111对应是的5555 aabb对应的是eeff, 如果删除E后,就不需要密码了.这样加密也太简单了吧.
4.注册码的保存:
用Dede加载,找到注册窗口TForm6,输入注册码,首次不成功,发现调用 System.@LStrPos,检查了注册码应该有-
输入假码1111-1111后,提示重启后完成注册,同时保存注册码信息到de.dll和注册表'\SOFTWARE\软件注册信息'
注册表生成A qffhq,B 111111-111111,C qffhq@163.comggggggggggggggg
D 2,G 空,View 3
A为用户名,B为注册码,C为邮箱+16个'g'
5.注册码的校验:
找不到检查注册码的入口,从次数限制入手,
次数限制时代码如下:
004D9887 83B8B40300001E cmp dword ptr [eax+$03B4], +$1E ;比较次数是否为30次
004D988E 0F8E9B000000 jle 004D992F
004D9894 8B45FC mov eax, [ebp-$04]
* Reference to : TForm1.isright() 这个可能就是注册检查过程了.
004D9897 E85C5F0000 call 004DF7F8
004D989C 84C0 test al, al '直接修改al=1,开始执行加密过程,但软件会自动注销系统,后来发现,系统以后又检查了,如果修改后,软件会调用ExitWindows注销当前系统,很有意思!
004D989E 0F858B000000 jnz 004D992F
暴破过程
过程004DF7F8
004DF860 817D F8 80020>cmp dword ptr ss:[ebp-8],280 ; 280?
004DF867 |. 75 04 jnz short SVOHOST.004DF86D
004DF869 |. C645 FF 01 mov byte ptr ss:[ebp-1],1
004DF86D |> 33C0 xor eax,eax
修改:004DF860为cmp dword ptr ss:[ebp-8],0 ; 280?
004DF860 837D F8 00 cmp dword ptr ss:[ebp-8],0 ; 280==0?
004DF864 90 nop
004DF865 90 nop
004DF866 90 nop
004DF867 |. 75 04 jnz short SVOHOST.004DF86D
.....
最后.禁用注册标签按钮,用资源编辑工具修改 实现完美破解!
注销的校验:
004D9DA0 > \803D C8944E00>cmp byte ptr ds:[4E94C8],0
ds:[004E94C8]=01 Jump from 004D9D74
004D9DA7 . 74 0B je short SVOHOST.004D9DB4
004D9DA9 . 66:BA 0100 mov dx,1
004D9DAD . 33C0 xor eax,eax
004D9DAF . E8 C4DCF2FF call SVOHOST.00407A78 ; 注销
6.文件夹加密原理分析:
加密过的文件列表保存在danine.dll中.
加密过程:TForm1.Button1Click
加密前的校验:
经过密码不能为空,两次密码不相符,不能加密系统目录,桌面,我的文档,加密软件所在目录等,
不能本地或隐藏加密分区根目录,不能对网络数据进行本地或隐藏加密等检查后,进入加密过程.
加密过程开始:
004D9DB4 > \8D85 E4FEFFFF lea eax,dword ptr ss:[ebp-11C]
004D9DBA . 50 push eax
004D9DBB . 8D95 E0FEFFFF lea edx,dword ptr ss:[ebp-120]
004D9DC1 . 8B45 FC mov eax,dword ptr ss:[ebp-4]
004D9DC4 . 8B80 B8030000 mov eax,dword ptr ds:[eax+3B8]
004D9DCA . E8 3DF7F2FF call SVOHOST.0040950C
004D9DCF . 8B95 E0FEFFFF mov edx,dword ptr ss:[ebp-120]
取回收站目录: F:\RECYCLER\
生成文件名: F:\RECYCLED\desktop.ini,隐藏,系统文件,文件内容如下:
'[.ShellClassInfo]CLSID={645FF040-5081-101B-9F08-00AA002F954E}'
建立目录: 'S-1-5-21-1060284298-811497611-11778920086-500\'
生成文件名: F:\RECYCLED\S-1-5-21-1060284298-811497611-11778920086-500\desktop.ini
建立目录: F:\RECYCLED\S-1-5-21-1060284298-811497611-11778920086-500\INFO2\
建立目录: F:\RECYCLED\S-1-5-21-1060284298-811497611-11778920086-500\INFO2\Di1 \com1.{21ec2020-3aea-1069-a2dd-08002b30309d}\
查找文件是否存在(文件目录是否加密过): F:\RECYCLED\S-1-5-21-1060284298-811497611-11778920086-500\INFO2\Di1 \com1.{21ec2020-3aea-1069-a2dd-08002b30309d}\Support.mem 其它Support为加密的目录名
取Support的ASCII码"537570706F7274"
建立目录: F:\RECYCLED\S-1-5-21-1060284298-811497611-11778920086-500\INFO2\Di1 \com1.{21ec2020-3aea-1069-a2dd-08002b30309d}\537570706F7274"
移动文件: F:\Support\* 到F:\RECYCLED\S-1-5-21-1060284298-811497611-11778920086-500\INFO2\Di1 \com1.{21ec2020-3aea-1069-a2dd-08002b30309d}\537570706F7274"
生成文件名: F:\Support|.mem 表示F:\Support目录加密,mem为加密类型
生成加密记录文件名: "C:\WINNT\system32\danine.dll"
写入加密记录到加密记录文件: 向C:\WINNT\system32\danine.dll中写入F:\Support|.mem
生成加密记录文件名: "应用程序目录\danine.dll"
写入加密记录到加密记录文件: 向 应用程序目录\danine.dll中写入F:\Support|.mem
生成文件: F:\Support.mem 用于解密文件目录.
mem文件,显示的图标为文件夹,打开文件类型查看后发现:
注册的文件类型:.me0-.me25,.mem 这些文件的打开方式为:"应用程序目录\SVOHOST.EXE" unlock "%1"
最后,用户在F:\看到了Support.mem,其实是一个文件并不是目录!
以上是本地加密原理,对于移动型加密,我加密后,查看文件内容如下:
我对F:\qqproxy1进行了加密
加密后F:\qqproxy1\生成以下文件
文件 desktop.ini
[.ShellClassInfo]
InfoTip=文件夹
IconIndex=2
IconFile=!解密加密.exe
ConfirmFileOp=1
文件 !解密加密.exe 一个UPX加壳的EXE,可于解开加密的文件,可以脱离主程序运行.
文件夹 Thumbs.dn 内容如下:
文件 desktop.ini
[.ShellClassInfo]
CLSID={2227a280-3aea-1069-a2de-08002b30309d}
文件:117789687 117789687应该是从qqproxy1计算出来的!
文件:117789687LIST.mem 打开后是一串数字,估计是原来的F:\qqproxy1下的文件清单列表记录对照.
文件:1.mem,2.mem,.....7.mem 是原来的F:\qqproxy1下的7个文件,只是改名了,我用记事本打开了一个,一看和原来的一样,并且大小也没有变化.
解密过程:
具体过程没有分析,不过如果对加密过程清除了,解密当然就是反其道而行之了吧.
在对文件夹加密后,密码的保存:
这部分没有分析!
7.防删除功能分析:
通过在Windows启动时,加载主程序,限制用户不能删除文件,对本地类型的加密,一但丢失了.mem文件,及加密文件记录,数据就没办法恢复了,永远放到回收站了.
8.在Windows启动时自动加载分析:
Userinit注册键 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit。这里也能够使系统启动时自动初始化程序。
Userinit C:\WINNT\system32\userinit.exe,,"E:\SVOH0ST\HFEE\SVOHOST.EXE" un userinit.exe
9.其它:
通过命令列参数 Lock , UnLock 用于加密,解密菜单
以上是大概的分析,加密算法,由于水平有限,分析不了,其它好多分析用DeDe一目了然的!
原来看过,网上有加文件加密保护软件的资料,好多软件,都是用特殊文件夹,回收站,来做的,可靠性没办法说了!
希望和大家交流一下!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课