首页
社区
课程
招聘
令人费解的Anti-Debug
发表于: 2004-7-4 16:23 10087

令人费解的Anti-Debug

RoBa 活跃值
16
2004-7-4 16:23
10087
一个让人很郁闷的软件,一启动就是一堆的IsDebugPresent,CreateFile来检查调试器,不过这些还好说。更变态的是不能设断点(SOFTICE),一设API断点就自动退出,这是哪门子保护?没见过呀高手指点。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (23)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
常见的
有壳?

可以把API断点向下挪几行下断
如BP ZwQueryInformationProcess+0A
等等
2004-7-4 16:35
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
3
往下挪不行,我试过了,一样要退出。
我再看看是不是所有的API都不行。
2004-7-4 17:36
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
4
连SwapMouseButton这样八竿子打不着的API都不行
2004-7-4 17:54
0
雪    币: 107
活跃值: (811)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
把软件传上来让大家看看好吧?
2004-7-4 17:55
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
6
估计没有扫描断点.是其他问题
2004-7-4 17:55
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
7
在api下硬件断点也不行?
2004-7-4 18:33
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
是内存校验吗?
2004-7-5 11:43
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
BPM断点,on Read&Write 试试

(那个BT的软件不会是加的XPR吧……)
2004-7-6 08:48
0
雪    币: 271
活跃值: (90)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
Roba为什么不把软件下载地址写出来?
2004-7-6 09:08
0
雪    币: 234
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
神龙见首不见尾?
2004-7-6 09:27
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
12
不好意思,我们这里停了三十多小时的电,才恢复正常了.
就是这个<<登录奇兵>>,以前我见过一个低版本的,是明码比较,谁知道现在这末厉害.我觉得是一个厉害壳,但我对脱壳几乎一窍不通,麻烦各位了.
http://www.skycn.com/soft/635.html
2004-7-6 12:20
0
雪    币: 107
活跃值: (811)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
13
看了看它的导入表,发现很完整,但用od载入才发现出事了,应该是有壳吧.
2004-7-6 16:26
0
雪    币: 229
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这东西的确有壳
2004-7-6 17:00
0
雪    币: 556
活跃值: (2303)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
15
因为重点在DLL中,所以你下的就没用了,这个jongulong好像以前搞过
2004-7-6 18:53
0
雪    币: 556
活跃值: (2303)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
16
0050C279   PUSH addurl.0050C294                      ASCII "\\.\SICE"
0050C2B5   PUSH addurl.0050C2D0                      ASCII "\\.\NTICE"
0050C2F1   PUSH addurl.0050C30C                      ASCII "\\.\FILEMON"
0050C32D   PUSH addurl.0050C348                      ASCII "\\.\REGMON"
0050C369   PUSH addurl.0050C384                      ASCII "\\.\TRW"
0050C3A1   PUSH addurl.0050C3BC                      ASCII "\\.\TRWDEBUG"
0050C3E1   PUSH addurl.0050C3FC                      ASCII "\\.\ICEDUMP"
0050C41D   PUSH addurl.0050C438                      ASCII "\\.\TRW2000"
0050C459   PUSH addurl.0050C474                      ASCII "\\.\REGVXD"
0050C495   PUSH addurl.0050C4B0                      ASCII "\\.\VKEYPROD"
0050C4D5   PUSH addurl.0050C4F0                      ASCII "\\.\FILEVXD"
不反od
2004-7-6 19:00
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
17
登录奇兵 V4.05 的反跟踪

简单看了看,主程序没有加壳
可以在主程序内下硬件执行断点,也可以在API上下断点
在addurl41.DLL处有Anti,这个dll和winwatch.dll都放在WINDOWS\system32目录下
      
1、addurl41.DLL
      
      
00372194     53             push ebx
00372195     56             push esi
00372196     68 46E53800    push addurl41.0038E546                   ; ASCII "kernel32.dll"
0037219B     E8 B6B30100    call <jmp.&KERNEL32.GetModuleHandleA>
003721A0     85C0           test eax,eax
003721A2     74 31          je short addurl41.003721D5
003721A4     68 53E53800    push addurl41.0038E553                   ; ASCII "IsDebuggerPresent"
003721A9     50             push eax
003721AA     E8 B3B30100    call <jmp.&KERNEL32.GetProcAddress>
003721AF     8BD8           mov ebx,eax
003721B1     85DB           test ebx,ebx
003721B3     74 20          je short addurl41.003721D5
003721B5     FFD3           call ebx
003721B7     85C0           test eax,eax
003721B9     74 1A          je short addurl41.003721D5
003721BB     6A 40          push 40
003721BD     68 E0E53800    push addurl41.0038E5E0                   ; ASCII "Reverse Engineering Detected!"
003721C2     68 65E53800    push addurl41.0038E565                   ; ASCII "Using a debugger violates the software license agreement you have.This program will not operate properly under a debugger!"
003721C7     6A 00          push 0
003721C9     E8 C8B40100    call <jmp.&USER32.MessageBoxA>
003721CE     6A 00          push 0
003721D0     E8 C7B40100    call <jmp.&USER32.PostQuitMessage>
003721D5     68 1DE43800    push addurl41.0038E41D                   ; ASCII "nmtrans.dll"
003721DA     E8 DDB30100    call <jmp.&KERNEL32.LoadLibraryA>
003721DF     8BD8           mov ebx,eax
003721E1     85DB           test ebx,ebx
003721E3     74 45          je short addurl41.0037222A
003721E5     68 1DE43800    push addurl41.0038E41D                   ; ASCII "nmtrans.dll"
003721EA     E8 67B30100    call <jmp.&KERNEL32.GetModuleHandleA>
003721EF     85C0           test eax,eax
003721F1     74 31          je short addurl41.00372224
003721F3     68 FEE53800    push addurl41.0038E5FE                   ; ASCII "NmSymIsSoftICELoaded"
003721F8     50             push eax
003721F9     E8 64B30100    call <jmp.&KERNEL32.GetProcAddress>
003721FE     8BF0           mov esi,eax
00372200     85F6           test esi,esi
00372202     74 20          je short addurl41.00372224
00372204     FFD6           call esi
00372206     85C0           test eax,eax
00372208     74 1A          je short addurl41.00372224
0037220A     6A 40          push 40
0037220C     68 E0E53800    push addurl41.0038E5E0                   ; ASCII "Reverse Engineering Detected!"
00372211     68 65E53800    push addurl41.0038E565                   ; ASCII "Using a debugger violates the software license agreement you have.This program will not operate properly under a debugger!"
00372216     6A 00          push 0
00372218     E8 79B40100    call <jmp.&USER32.MessageBoxA>
0037221D     6A 00          push 0
0037221F     E8 78B40100    call <jmp.&USER32.PostQuitMessage>
00372224     53             push ebx
00372225     E8 DEB20100    call <jmp.&KERNEL32.FreeLibrary>
0037222A     5E             pop esi
0037222B     5B             pop ebx
0037222C     C3             retn

      
很明显可以看出上面代码是干什么用的,可以用IsDebug 1.4插件。也可以直接把00372194处改为Ret,省得程序去忙活。
      
      
―――――――――――――――――――――――――――――――――
2、注册窗口出来后程序调用winwatch.dll,在程序启动后也会调用这里
      
      
004ED55E     68 94D64E00    push addurl.004ED694                     ; ASCII "winwatch.dll"
004ED563     E8 28AAF1FF    call <jmp.&kernel32.LoadLibraryA>
004ED568     8BF0           mov esi,eax                              ; winwatch.018E0000
004ED56A     8973 28        mov dword ptr ds:[ebx+28],esi
004ED56D     85F6           test esi,esi
004ED56F     0F84 BA000000  je addurl.004ED62F
004ED575     53             push ebx
004ED576     68 04DA4E00    push addurl.004EDA04
004ED57B     E8 74CDF5FF    call addurl.0044A2F4
004ED580     8943 24        mov dword ptr ds:[ebx+24],eax
004ED583     68 A4D64E00    push addurl.004ED6A4                     ; ASCII "StartWatching"
004ED588     8B43 28        mov eax,dword ptr ds:[ebx+28]
004ED58B     50             push eax
004ED58C     E8 37A9F1FF    call <jmp.&kernel32.GetProcAddress>
004ED591     8943 3C        mov dword ptr ds:[ebx+3C],eax
004ED594     68 B4D64E00    push addurl.004ED6B4                     ; ASCII "StopWatching"
004ED599     8B43 28        mov eax,dword ptr ds:[ebx+28]
004ED59C     50             push eax
004ED59D     E8 26A9F1FF    call <jmp.&kernel32.GetProcAddress>
004ED5A2     8943 40        mov dword ptr ds:[ebx+40],eax
004ED5A5     68 C4D64E00    push addurl.004ED6C4                     ; ASCII "StillWatching"
004ED5AA     8B43 28        mov eax,dword ptr ds:[ebx+28]
004ED5AD     50             push eax
004ED5AE     E8 15A9F1FF    call <jmp.&kernel32.GetProcAddress>
004ED5B3     8943 48        mov dword ptr ds:[ebx+48],eax
004ED5B6     68 D4D64E00    push addurl.004ED6D4                     ; ASCII "StopAll"
004ED5BB     8B43 28        mov eax,dword ptr ds:[ebx+28]
004ED5BE     50             push eax
004ED5BF     E8 04A9F1FF    call <jmp.&kernel32.GetProcAddress>
004ED5C4     8943 44        mov dword ptr ds:[ebx+44],eax
004ED5C7     68 DCD64E00    push addurl.004ED6DC                     ; ASCII "SetReceiver"
004ED5CC     8B43 28        mov eax,dword ptr ds:[ebx+28]
004ED5CF     50             push eax
004ED5D0     E8 F3A8F1FF    call <jmp.&kernel32.GetProcAddress>
004ED5D5     8943 4C        mov dword ptr ds:[ebx+4C],eax
004ED5D8     68 E8D64E00    push addurl.004ED6E8                     ; ASCII "GetReceiver"
004ED5DD     8B43 28        mov eax,dword ptr ds:[ebx+28]
004ED5E0     50             push eax
004ED5E1     E8 E2A8F1FF    call <jmp.&kernel32.GetProcAddress>
004ED5E6     8943 50        mov dword ptr ds:[ebx+50],eax
004ED5E9     837B 4C 00     cmp dword ptr ds:[ebx+4C],0
004ED5ED     74 40          je short addurl.004ED62F


进入winwatch.dll看看:
      
004EDA71     837E 3C 00     cmp dword ptr ds:[esi+3C],0
004EDA75     74 04          je short addurl.004EDA7B
004EDA77     53             push ebx
004EDA78     FF56 3C        call dword ptr ds:[esi+3C]; winwatch.StartWatching//进入
004EDA7B     5E             pop esi
004EDA7C     5B             pop ebx
004EDA7D     C3             retn


Ollydbg 死悄悄的原因是这里面的SetWindowsHookExA
      
01743B28     55             push ebp
01743B29     8BEC           mov ebp,esp
01743B2B     53             push ebx
01743B2C     6A FF          push -1
01743B2E     A1 E8647401    mov eax,dword ptr ds:[17464E8]
01743B33     50             push eax
01743B34     E8 E7FDFFFF    call <jmp.&kernel32.WaitForSingleObject>
01743B39     33C0           xor eax,eax
01743B3B     55             push ebp
01743B3C     68 F23B7401    push winwatch.01743BF2
01743B41     64:FF30        push dword ptr fs:[eax]
01743B44     64:8920        mov dword ptr fs:[eax],esp
01743B47     8B1D EC647401  mov ebx,dword ptr ds:[17464EC]
01743B4D     8A45 08        mov al,byte ptr ss:[ebp+8]
01743B50     2C 01          sub al,1
01743B52     72 08          jb short winwatch.01743B5C
01743B54     74 2F          je short winwatch.01743B85
01743B56     FEC8           dec al
01743B58     74 56          je short winwatch.01743BB0
01743B5A     EB 7D          jmp short winwatch.01743BD9
01743B5C     837B 04 00     cmp dword ptr ds:[ebx+4],0
01743B60     75 1E          jnz short winwatch.01743B80
01743B62     833B 00        cmp dword ptr ds:[ebx],0
01743B65     75 19          jnz short winwatch.01743B80
01743B67     6A 00          push 0
01743B69     A1 C4507401    mov eax,dword ptr ds:[17450C4]
01743B6E     8B00           mov eax,dword ptr ds:[eax]
01743B70     50             push eax
01743B71     B8 88397401    mov eax,winwatch.01743988
01743B76     50             push eax
01743B77     6A 0A          push 0A
01743B79     E8 C2FDFFFF    call <jmp.&user32.SetWindowsHookExA>
01743B7E     8903           mov dword ptr ds:[ebx],eax
01743B80     FF43 04        inc dword ptr ds:[ebx+4]
01743B83     EB 54          jmp short winwatch.01743BD9
01743B85     837B 0C 00     cmp dword ptr ds:[ebx+C],0
01743B89     75 20          jnz short winwatch.01743BAB
01743B8B     837B 08 00     cmp dword ptr ds:[ebx+8],0
01743B8F     75 1A          jnz short winwatch.01743BAB
01743B91     6A 00          push 0
01743B93     A1 C4507401    mov eax,dword ptr ds:[17450C4]
01743B98     8B00           mov eax,dword ptr ds:[eax]
01743B9A     50             push eax
01743B9B     B8 0C3A7401    mov eax,winwatch.01743A0C
01743BA0     50             push eax
01743BA1     6A 02          push 2
01743BA3     E8 98FDFFFF    call <jmp.&user32.SetWindowsHookExA>
01743BA8     8943 08        mov dword ptr ds:[ebx+8],eax
01743BAB     FF43 0C        inc dword ptr ds:[ebx+C]
01743BAE     EB 29          jmp short winwatch.01743BD9
01743BB0     837B 14 00     cmp dword ptr ds:[ebx+14],0
01743BB4     75 20          jnz short winwatch.01743BD6
01743BB6     837B 10 00     cmp dword ptr ds:[ebx+10],0
01743BBA     75 1A          jnz short winwatch.01743BD6
01743BBC     6A 00          push 0
01743BBE     A1 C4507401    mov eax,dword ptr ds:[17450C4]
01743BC3     8B00           mov eax,dword ptr ds:[eax]
01743BC5     50             push eax
01743BC6     B8 903A7401    mov eax,winwatch.01743A90
01743BCB     50             push eax
01743BCC     6A 07          push 7
01743BCE     E8 6DFDFFFF    call <jmp.&user32.SetWindowsHookExA>
01743BD3     8943 10        mov dword ptr ds:[ebx+10],eax
01743BD6     FF43 14        inc dword ptr ds:[ebx+14]
01743BD9     33C0           xor eax,eax
01743BDB     5A             pop edx
01743BDC     59             pop ecx
01743BDD     59             pop ecx
01743BDE     64:8910        mov dword ptr fs:[eax],edx
01743BE1     68 F93B7401    push winwatch.01743BF9
01743BE6     A1 E8647401    mov eax,dword ptr ds:[17464E8]
01743BEB     50             push eax
01743BEC     E8 1FFDFFFF    call <jmp.&kernel32.ReleaseMutex>
01743BF1     C3             retn
2004-7-6 19:05
0
雪    币: 291
活跃值: (400)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
18
为什么SetWindowsHookExA能让OD死掉呢?
2004-7-6 19:16
0
雪    币: 107
活跃值: (811)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
19
现在应该怎么办?
2004-7-6 21:44
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
20
最初由 草原猎豹 发布
为什么SetWindowsHookExA能让OD死掉呢?


接管了消息循环,OD无法处理了
――forgot
2004-7-6 21:52
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
21
最初由 runjin 发布
现在应该怎么办?


改dll
或者修改流程避开
2004-7-6 21:53
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
22
最初由 草原猎豹 发布
为什么SetWindowsHookExA能让OD死掉呢?


我也想用这个反跟踪,不过只试出WH_JOURNALRECORD等全局钩子在OD里失效,不过这种钩子只能接收用户输入消息,不能接收程序发送的自定义消息,没法用来自动反跟踪……不过好像可以用于软件用户界面的反跟踪
2004-7-6 22:27
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
23
我只喜欢用SoftICE,用FrogsICE可以避开那一批CrackFile的检测,IsDebuggerPresent对SICE不起作用
我直接把4EDA77,4EDA78调用DLL的那两句NOP了,可以用SICE了,但还没破出来.
另:他不知怎么用的SMC,如果看原EXE什么都不是,但用SICE的LOADER载入后就成为完整的代码了.类似壳但不知是何时解密的,我把解开后的EXE DUMP了下,和原文件大小差不多,是DELPHY写的,用DEDE会非法操作,真麻烦!
2004-7-6 23:41
0
雪    币: 690
活跃值: (1826)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
24
用PEID插件通用脱壳器轻松脱掉
2004-7-7 10:39
0
游客
登录 | 注册 方可回帖
返回
//