playboysen 发表于 2008-11-5 08:20:34

Smart PC Suite算法分析+dll类型破解通用方法+源码

【破文标题】Smart PC Suite算法分析+dll类型破解通用方法+源码
【破文作者】Playboysen
【作者邮箱】[email protected]
【破解工具】PEiD,OD
【破解平台】Windows XP
【软件名称】Smart PC Suite
【软件大小】10 MB
【软件授权】共享版($59.95)
【软件语言】英文
【原版下载】http://smartpctools.com/products/
【保护方式】用户名、注册码
【软件简介】使您的电脑运行速度更快,保护您的安全和恢复丢失的数据的唯一软件套件您最需要的!修复您的计算机自己并使其加载和运行速度更快。清理注册表错误和照顾病毒和间谍软件,确保您的个人隐私,并恢复已删除的档案
【破解声明】一点心得,愿与大家分享o(∩_∩)o 版权所有,转载注明作者!
【破解内容】
自从上次写完“MP3 WAV OGG WMA AC3 to CD Burner算法分析+简单逆向汇编”至今已经快两个月了,临近毕业,每天为生计奔波,找份工作好难,前途未卜,也没心情搞分析,不过偶尔练习一下,不致手生而已,一点心得,与君分享。
今天我们来研究一个国外公司的几款商业是软件,入手点是Smart PC Suite(我专门挑选的售价较贵的o(∩_∩)o),总的感觉,这个公司的程序员很傻很天真,看完此文章你就明白我的话了~~~

   主程序查壳Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks,用Arma Find Protected检测<------- 05-11-2008 06:56:49 ------->
C:\Documents and Settings\Administrator\桌面\{app}\SmartPCSuite.exe
!- Protected Armadillo
Protection system (Basic)
!- <Protection Options>
Standard protection or Minimum protection
!- <Backup Key Options>
Fixed Backup Keys
!- <Compression Options>
Better/Slower Compression
!- <Other Options>
!- Version 4.48 14August2006脱壳So easy,不多说,脚本搞定(Armadillo.V4.0-V5.X.eXe.Standard.Protection.By.fly.oSc),不过要提醒大家,虽然是标准壳但是不要用脱壳机,因为此程序加了双层壳,脱壳机太傻,搞不定的013FE001    60            pushad                      ; This is the OEP!Found By: fly
013FE002    E8 03000000   call    013FE00A            ;看到没?脚本停在这里,Aspack,第二层            
013FE007- E9 EB045D45   jmp   469CE4F7
013FE00C    55            push    ebp
013FE00D    C3            retn
013FE00E    E8 01000000   call    013FE014
013FE013    EB 5D         jmp   short 013FE072
013FE015    BB EDFFFFFF   mov   ebx, -13ESP定律后dump,修复搞定,掠过~~~

试运行注册有错误提示,OD加载脱壳程序搜索相关字符到这里004AF962    E8 6552F5FF   call    00404BCC
004AF967    83F8 03         cmp   eax, 3
004AF96A    7D 47         jge   short 004AF9B3
004AF96C    68 18FC4A00   push    004AFC18                         ; name must have no less than three symbols!
004AF971    8D45 F0         lea   eax, dword ptr
004AF974    50            push    eax
004AF975    A1 2CDA4E00   mov   eax, dword ptr
004AF97A    8B00            mov   eax, dword ptr
004AF97C    B9 4CFC4A00   mov   ecx, 004AFC4C                  ; message9
004AF981    BA 60FC4A00   mov   edx, 004AFC60                  ; evaluation
004AF986    8B18            mov   ebx, dword ptr
004AF988    FF13            call    dword ptr
004AF98A    8B55 F0         mov   edx, dword ptr
004AF98D    A1 04DB4E00   mov   eax, dword ptr
004AF992    8B00            mov   eax, dword ptr
004AF994    8B80 04030000   mov   eax, dword ptr
004AF99A    E8 3D2BFBFF   call    004624DC
004AF99F    A1 04DB4E00   mov   eax, dword ptr
004AF9A4    8B00            mov   eax, dword ptr
004AF9A6    8B10            mov   edx, dword ptr
004AF9A8    FF92 EC000000   call    dword ptr
004AF9AE    E9 F0010000   jmp   004AFBA3
004AF9B3    8D55 EC         lea   edx, dword ptr
004AF9B6    8B83 20030000   mov   eax, dword ptr
004AF9BC    E8 EB2AFBFF   call    004624AC
004AF9C1    8B45 EC         mov   eax, dword ptr
004AF9C4    E8 0352F5FF   call    00404BCC
004AF9C9    85C0            test    eax, eax
004AF9CB    75 47         jnz   short 004AFA14
004AF9CD    68 74FC4A00   push    004AFC74                         ; fields for license key must not be less three symbols!
004AF9D2    8D45 E8         lea   eax, dword ptr
004AF9D5    50            push    eax
004AF9D6    A1 2CDA4E00   mov   eax, dword ptr
004AF9DB    8B00            mov   eax, dword ptr
004AF9DD    B9 B4FC4A00   mov   ecx, 004AFCB4                  ; message10
004AF9E2    BA 60FC4A00   mov   edx, 004AFC60                  ; evaluation
004AF9E7    8B18            mov   ebx, dword ptr
004AF9E9    FF13            call    dword ptr
004AF9EB    8B55 E8         mov   edx, dword ptr
004AF9EE    A1 04DB4E00   mov   eax, dword ptr
004AF9F3    8B00            mov   eax, dword ptr
004AF9F5    8B80 04030000   mov   eax, dword ptr
004AF9FB    E8 DC2AFBFF   call    004624DC
004AFA00    A1 04DB4E00   mov   eax, dword ptr
004AFA05    8B00            mov   eax, dword ptr
004AFA07    8B10            mov   edx, dword ptr
004AFA09    FF92 EC000000   call    dword ptr
004AFA0F    E9 8F010000   jmp   004AFBA3
004AFA14    8D55 E0         lea   edx, dword ptr
004AFA17    8B83 1C030000   mov   eax, dword ptr
004AFA1D    E8 8A2AFBFF   call    004624AC
004AFA22    8B45 E0         mov   eax, dword ptr
004AFA25    8D55 E4         lea   edx, dword ptr
004AFA28    E8 AF9BF5FF   call    004095DC
004AFA2D    8B55 E4         mov   edx, dword ptr
004AFA30    A1 00D74E00   mov   eax, dword ptr
004AFA35    E8 164FF5FF   call    00404950
004AFA3A    8D55 D8         lea   edx, dword ptr
004AFA3D    8B83 20030000   mov   eax, dword ptr
004AFA43    E8 642AFBFF   call    004624AC
004AFA48    8B45 D8         mov   eax, dword ptr
004AFA4B    8D55 DC         lea   edx, dword ptr
004AFA4E    E8 899BF5FF   call    004095DC
004AFA53    8B55 DC         mov   edx, dword ptr
004AFA56    A1 4CD54E00   mov   eax, dword ptr
004AFA5B    E8 F04EF5FF   call    00404950
004AFA60    A1 00D74E00   mov   eax, dword ptr
004AFA65    8B00            mov   eax, dword ptr
004AFA67    50            push    eax
004AFA68    B9 C8FC4A00   mov   ecx, 004AFCC8                  ; licuser
004AFA6D    BA D8FC4A00   mov   edx, 004AFCD8                  ;

software\microsoft\windows\currentversion\settings\smart pc suite
004AFA72    B8 01000080   mov   eax, 80000001
004AFA77    E8 BC46FFFF   call    004A4138
004AFA7C    A1 4CD54E00   mov   eax, dword ptr
004AFA81    8B00            mov   eax, dword ptr
004AFA83    50            push    eax
004AFA84    BA D8FC4A00   mov   edx, 004AFCD8                  ;

software\microsoft\windows\currentversion\settings\smart pc suite
004AFA89    B9 24FD4A00   mov   ecx, 004AFD24                  ; lickey
004AFA8E    B8 01000080   mov   eax, 80000001
004AFA93    E8 A046FFFF   call    004A4138
004AFA98    E8 FB6BFFFF   call    004A6698                         ; 绝对是关键call啊!!!!!
004AFA9D    8B15 CCD94E00   mov   edx, dword ptr       
004AFAA3    8802            mov   byte ptr , al
004AFAA5    A1 CCD94E00   mov   eax, dword ptr
004AFAAA    8038 00         cmp   byte ptr , 0
004AFAAD    74 75         je      short 004AFB24                   ; 关键跳!爆破点
004AFAAF    E8 54C3F5FF   call    0040BE08
004AFAB4    83C4 F8         add   esp, -8
004AFAB7    DD1C24          fstp    qword ptr
004AFABA    9B            wait
004AFABB    BA D8FC4A00   mov   edx, 004AFCD8                  ;

software\microsoft\windows\currentversion\settings\smart pc suite
004AFAC0    B9 34FD4A00   mov   ecx, 004AFD34                  ; timefactor1
004AFAC5    B8 01000080   mov   eax, 80000001
004AFACA    E8 4D48FFFF   call    004A431C
004AFACF    E8 34C3F5FF   call    0040BE08
004AFAD4    83C4 F8         add   esp, -8
004AFAD7    DD1C24          fstp    qword ptr
004AFADA    9B            wait
004AFADB    BA D8FC4A00   mov   edx, 004AFCD8                  ;

software\microsoft\windows\currentversion\settings\smart pc suite
004AFAE0    B9 48FD4A00   mov   ecx, 004AFD48                  ; timefactor2
004AFAE5    B8 01000080   mov   eax, 80000001
004AFAEA    E8 2D48FFFF   call    004A431C
004AFAEF    68 5CFD4A00   push    004AFD5C                         ; thank you for registering smart pc suite!
004AFAF4    8D45 D4         lea   eax, dword ptr
004AFAF7    50            push    eax
004AFAF8    A1 2CDA4E00   mov   eax, dword ptr
004AFAFD    8B00            mov   eax, dword ptr
004AFAFF    B9 90FD4A00   mov   ecx, 004AFD90                  ; message11
004AFB04    BA 60FC4A00   mov   edx, 004AFC60                  ; evaluation
004AFB09    8B30            mov   esi, dword ptr
004AFB0B    FF16            call    dword ptr
004AFB0D    8B55 D4         mov   edx, dword ptr
004AFB10    A1 04DB4E00   mov   eax, dword ptr
004AFB15    8B00            mov   eax, dword ptr
004AFB17    8B80 04030000   mov   eax, dword ptr
004AFB1D    E8 BA29FBFF   call    004624DC
004AFB22    EB 69         jmp   short 004AFB8D
004AFB24    68 A4FD4A00   push    004AFDA4                         ; the registration info is incorrect!
004AFB29    8D45 CC         lea   eax, dword ptr
004AFB2C    50            push    eax毫无疑问,关键跳和关键call精确定位,进入004AFA98的call分析算法004A66A0    57            push    edi
004A66A1    33C0            xor   eax, eax
004A66A3    8945 F0         mov   dword ptr , eax
004A66A6    8945 F4         mov   dword ptr , eax
004A66A9    33C0            xor   eax, eax
004A66AB    55            push    ebp
004A66AC    68 14684A00   push    004A6814
004A66B1    64:FF30         push    dword ptr fs:
004A66B4    64:8920         mov   dword ptr fs:, esp
004A66B7    33DB            xor   ebx, ebx
004A66B9    A1 E0F24E00   mov   eax, dword ptr
004A66BE    E8 09E5F5FF   call    00404BCC                         ; 用户名长度和4比较
004A66C3    83F8 04         cmp   eax, 4
004A66C6    0F8C 2D010000   jl      004A67F9
004A66CC    A1 E4F24E00   mov   eax, dword ptr
004A66D1    E8 F6E4F5FF   call    00404BCC                         ; 假码长度和4比较
004A66D6    83F8 04         cmp   eax, 4
004A66D9    0F8C 1A010000   jl      004A67F9
004A66DF    8D45 F4         lea   eax, dword ptr
004A66E2    B9 2C684A00   mov   ecx, 004A682C                  ; ASCII "SmartPCSuite.dll"
004A66E7    8B15 54F24E00   mov   edx, dword ptr           ; 软件根目录地址放入
004A66ED    E8 26E5F5FF   call    00404C18
004A66F2    8B45 F4         mov   eax, dword ptr          ; 得到SmartPCSrute.dll的绝对路径
004A66F5    E8 4E38F6FF   call    00409F48
004A66FA    84C0            test    al, al
004A66FC    0F84 F7000000   je      004A67F9
004A6702    B9 48684A00   mov   ecx, 004A6848                  ; ASCII "TimeFactor2"
004A6707    BA 5C684A00   mov   edx, 004A685C                  ; ASCII

"SOFTWARE\Microsoft\Windows\CurrentVersion\Settings\Smart PC Suite"
004A670C    B8 01000080   mov   eax, 80000001
004A6711    E8 B2DDFFFF   call    004A44C8                         ; 上面这里在检测软件是否已注册,爆破点
004A6716    84C0            test    al, al
004A6718    74 3E         je      short 004A6758
004A671A    BA 5C684A00   mov   edx, 004A685C                  ; ASCII

"SOFTWARE\Microsoft\Windows\CurrentVersion\Settings\Smart PC Suite"
004A671F    B9 48684A00   mov   ecx, 004A6848                  ; ASCII "TimeFactor2"
004A6724    B8 01000080   mov   eax, 80000001
004A6729    E8 42D9FFFF   call    004A4070
004A672E    DD5D F8         fstp    qword ptr
004A6731    9B            wait
004A6732    FF75 FC         push    dword ptr
004A6735    FF75 F8         push    dword ptr
004A6738    FF35 F0F24E00   push    dword ptr
004A673E    FF35 ECF24E00   push    dword ptr
004A6744    E8 F3CBFEFF   call    0049333C
004A6749    85C0            test    eax, eax
004A674B    0F8C A8000000   jl      004A67F9
004A6751    B3 01         mov   bl, 1
004A6753    E9 A1000000   jmp   004A67F9
004A6758    8D45 F0         lea   eax, dword ptr
004A675B    B9 2C684A00   mov   ecx, 004A682C                  ; ASCII "SmartPCSuite.dll"
004A6760    8B15 54F24E00   mov   edx, dword ptr
004A6766    E8 ADE4F5FF   call    00404C18
004A676B    8B45 F0         mov   eax, dword ptr           ; 得到SmartPCSrute.dll的绝对路径
004A676E    E8 59E6F5FF   call    00404DCC
004A6773    50            push    eax
004A6774    E8 970CF6FF   call    <jmp.&kernel32.LoadLibraryA>   ; 加载SmartPCSrute.dll
004A6779    8BF8            mov   edi, eax                        
004A677B    68 F4010000   push    1F4
004A6780    E8 178BF6FF   call    <jmp.&kernel32.Sleep>
004A6785    85FF            test    edi, edi
004A6787    74 70         je      short 004A67F9
004A6789    68 A0684A00   push    004A68A0                         ; ASCII "InstallKey"
004A678E    57            push    edi
004A678F    E8 C40BF6FF   call    <jmp.&kernel32.GetProcAddress>   ; 得到函数地址
004A6794    89C6            mov   esi, eax
004A6796    68 F4010000   push    1F4
004A679B    E8 FC8AF6FF   call    <jmp.&kernel32.Sleep>
004A67A0    85F6            test    esi, esi
004A67A2    74 1A         je      short 004A67BE
004A67A4    A1 E4F24E00   mov   eax, dword ptr           ; 假码的存放地址
004A67A9    E8 1EE6F5FF   call    00404DCC
004A67AE    50            push    eax
004A67AF    A1 E0F24E00   mov   eax, dword ptr           ; 用户名的存放地址
004A67B4    E8 13E6F5FF   call    00404DCC
004A67B9    50            push    eax
004A67BA    FFD6            call    esi                              ; 调用Installkey函数
004A67BC    8BD8            mov   ebx, eax
004A67BE    68 AC684A00   push    004A68AC                         ; ASCII "CheckCode"
004A67C3    57            push    edi
004A67C4    E8 8F0BF6FF   call    <jmp.&kernel32.GetProcAddress>   ; 得到函数地址
004A67C9    89C6            mov   esi, eax
004A67CB    68 F4010000   push    1F4
004A67D0    E8 C78AF6FF   call    <jmp.&kernel32.Sleep>
004A67D5    85F6            test    esi, esi
004A67D7    74 1A         je      short 004A67F3
004A67D9    A1 E4F24E00   mov   eax, dword ptr           ; 假码的存放地址
004A67DE    E8 E9E5F5FF   call    00404DCC
004A67E3    50            push    eax
004A67E4    A1 E0F24E00   mov   eax, dword ptr           ; 用户名的存放地址
004A67E9    E8 DEE5F5FF   call    00404DCC
004A67EE    50            push    eax
004A67EF    FFD6            call    esi                              ; 调用CheckCode函数
004A67F1    8BD8            mov   ebx, eax                         ; 如果错误则eax返回0
004A67F3    57            push    edi
004A67F4    E8 7F0AF6FF   call    <jmp.&kernel32.FreeLibrary>      ; 释放SmartPCSuite.dll
004A67F9    33C0            xor   eax, eax
004A67FB    5A            pop   edx
004A67FC    59            pop   ecx
004A67FD    59            pop   ecx
004A67FE    64:8910         mov   dword ptr fs:, edx
004A6801    68 1B684A00   push    004A681B
004A6806    8D45 F0         lea   eax, dword ptr
004A6809    BA 02000000   mov   edx, 2
004A680E    E8 0DE1F5FF   call    00404920
004A6813    C3            retn
004A6814^ E9 27DAF5FF   jmp   00404240
004A6819^ EB EB         jmp   short 004A6806
004A681B    8BC3            mov   eax, ebx                         ;经典爆破点
004A681D    5F            pop   edi
004A681E    5E            pop   esi
004A681F    5B            pop   ebx
004A6820    8BE5            mov   esp, ebp
004A6822    5D            pop   ebp
004A6823    C3            retnOK,分析完毕,总结一下
1.程序启动检测注册表相关键值或者调用SmartPCSuite.dll来判断注册与否
2.调用软件根目录的SmartPCSuite.dll,使用其中的InstallKey和CheckCode函数进行注册验证
3.如果注册正确InstallKey和CheckCode返回1

我们见招拆招,几种方法:
1.爆破.相关爆破点已经明确标出,此法是小鸟所为,对其提高分析能力不利,不提倡,不多说;
2.修改004AFAAD关键跳,生成注册信息后,将相关键值提取出来,需要时在别机导入即可;
3.程序需要SmartPCSuite.dll,我们伪造一个SmartPCSuite.dll,此方法用处多多,是破解dll文件注册验证类型的经典狠招,推荐!
用Delphi 7构建一个dll文件,源码如下library Project2;
uses
SysUtils,
Classes;

{$R *.res}

function InstallKey(str1,str2:PChar):Boolean;Stdcall;
begin
result:=True;
end;

function CheckCode(str1,str2:PChar):Boolean;Stdcall;
begin
result:=True;
end;

exports
   InstallKey,CheckCode;

begin
end.然后把生成的dll改名为SmartPCSuite.dll替换软件根目录的SmartPCSuite.dll,发现程序正常运行,已注册!!

最后再说一下这个程序的几点不足,但愿其它程序员能引以为戒:
1.Armadillo当压缩壳用,几乎没有发挥强壳的任何作用,还使得主程序体积暴增,不智!
2.出现注册错误提示,而且相关字符并未加密,给别人以可乘之机,大大缩减了程序破解时间,大愚!
3.注册名和注册码没什么用,修改关键跳后生成的两个键值的注册信息才是关键,而注册名可以随便改,汗~~
4.没有重启验证,没有在关键函数处验证注册信息
5.没有自校验主程序和关键dll
6.过于看重软件界面,功能一般,启动缓慢,有些华而不实~~
7.……
再说下去,程序员就哭了,算了,只是给软件公司提点改进建议而已,没别的意思~~

playboysen 发表于 2008-11-5 08:41:15

经测试我们伪造的dll文件几乎能搞定此公司所有的商业软件,拿MagicSpeed来说,软件根目录下有一个MagicSpeed.dll,我们把伪造的dll改名为MagicSpeed.dll替代根目录中的文件,打开软件后提示注册,随便输入用户名和注册码都可以正确注册,而且以后再打开则不需重新注册即为正版,其它软件大同小异

同理FixMyRegistry则替代FixMyRegistry.dll等等,脱壳什么的都不需要

原理很简单,此公司所有软件的验证dll中的验证函数都是InstallKey和CheckCode,而且注册码正确都是返回True,所有我们就顺水推舟,直接搞定他们了,哎~~

[ 本帖最后由 playboysen 于 2008-11-5 20:24 编辑 ]

playboysen 发表于 2008-11-5 20:26:37

本篇文章和前段时间写的两篇文章呼应,都是针对dll验证类型的分析破解,总结如下:

类型一、调用dll文件压入相关参数然后返回注册码的破解分析
https://www.chinapyg.com/viewthread.php?tid=38540&highlight=%2Bplayboysen

类型二、纯粹dll验证,根据注册信息的正确与否返回相关的值,破解方法如本篇文章

类型三、dll插件型的破解,如千千静听插件等等
https://www.chinapyg.com/viewthread.php?tid=34087&highlight=%2Bplayboysen

当然如果软件校验主程序和dll文件的话,免不了要先解除校验的。
至此dll验证类型的破解分析告一段落,再碰到相关的软件再进行补充,希望能给大家提供一点思路,以开拓视野

neu21 发表于 2008-11-5 22:24:41

精彩 精辟 佩服之极 学习了谢谢楼主分享

paulhou 发表于 2008-11-6 17:03:47

呵呵。。在unpackchina也看到你的这篇文章了。。顶一下。。。

qifeon 发表于 2008-11-6 21:31:46

很精彩,很强大。

wangwei628 发表于 2008-11-6 22:03:02

好东西
学习了

mfch666 发表于 2008-11-7 11:52:40

不错的东西 好好学习 天天向上

qjnan 发表于 2008-11-7 14:09:38

虽然看不太明白,但还是帮顶。我下载个来看看,对照可能就清楚了。

crackiss 发表于 2009-1-24 18:35:59

这也太强大了。。。看得好激动。。。
页: [1]
查看完整版本: Smart PC Suite算法分析+dll类型破解通用方法+源码