国产某文件夹加密软件全面分析
  工具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一目了然的!
原来看过,网上有加文件加密保护软件的资料,好多软件,都是用特殊文件夹,回收站,来做的,可靠性没办法说了!

希望和大家交流一下!

  • 标 题: re lxwqcy
  • 作 者:qffhq
  • 时 间:2005-12-26 08:59

请看直面的内容:
* 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? 我估计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

暴破方法修改TForm1.isright()  过程的004DF7F8
返回值,其实系统在好多位置调用了这个过程,所以,最好的办法是修改过程返回值为1
请看下面的内容:
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
其实修改
jnz short SVOHOST.004DF86D也可以,修改的方法就多了,只要达到目的就行了. 

其实去年最早看过8000的版本,记得是加过壳的,后来好不容易手工脱壳(不知道为什么这个版本没有加壳),上次也是修改了原来的加密过程后,系统自动注销,刚开始我不明白,后年多试了几次,才发现系统是这样保护的,注销过程也很好加断点,只要断ExitWindowsEx就行了,这一点倒有点新鲜,没见过其它软件这样搞的!