首页
社区
课程
招聘
[旧帖] [原创]木马利用setusermatherr callback 反调试(申请验证码) 0.00雪花
发表于: 2011-12-21 11:50 1830

[旧帖] [原创]木马利用setusermatherr callback 反调试(申请验证码) 0.00雪花

2011-12-21 11:50
1830
木马利用setusermatherr callback 反调,并解密callback。
1.  默认 setusermatherr callback中只是 Xor ECX,ECX ; Ret;,而这个callback 0x00407C6C是一些dword
.data:00407C6C 3C 70 B2 A7                   callback        dd 0A7B2703Ch           ; DATA XREF: start+77o
.data:00407C6C                                                                       ; sub_4043F4+70o
.data:00407C6C                                                                       ; sub_4043F4+CBw
.data:00407C70 D7 85 D2 3F                   dword_407C70    dd 3FD285D7h            ; DATA XREF: sub_4043F4+B8w
.data:00407C74 6A 0F DF C4                   dword_407C74    dd 0C4DF0F6Ah           ; DATA XREF: sub_4043F4+E4w
.data:00407C78 E2 71 F1 AC                   dword_407C78    dd 0ACF171E2h           ; DATA XREF: sub_4043F4+F8w
.data:00407C7C 61 02 CB DD                   dword_407C7C    dd 0DDCB0261h           ; DATA XREF: sub_4043F4+115w
.data:00407C80 00 10 A7 AE                   dword_407C80    dd 0AEA71000h           ; DATA XREF: sub_4043A4+9w
.data:00407C84 02 FA B7 A5                   dword_407C84    dd 0A5B7FA02h           ; DATA XREF: sub_4043F4+128w
.data:00407C88 8B                                            db  8Bh ; ?

////////////////////////////////////////////////////////////////////////////////////////
.text:00404244 55                                            push    ebp
.text:00404245 8B EC                                         mov     ebp, esp
.text:00404247 6A FF                                         push    0FFFFFFFFh
.text:00404249 68 F0 7A 40 00                                push    offset dword_407AF0
.text:0040424E 68 44 46 40 00                                push    offset loc_404644
.text:00404253 64 A1 00 00 00 00                             mov     eax, large fs:0
.text:00404259 50                                            push    eax
.text:0040425A 64 89 25 00 00 00 00                          mov     large fs:0, esp
.text:00404261 83 EC 6C                                      sub     esp, 6Ch
.text:00404264 53                                            push    ebx
.text:00404265 56                                            push    esi
.text:00404266 57                                            push    edi
.text:00404267 89 65 E8                                      mov     [ebp+var_18], esp
.text:0040426A 33 DB                                         xor     ebx, ebx
.text:0040426C 89 5D FC                                      mov     [ebp+var_4], ebx
.text:0040426F 6A 02                                         push    2
.text:00404271 FF 15 24 10 40 00                             call    ds:__set_app_type
.text:00404277 59                                            pop     ecx
.text:00404278 83 0D FC 7A 40 00 FF                          or      dword_407AFC, 0FFFFFFFFh
.text:0040427F 83 0D 28 7B 40 00 FF                          or      dword_407B28, 0FFFFFFFFh
.text:00404286 FF 15 10 10 40 00                             call    ds:__p__fmode
.text:0040428C 8B 0D 14 7B 40 00                             mov     ecx, dword_407B14
.text:00404292 89 08                                         mov     [eax], ecx
.text:00404294 FF 15 20 10 40 00                             call    ds:__p__commode
.text:0040429A 8B 0D 2C 7B 40 00                             mov     ecx, dword_407B2C
.text:004042A0 89 08                                         mov     [eax], ecx
.text:004042A2 A1 14 10 40 00                                mov     eax, ds:_adjust_fdiv
.text:004042A7 8B 00                                         mov     eax, [eax]
.text:004042A9 A3 0C 7B 40 00                                mov     dword_407B0C, eax
.text:004042AE E8 E3 00 00 00                                call    nullsub_1
.text:004042B3 39 1D 68 7B 40 00                             cmp     dword_407B68, ebx
.text:004042B9 75 0C                                         jnz     short loc_4042C7
.text:004042BB 68 6C 7C 40 00                                push    offset callback ; handle math error exception
.text:004042C0 FF 15 34 10 40 00                             call    ds:__setusermatherr
.text:004042C6 59                                            pop     ecx
.text:004042C7

2. 改变callback 地址保护模式为可读可写可执行
.text:00404438 6A 40                                         push    40h        
.text:00404464 68 6C 7C 40 00                          push    offset callback ; lpAddress
.text:0040447E E8 01 02 00 00                           call    VirtualProtect  ; change callback protect mode to RWE

3. 解密callback
.text:004044BF 81 05 6C 7C 40 00 AC 90 4D 58                 add     callback, 584D90ACh ;

callback地址0x00407C6C为 0x0A7B2703Ch
add     callback, 584D90ACh ;  0x0A7B2703Ch + 0x584D90ACh =  00 00 00 E8; call $+1;

下面是继续解密callback 代码:
.text:004044C9 C7 05 24 7B 40 00 60 7A CC 00                 mov     dword_407B24, 0CC7A60h
.text:004044D3 A1 14 7B 40 00                                mov     eax, dword_407B14
.text:004044D8 81 35 74 7C 40 00 48 3C 16 45                 xor     dword_407C74, 45163C48h
.text:004044E2 29 4D F4                                      sub     [ebp+var_C], ecx
.text:004044E5 66 33 0D 1A 7B 40 00                          xor     cx, word_407B1A
.text:004044EC 81 05 78 7C 40 00 52 16 5A C0                 add     dword_407C78, 0C05A1652h
.text:004044F6 09 45 F4                                      or      [ebp+var_C], eax
.text:004044F9 C7 05 3C 7B 40 00 00 00 00 00                 mov     dword_407B3C, 0
.text:00404503 89 1D 34 7B 40 00                             mov     flOldProtect, ebx
.text:00404509 81 35 7C 7C 40 00 4F 96 8A 5C                 xor     dword_407C7C, 5C8A964Fh
.text:00404513 01 1D DC 7A 40 00                             add     dword_407ADC, ebx
.text:00404519 0F BE C9                                      movsx   ecx, cl
.text:0040451C 81 35 84 7C 40 00 02 86 47 35                 xor     dword_407C84, 35478602h
.text:00404526 66 89 75 F0                                   mov     [ebp+var_10], si
.text:0040452A C7 05 1C 7B 40 00 FF FF FF FF                 mov     dword_407B1C, 0FFFFFFFFh
.text:00404534 2D 6C 63 10 00                                sub     eax, 10636Ch
.text:00404539 89 45 F4                                      mov     [ebp+var_C], eax

4.  触发math error, 在callback 0x00407C6C下断,才能拦住

ext:0040457B 8B 15 1C 7B 40 00                             mov     edx, dword_407B1C
.text:00404581 F7 D1                                         not     ecx
.text:00404583 8B 1D E4 7A 40 00                             mov     ebx, dword_407AE4
.text:00404589 89 0D 08 7B 40 00                             mov     dword_407B08, ecx
.text:0040458F 89 4D E0                                      mov     [ebp+var_20], ecx
.text:00404592 E8 DD 00 00 00                                call    log10
.text:00404597 88 55 E8                                      mov     [ebp+var_18], dl
.text:0040459A 89 45 E4                                      mov     [ebp+var_1C], eax
.text:0040459D 89 45 E0                                      mov     [ebp+var_20], eax
.text:004045A0 66 09 3D 22 7B 40 00                          or      word_407B22, di
.text:004045A7 81 35 E0 7A 40 00 48 2B 0A 00                 xor     dword_407AE0, 0A2B48h
.text:004045B1 66 8B 15 1A 7B 40 00                          mov     dx, word_407B1A
.text:004045B8 18 15 07 7B 40 00                             sbb     byte_407B07, dl
.text:004045BE C7 05 10 7B 40 00 01 00 00 00                 mov     dword_407B10, 1
.text:004045C8 59                                            pop     ecx
.text:004045C9 23 05 EC 7A 40 00                             and     eax, dword_407AEC
.text:004045CF 89 0D 30 7B 40 00                             mov     dword_407B30, ecx
.text:004045D5 8A 65 E9                                      mov     ah, [ebp+var_17]
.text:004045D8 0F B6 C8                                      movzx   ecx, al
.text:004045DB A3 F0 7A 40 00                                mov     dword_407AF0, eax
.text:004045E0 59                                            pop     ecx
.text:004045E1 66 33 1D 18 7B 40 00                          xor     bx, word_407B18
.text:004045E8 A3 F8 7A 40 00                                mov     dword_407AF8, eax
.text:004045ED F6 DE                                         neg     dh
.text:004045EF 66 1B 0D 42 7B 40 00                          sbb     cx, word_407B42
.text:004045F6 68 44 7B 40 00                                push    offset WindowName ;
.text:004045FB 68 54 7B 40 00                                push    offset ClassName ;
.text:00404600 E8 8F 00 00 00                                call    FindWindowA
.text:00404605 66 F7 D1                                      not     cx
.text:00404608 8B 4D DC                                      mov     ecx, [ebp+var_24]
.text:0040460B 66 0F BE FC                                   movsx   di, ah
.text:0040460F 81 C6 AA 07 00 00                             add     esi, 7AAh
.text:00404615 8B 7D D8                                      mov     edi, [ebp+var_28]
.text:00404618 81 D7 E0 10 C5 00                             adc     edi, 0C510E0h
.text:0040461E A3 E8 7A 40 00                                mov     dword_407AE8, eax
.text:00404623 66 C7 45 D4 14 DC                             mov     [ebp+var_2C], 0DC14h
.text:00404629 09 F6                                         or      esi, esi
.text:0040462B 0F 85 3C FF FF FF                             jnz     loc_40456D

5. 解码后callback
00407C6C    E8 00000000     call 06CF7D26.00407C71
00407C71    58              pop eax
00407C72    83C0 22         add eax,22
00407C75    33C9            xor ecx,ecx
00407C77    813488 4B6D2E94 xor dword ptr ds:[eax+ecx*4],942E6D4B
00407C7E    41              inc ecx
00407C7F    81F9 CC020000   cmp ecx,2CC
00407C85  ^ 7C F0           jl short 06CF7D26.00407C77

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 26
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己ding一下
2012-1-6 22:34
0
游客
登录 | 注册 方可回帖
返回
//