首页
社区
课程
招聘
带狗杀TDSD狗并解除自校验
发表于: 2008-9-4 08:26 9577

带狗杀TDSD狗并解除自校验

2008-9-4 08:26
9577
【文章标题】: 带狗杀TDSD狗并解除自校验,(其实不应该叫解除,应该叫爆破)
【文章作者】: nahum[FCG]
【作者邮箱】: [email]nahum@163.com[/email]
【软件名称】: 商业软件暂时保密
【下载地址】: 无地址
【加壳方式】: 狗壳
【保护方式】: 并口加密狗
【编写语言】: VB
【使用工具】: peid,OD,C32Asm
【操作平台】: XP
【软件介绍】: 商业软件不做介绍了。
【作者声明】: 这个是本人破解的第8只狗了,只从事破解,不进行复制(关键是不会)。只为研究学习和交流,没有任何商业目的,也不从事商业破解。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  无狗可安装,PEID不能识别的壳。运行报错,提示Can't find SoftDog!,好就从他入手吧,使用C32asm
  字符串查找到:
  ::00500B47::  FF05 00605000            INC DWORD PTR [506000]                  \:BYJMP JmpBy:00500B3B,
  ::00500B4D::  A1 2A605000              MOV EAX,[50602A]                        
  ::00500B52::  3305 00605000            XOR EAX,[506000]                        
  ::00500B58::  A3 26605000              MOV [506026],EAX                        
  ::00500B5D::  833D 7C605000 00         CMP DWORD PTR [50607C],0                \:BYJMP JmpBy:00500B45,
  ::00500B64::  74 19                    JE SHORT 00500B7F                       《 关键位置,看看调用他的CALL
  ::00500B66::  68 00100000              PUSH 1000                              
  ::00500B6B::  68 486B5000              PUSH 506B48                                 \->: Hint
  ::00500B70::  68 506B5000              PUSH 506B50                                 \->: Please Plug SoftDog!
  ::00500B75::  6A 00                    PUSH 0                                 
  ::00500B77::  FF15 B8815000            CALL [5081B8]                               >>>: USER32.DLL:MessageBoxA
  ::00500B7D::  EB 17                    JMP SHORT 00500B96                      \:JMPDOWN
  ::00500B7F::  68 00100000              PUSH 1000                               \:BYJMP JmpBy:00500B64,
  ::00500B84::  68 686B5000              PUSH 506B68                                 \->: Error
  ::00500B89::  68 706B5000              PUSH 506B70                                 \->:     Can't find SoftDog!     
  ::00500B8E::  6A 00                    PUSH 0                                 
  ::00500B90::  FF15 B8815000            CALL [5081B8]                               >>>: USER32.DLL:MessageBoxA
  ::00500B96::  6A FF                    PUSH -1                                 \:BYJMP JmpBy:00500B7D,
  ::00500B98::  FF15 A0815000            CALL [5081A0]                               >>>: KERNEL32.DLL:ExitProcess
  ::00500B9E::  5F                       POP EDI                                 
  ::00500B9F::  5E                       POP ESI                                 
  ::00500BA0::  5B                       POP EBX                                 
  ::00500BA1::  C9                       LEAVE                                   
  ::00500BA2::  C3                       RETN   
  调用的call
  ::004FFD1E::  A3 90715000              MOV [507190],EAX                        
  ::004FFD23::  C705 94715000 00000000   MOV DWORD PTR [507194],0               
  ::004FFD2D::  E8 1A160000              CALL 0050134C                           看来这里读狗了跟进看看
  ::004FFD32::  8945 C0                  MOV [EBP-40],EAX                        EAX为0则有狗,不出现提示,先不动这里
  ::004FFD35::  837D C0 00               CMP DWORD PTR [EBP-40],0               
  ::004FFD39::  74 05                    JE SHORT 004FFD40                       \:JMPDOWN
  ::004FFD3B::  E8 EE0D0000              CALL 00500B2E                           出错调用,提示无狗。
  ::004FFD40::  8B45 C0                  MOV EAX,[EBP-40]                        \:BYJMP JmpBy:004FFD39,
  ::004FFD43::  EB 00                    JMP SHORT 004FFD45                      \:JMPDOWN
  ::004FFD45::  5F                       POP EDI                                 \:BYJMP JmpBy:004FFC0B,004FFCED,004FFD43,
  ::004FFD46::  5E                       POP ESI                                 
  ::004FFD47::  5B                       POP EBX                                 
  ::004FFD48::  C9                       LEAVE                                   
  ::004FFD49::  C3                       RETN  
  跟进的CALL
  ::0050134C::  52                       PUSH EDX                                \:BYCALL CallBy:004FFD2D,
  ::0050134D::  51                       PUSH ECX                                
  ::0050134E::  68 8E145000              PUSH 50148E                                 \->: U嬱婨\x08f?\x04u\x1F隲x01艐\x15恞P
  ::00501353::  68 65135000              PUSH 501365                                 \->: U嬱Vz\x03{\x01?纜\x03}\x01閶M\x08\x0F穃x11呉tR凓\x04t\x1Du\x03t\x01歉U?
  ::00501358::  6A 00                    PUSH 0                                 
  ::0050135A::  E8 8A280000              CALL 00503BE9                          继续跟进
  ::0050135F::  83C4 0C                  ADD ESP,C                              
  ::00501362::  59                       POP ECX                                 
  ::00501363::  5A                       POP EDX                                 
  ::00501364::  C3                       RETN            
  跟进的call里面有大量花指令,看来到了关键位置,花指令太多,跟踪太困难,干脆下载KILLFOLWER清除花指令后再跟进,这个步骤很关键,下文再说。
  跟踪到关键位置
  ::00504260::  45                       INC     EBP                             
  ::00504261::  FC                       CLD                                    
  ::00504262::  7A 03                    JPE     SHORT 00504267                  \:JMPDOWN
  ::00504264::  7B 01                    JPO     SHORT 00504267                  \:JMPDOWN
  ::00504266::  06                       PUSH    ES                              
  ::00504267::  85C0                     TEST    EAX, EAX                        
  ::00504269::  0F85 8A030000            JNZ     005045F9                        跳则出错,直接修改为NOP
  ::0050426F::  70 03                    JO      SHORT 00504274                  \:JMPDOWN
  ::00504271::  71 01                    JNO     SHORT 00504274                  \:JMPDOWN
  ::00504273::  93                       XCHG    EAX, EBX                        
  ::00504274::  EB 31                    JMP     SHORT 005042A7                  \:JMPDOWN\:BYJMP JmpBy:0050426F,00504271,
  ::00504276::  51                       PUSH    ECX  
  去狗可运行,好了,感觉完成了。
  但是问题出现了,程序运行2分钟后,只要有操作就报错,内存某个地方不可读,地址还是随机的。那里处问题了??
  继续看程序,发现就算是带狗运行,只要你修改程序的任意字节,程序就报错。看来是自校验的问题。
  网上搜集资料,这方面的不是很多。本人很菜,只能爆破狗,算法根本就不懂弄自校验根本不行。本人一直认为是这个程序的狗壳加入了自校验的程序,而且每两分钟检测一次。如果修改两分钟的限制,延长到长一点的时间,不就能解决问题了。
  然而从那里下断点呢?     肯定要读狗那就用greatefilea下断点。
  果然截获如下:
  00504AD1    6A 00           push    0
  00504AD3    68 80000000     push    80
  00504AD8    6A 03           push    3
  00504ADA    6A 00           push    0
  00504ADC    6A 07           push    7
  00504ADE    68 000000C0     push    C0000000
  00504AE3    68 846D5000     push    00506D84                         ; ASCII "\\.\LPTDI1"
  00504AE8    FF15 3C815000   call    dword ptr [<&KERNEL32.CreateFile>; kernel32.CreateFileA 断到这里
  00504AEE    83F8 FF         cmp     eax, -1
  00504AF1    8945 08         mov     dword ptr [ebp+8], eax
  00504AF4    75 1F           jnz     short 00504B15
  00504AF6    FF15 40815000   call    dword ptr [<&KERNEL32.GetLastErr>; ntdll.RtlGetLastWin32Error
  00504AFC    83F8 05         cmp     eax, 5
  00504AFF    75 0E           jnz     short 00504B0F
  00504B01    6A 64           push    64
  00504B03    FF15 B0815000   call    dword ptr [<&KERNEL32.Sleep>]    ; kernel32.Sleep
  00504B09    46              inc     esi
  00504B0A    83FE 64         cmp     esi, 64
  00504B0D  ^ 7C C2           jl      short 00504AD1
  00504B0F    837D 08 FF      cmp     dword ptr [ebp+8], -1
  00504B13    74 51           je      short 00504B66
  00504B15    33F6            xor     esi, esi
  00504B17    3935 F46C5000   cmp     dword ptr [506CF4], esi
  00504B1D    75 41           jnz     short 00504B60
  00504B1F    8D45 08         lea     eax, dword ptr [ebp+8]
  00504B22    50              push    eax
  00504B23    57              push    edi
  00504B24    E8 95000000     call    00504BBE
  00504B29    59              pop     ecx
  00504B2A    85C0            test    eax, eax
  00504B2C    59              pop     ecx
  00504B2D    74 18           je      short 00504B47
  00504B2F    3D 88660000     cmp     eax, 6688
  00504B34    75 26           jnz     short 00504B5C
  00504B36    68 F4010000     push    1F4
  00504B3B    FF15 B0815000   call    dword ptr [<&KERNEL32.Sleep>]    ; kernel32.Sleep
  00504B41    46              inc     esi
  00504B42    83FE 03         cmp     esi, 3
  00504B45  ^ 7C D8           jl      short 00504B1F
  00504B47    83FE 03         cmp     esi, 3
  00504B4A    75 14           jnz     short 00504B60
  00504B4C    BE 1A4F0000     mov     esi, 4F1A
  00504B51    FF75 08         push    dword ptr [ebp+8]
  00504B54    FF15 48815000   call    dword ptr [<&KERNEL32.CloseHandl>; kernel32.CloseHandle
  00504B5A    EB 5B           jmp     short 00504BB7
  00504B5C    8BF0            mov     esi, eax
  00504B5E  ^ EB F1           jmp     short 00504B51
  00504B60    837D 08 FF      cmp     dword ptr [ebp+8], -1
  00504B64    75 07           jnz     short 00504B6D
  00504B66    B8 244E0000     mov     eax, 4E24
  00504B6B    EB 4C           jmp     short 00504BB9
  00504B6D    8B75 0C         mov     esi, dword ptr [ebp+C]
  00504B70    8D45 FC         lea     eax, dword ptr [ebp-4]
  00504B73    6A 00           push    0
  00504B75    50              push    eax
  00504B76    6A 68           push    68
  00504B78    56              push    esi
  00504B79    8D47 08         lea     eax, dword ptr [edi+8]
  00504B7C    53              push    ebx
  00504B7D    50              push    eax
  00504B7E    FFB7 84000000   push    dword ptr [edi+84]
  00504B84    FF75 08         push    dword ptr [ebp+8]
  00504B87    FF15 A8815000   call    dword ptr [<&KERNEL32.DeviceIoCo>; kernel32.DeviceIoControl 这个不陌生吧
  00504B8D    85C0            test    eax, eax
  00504B8F    74 04           je      short 00504B95
  00504B91    8B36            mov     esi, dword ptr [esi]
  00504B93    EB 09           jmp     short 00504B9E
  00504B95    B8 244E0000     mov     eax, 4E24
  00504B9A    8906            mov     dword ptr [esi], eax
  00504B9C    8BF0            mov     esi, eax
  00504B9E    FF75 08         push    dword ptr [ebp+8]
  00504BA1    FF15 48815000   call    dword ptr [<&KERNEL32.CloseHandl>; kernel32.CloseHandle
  00504BA7    85C0            test    eax, eax
  00504BA9    75 04           jnz     short 00504BAF
  00504BAB    834D 08 FF      or      dword ptr [ebp+8], FFFFFFFF
  00504BAF    6A 64           push    64
  00504BB1    FF15 B0815000   call    dword ptr [<&KERNEL32.Sleep>]    ; kernel32.Sleep
  00504BB7    8BC6            mov     eax, esi
  00504BB9    5F              pop     edi
  00504BBA    5E              pop     esi
  00504BBB    5B              pop     ebx
  00504BBC    C9              leave
  00504BBD    C3              retn
  
  查看调用他的call 在网上找call一直往上找,最后找到这个位置:
  004FDD55    8B0D 26605000   mov     ecx, dword ptr [506026]  这里好像有点意思,跟踪一下看看,下断点。
  004FDD5B    330D 2A605000   xor     ecx, dword ptr [50602A]
  004FDD61    8B45 E0         mov     eax, dword ptr [ebp-20]
  004FDD64    2B05 08715000   sub     eax, dword ptr [507108]
  004FDD6A    BB E8030000     mov     ebx, 3E8
  004FDD6F    2BD2            sub     edx, edx
  004FDD71    F7F3            div     ebx
  004FDD73    3BC8            cmp     ecx, eax
  004FDD75    76 13           jbe     short 004FDD8A
  004FDD77    8B45 E4         mov     eax, dword ptr [ebp-1C]
  004FDD7A    8945 04         mov     dword ptr [ebp+4], eax
  004FDD7D    5F              pop     edi
  004FDD7E    5E              pop     esi
  004FDD7F    5A              pop     edx
  004FDD80    59              pop     ecx
  004FDD81    5B              pop     ebx
  004FDD82    58              pop     eax
  004FDD83    C9              leave
  004FDD84    C3              retn
  004FDD85    E9 D5000000     jmp     004FDE5F
  004FDD8A    8B45 E0         mov     eax, dword ptr [ebp-20]
  004FDD8D    A3 08715000     mov     dword ptr [507108], eax
  004FDD92    E8 AF1C0000     call    004FFA46
  004FDD97    7E 03           jle     short 004FDD9C
  004FDD99    7F 01           jg      short 004FDD9C
  004FDD9B    BA A0BE6250     mov     edx, 5062BEA0
  004FDDA0    0088 45A0C745   add     byte ptr [eax+45C7A045], cl
  004FDDA6    98              cwde
  004FDDA7    0000            add     byte ptr [eax], al
  004FDDA9    0000            add     byte ptr [eax], al
  004FDDAB    EB 03           jmp     short 004FDDB0
  004FDDAD    FF45 98         inc     dword ptr [ebp-68]
  004FDDB0    817D 98 0001000>cmp     dword ptr [ebp-68], 100
  004FDDB7    7D 15           jge     short 004FDDCE
  004FDDB9    8B45 98         mov     eax, dword ptr [ebp-68]
  004FDDBC    8A80 DA635000   mov     al, byte ptr [eax+5063DA]
  004FDDC2    8B4D 98         mov     ecx, dword ptr [ebp-68]
  004FDDC5    888429 98FEFFFF mov     byte ptr [ecx+ebp-168], al
  004FDDCC  ^ EB DF           jmp     short 004FDDAD
  004FDDCE    C745 98 0000000>mov     dword ptr [ebp-68], 0
  004FDDD5    EB 03           jmp     short 004FDDDA
  004FDDD7    FF45 98         inc     dword ptr [ebp-68]
  004FDDDA    817D 98 0001000>cmp     dword ptr [ebp-68], 100
  004FDDE1    7D 42           jge     short 004FDE25
  004FDDE3    8B45 98         mov     eax, dword ptr [ebp-68]
  004FDDE6    33C9            xor     ecx, ecx
  004FDDE8    8A88 DA625000   mov     cl, byte ptr [eax+5062DA]
  004FDDEE    8A8429 98FEFFFF mov     al, byte ptr [ecx+ebp-168]
  004FDDF5    8845 9C         mov     byte ptr [ebp-64], al
  004FDDF8    8B45 98         mov     eax, dword ptr [ebp-68]
  004FDDFB    33C9            xor     ecx, ecx
  004FDDFD    8A88 DA625000   mov     cl, byte ptr [eax+5062DA]
  004FDE03    324D A0         xor     cl, byte ptr [ebp-60]
  004FDE06    8B45 98         mov     eax, dword ptr [ebp-68]
  004FDE09    8888 DA625000   mov     byte ptr [eax+5062DA], cl
  004FDE0F    8A45 9C         mov     al, byte ptr [ebp-64]
  004FDE12    8B4D 98         mov     ecx, dword ptr [ebp-68]
  004FDE15    33D2            xor     edx, edx
  004FDE17    8A91 DA625000   mov     dl, byte ptr [ecx+5062DA]
  004FDE1D    8882 DA635000   mov     byte ptr [edx+5063DA], al
  004FDE23  ^ EB B2           jmp     short 004FDDD7
  004FDE25    51              push    ecx
  004FDE26    31C9            xor     ecx, ecx
  004FDE28    E3 01           jecxz   short 004FDE2B
  004FDE2A    BF 59833D74     mov     edi, 743D8359
  004FDE2F    60              pushad
  004FDE30    50              push    eax
  004FDE31    0000            add     byte ptr [eax], al
  004FDE33    74 09           je      short 004FDE3E
  004FDE35    833D 78605000 0>cmp     dword ptr [506078], 0
  004FDE3C    74 14           je      short 004FDE52
  004FDE3E    E8 501D0000     call    004FFB93 找到这个CALL,别着急往上看
  
  关键位置在这里
  004FDD55    8B0D 26605000   mov     ecx, dword ptr [506026]  返回值是79H正好是121秒
  004FDD5B    330D 2A605000   xor     ecx, dword ptr [50602A]
  004FDD61    8B45 E0         mov     eax, dword ptr [ebp-20]
  004FDD64    2B05 08715000   sub     eax, dword ptr [507108]
  004FDD6A    BB E8030000     mov     ebx, 3E8
  004FDD6F    2BD2            sub     edx, edx
  004FDD71    F7F3            div     ebx
  004FDD73    3BC8            cmp     ecx, eax
  004FDD75    76 13           jbe     short 004FDD8A 跳则开始读狗。
  直接修改为
  mov ecx 999999
  则程序正常运行。
  
--------------------------------------------------------------------------------
【经验总结】
  通过以上过程总结如下:1、TDSD狗的花指令正是一个很好的标志,花指令多的位置就是关键位置。2、这个是个嵌入式的应
  用,所谓嵌入,是加密工具在被加密程序中嵌入一个公共程序,加密程序在整个运行期内以一定的频率执行这个公共程序,
  该程序检查软件狗的存在性和一致性。如果对应的软件狗存在,则继续执行原程序,否则终止程序。本加密方式可选。3、
  本人很菜只能用笨招来打狗,应该学习点算法知识。技术含量不高,大家凑或看吧。
  在此感谢LAOQIAN[FCG],刺猬【DCG】的指教。
  
--------------------------------------------------------------------------------
【版权声明】: 技术含量不高,大家凑或看吧。本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年09月03日 8:31:01

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
最近很懒,实在懒得写东西,最近得点闲,写点吧。
2008-9-4 08:32
0
雪    币: 244
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
呵呵,不错,谢谢分享
复制硬件狗有难度
2008-9-4 08:59
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
4
::00500B6B::  68 486B5000              PUSH 506B48                                 \->: Hint
  ::00500B70::  68 506B5000              PUSH 506B50                                 \->: Please Plug SoftDog!

应该是 Please Insert SoftDog! 呵呵,作者...
2008-9-5 02:48
0
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵呵,事实证明是Can't find SoftDog!
2008-9-5 13:59
0
雪    币: 334
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好文章 天下无狗
2008-9-5 17:06
0
雪    币: 197
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好文章,介绍解狗技术的文章不多,感谢分享!
2008-9-5 21:32
0
雪    币: 359
活跃值: (429)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这狗加了等于白加,
2008-9-8 22:01
0
雪    币: 463
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
太老了..... 现在用这个的人不多了吧.

都UMI了,,
2008-9-9 22:57
0
雪    币: 200
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我只是提供一条解狗的思路。
2008-9-10 07:20
0
雪    币: 177
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
还是值得学习的
2008-9-11 21:25
0
雪    币: 209
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
好文章  我是初学者  有长进了  谢谢
2008-9-17 19:11
0
雪    币: 203
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好文章 学习.
2008-10-7 21:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
是很有难度的呀 谢谢  学习了``
2008-10-9 09:22
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我是菜鸟。看个新鲜。自学不容易啊。哎。。。
2008-10-26 22:13
0
游客
登录 | 注册 方可回帖
返回
//