首页
社区
课程
招聘
[推荐]一个稍稍有些难度的ReverseMe
2007-5-21 16:52 13419

[推荐]一个稍稍有些难度的ReverseMe

2007-5-21 16:52
13419
ReverseMe#8bylena151 is my challenge 2007 Can you beat this one?

Goal is to register the ReverseMe. This is visualised if it says at startup "REGISTERED to:" followed by the name you registered it for.

Mostly byte coded in assembler (masm).
Not packed.

You may either patch, fish or keygen. More info in About box. (Obviously, no aesthetic-patching-only!)

On a sidenote: it was also a challenge for me as I had never byte coded such a long part in one target. Don't be surprised when you see the disassembled file in a debugger!

Info: it's not the algo that makes the challenge! The algo is short and easy, the real challenge lies elsewhere! I take my hat off and bow deep for those bringing a valid solution! Please explain how you did it.

Difficulty: 6 - Hard, for very professionals only
Platform: Windows
Language: Assembler

I will fill you in on some details to make your reversing less difficult: the ReverseMe makes extensive use of
-code obfuscation
-code destruction
-decoy code and decoy strings
-machine specific algo
-selfmodifying/polymorphic code
-string decryption/re-encryption
-algo hiding

to make your life miserable. However, the deadly traps are that it has
-anti-tracing
-HW BP detection
-Software BP detection
-ring0/ring3 debugger detection
-anti-patching

and if any of the last 5 are detected ... the real algo is never run and you are sent into the woods to go play with Robin Hood.

My advice: find the traps first and eliminate them to be able to find the real algo!

有兴趣的兄弟试试

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

上传的附件:
收藏
免费 7
打赏
分享
最新回复 (29)
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-23 18:48
2
0
这是从crackmes.de上下载的一个crackme,作者lena151。刚开始的时候还不知道lena151的大名,后来了解到此君搞了个近40集的crackme视频教程,而且做的非常
精彩,喜欢crackme且不是E文盲人的真应该好好看一看他的系列教程(论坛ftp有下,我正在一集集地学习中),当然超版CCDebuger做的OD系列教程也很经典。
作者说了,这个crackme用到了以下技巧
-code obfuscation
-code destruction
-decoy code and decoy strings
-machine specific algo
-selfmodifying/polymorphic code
-string decryption/re-encryption
-algo hiding
但是作者说没有加壳,我们直接用OD载入。
00401BB4 > $  C705 B41B4000 740233C0   mov     dword ptr [<模块入口点>], C0330274        ;  (initial cpu selection)
00401BBE   .  C705 B81B4000 EB018150   mov     dword ptr [401BB8], 508101EB
00401BC8   .  C705 BC1B4000 F645D001   mov     dword ptr [401BBC], 1D045F6
00401BD2   .  C705 C01B4000 E80A0000   mov     dword ptr [401BC0], 0AE8
00401BDC   .  C705 C41B4000 00E8EB0C   mov     dword ptr [401BC4], 0CEBE800
00401BE6   .  C705 C81B4000 0000E8F6   mov     dword ptr [401BC8], F6E80000
00401BF0   .  C705 CC1B4000 FFFFFFE8   mov     dword ptr [401BCC], E8FFFFFF
00401BFA   .  C705 D01B4000 F2FFFFFF   mov     dword ptr [401BD0], -0E
晕了,这比加了壳的代码还要乱。入口处就来了一段自修改代码,后面大段大段的代码都加了花指令且打乱了流程(code destruction)。这叫我等菜菜如何分析啊?(谁叫你自找苦吃,
都说了是for very professional only的嘛)发扬菜菜无知者无畏的精神,F8步进并整理一下OEP附近的代码看看。下面的代码是程序在SMC之后并去掉了部分花指令
后整理出来的。
00401BB4 > $ /74 02                    je      short 00401BB8                               ;  (initial cpu selection)
00401BB6   . |33C0                     xor     eax, eax
00401BB8   > \EB 01                    jmp     short 00401BBB
00401BBB   >  50                       push    eax
00401BBC   .  F645 D0 01               test    byte ptr [ebp-30], 1
00401BD7   .  2B0424                   sub     eax, dword ptr [esp]
00401BE0   .  EB 01                    jmp     short 00401BE3
00401BE3   >  83C4 04                  add     esp, 4
00401BFD   .  50                       push    eax
00401BFE   .  E8 02000000              call    00401C05
00401C04   .  5A                       pop     edx
00401C05   .  58                       pop     eax
00401C06   .  6BC0 03                  imul    eax, eax, 3
00401C09   .  E8 02000000              call    00401C10
00401C0F   .  5A                       pop     edx
00401C10   .  83C4 04                  add     esp, 4
00401C13   .  58                       pop     eax
00401C14   .  75 01                    jnz     short 00401C17
00401C17   >  66:3D FFFF               cmp     ax, 0FFFF
00401C1B   .  75 01                    jnz     short 00401C1E
00401C22   .  75 01                    jnz     short 00401C25
00401C25   >  76 1B                    jbe     short 00401C42
00401C27   .  EB 01                    jmp     short 00401C2A
00401C2E   .  75 01                    jnz     short 00401C31
00401C31   >  CC                       int3
00401C32   .  66:B8 FE00               mov     ax, 0FE
00401C36   .  74 04                    je      short 00401C3C
00401C38   .  4B                       dec     ebx
00401C59   .  E9 15010000              jmp     00401D73
00401D6C   .  EB 00                    jmp     short 00401D6E
00401D6E   >  E8 41FEFFFF              call    <模块入口点>                              ;从这里又跳回到自修改后的OEP处再次执行
00401D73   >  83C4 04                  add     esp, 4
00401D76   .  F9                       stc
00401D77   .  50                       push    eax
00401D78   .  E8 02000000              call    00401D7F
00401D7E   .  5A                       pop     edx
00401D7F   .  58                       pop     eax
00401D80   .  6BC0 03                  imul    eax, eax, 3
00401D83   .  E8 02000000              call    00401D8A
00401D89   .  5A                       pop     edx
00401D8A   .  83C4 04                  add     esp, 4
00401D8D   .  58                       pop     eax
00401D8E   .  E8 41000000              call    00401DD4
00401D93   .  C003 C7                  rol     byte ptr [ebx], 0C7
00401D96   .  05 831D4000              add     eax, 00401D83
00401DD4   $  83C4 08                  add     esp, 8
00401DD7   .  6A 00                    push    0                                            ; /pModule = NULL
00401DE0   .  E8 EF550000              call    <jmp.&kernel32.GetModuleHandleA>             ; \GetModuleHandleA
00401DEB   .  A3 D0AB4000              mov     dword ptr [40ABD0], eax
00401DF6   .  E8 C9560000              call    <jmp.&comctl32.InitCommonControls>           ; [InitCommonControls
00401E01   .  E8 05000000              call    00401E0B
00401E0B   $  66:8B15 AE904000         mov     dx, word ptr [4090AE]
00401E16   .  66:3315 A6904000         xor     dx, word ptr [4090A6]
00401E21   .  66:8915 6A1E4000         mov     word ptr [401E6A], dx       ;注意这里,整个crackme中到处都充斥着类似的SMC代码,
虽然不像入口处那样明目张胆的修改 在代码段下F2断点,只要重新开始运行程序,这些断点就会统统失效,不知道是不是因为SMC的原因,还是别的什么缘故,请知道的大侠明示一下
00401E2C   .  66:3315 A6904000         xor     dx, word ptr [4090A6]
00401E37   .  83C4 04                  add     esp, 4
00401E61   .  33C0                     xor     eax, eax
00401E66   .  74 06                    je      short 00401E6E
00401E68   .  75 04                    jnz     short 00401E6E
00401E6E   .  E8 140A0000              call    402887
00401E79   .  B8 082A4000              mov     eax, 402A08
00401E84   .  E8 90090000              call    402819
00401E8F   .  A3 3DB04000              mov     dword ptr [40B03D], eax
00401E9A   .  75 09                    jnz     short 00401EA5
00401E9C   .  74 02                    je      short 00401EA0
00401EA0   >  74 03                    je      short 00401EA5
00401EA5   >  A3 41B04000              mov     dword ptr [40B041], eax
00401EB0   .  A3 45B04000              mov     dword ptr [40B045], eax
00401EBB   .  B8 3F2A4000              mov     eax, 402A3F
00401EC6   .  75 09                    jnz     short 00401ED1
00401EC8   .  74 02                    je      short 00401ECC
00401ECC   >  74 03                    je      short 00401ED1
00401ED1   >  74 09                    je      short 00401EDC
00401ED3   .  75 02                    jnz     short 00401ED7
00401ED7   >  75 03                    jnz     short 00401EDC
00401EDC   >  A3 49B04000              mov     dword ptr [40B049], eax
00401EE7   .  A1 D0AB4000              mov     eax, dword ptr [40ABD0]
00401EEC   .  03C1                     add     eax, ecx
00401EF2   .  2B05 96904000            sub     eax, dword ptr [409096]
00401EFD   .  68 081F4000              push    00401F08
00401F02   .  C3                       retn
分析了一小段,尝到了这个crackme的厉害了。我们看到的许多代码都被加了花指令,而且布满了SMC的一些代码,动不动就修改已经执行或者即将执行的代码段内容
。而且程序的流程也作了混淆,并不像常见的程序那样是顺序执行,而是一层包着一层,不断地在某些代码段跳来跳去,让人头晕不己。如果不去掉花指令,分析起
来着实令人抓狂。
作者也提示了我们要首先清除以下Anti手段,才可能真正分析到注册算法,我们用脚本去掉部分花指令,然后硬着头皮一步步往前。
-anti-tracing
-HW BP detection
-Software BP detection
-ring0/ring3 debugger detection
-anti-patching

00403820   .  6B05 9A904000 03       imul    eax, dword ptr [40909A], 3
0040382B   .  E8 8AEEFFFF            call    004026BA      ;这个Call F7跟进好像有点名堂
00403836   .  66:03C2                add     ax, dx
00403839   .  03C3                   add     eax, ebx
0040383B   .  85C0                   test    eax, eax
00403841   .  74 09                  je      short 0040384C
00403843   .  75 01                  jnz     short 00403846
00403846   .  03C7                   add     eax, edi
0040384C   >  0305 9E904000          add     eax, dword ptr [40909E]
00403857   .  68 DB384000            push    004038DB
00403862   .  E8 20F0FFFF            call    402887
0040386D   .  75 09                  jnz     short 00403878
0040386F   .  74 02                  je      short 00403873
00403872   .  47                     inc     edi
00403873   >  74 03                  je      short 00403878
00403878   >  E8 9CEFFFFF            call    402819
00403883   .  2B05 36B04000          sub     eax, dword ptr [40B036]
0040388E   .  8B45 F0                mov     eax, dword ptr [ebp-10]
004038B8   .  33C0                   xor     eax, eax
004038BD   .  74 06                  je      short 004038C5
004038BF   .  75 04                  jnz     short 004038C5
004038C5   .  6B05 9E904000 06       imul    eax, dword ptr [40909E], 6
004038D0   .  6B05 8A904000 07       imul    eax, dword ptr [40908A], 7
004038D7   .  C3                     retn
F7跟进之后一看,大意是尝试打开并读取一个叫"ReverseMe#8bylena151.dat"的文件,如果文件不存在或者是文件大小小于20的话就直接返回,否则将文件内容读进
内存。整个crackme中多次调用这个call,而且也没见有什么具体作用。
004026BA > $  6A 00                  push    0                                  ; /hTemplateFile = NULL
004026BC   .  6A 03                  push    3                                  ; |Attributes = READONLY|HIDDEN
004026C4   .  68 80000000            push    80                                 ; |Mode = 80
004026C9   .  6A 00                  push    0                                  ; |pSecurity = NULL
004026CF   .  6A 00                  push    0                                  ; |ShareMode = 0
004026D1   .  68 00000080            push    80000000                           ; |Access = GENERIC_READ
004026DA   .  68 24904000            push    00409024                           ; |FileName = "ReverseMe#8bylena151.dat"
004026E5   .  E8 D24C0000            call    <jmp.&kernel32.CreateFileA>        ; \CreateFileA
004026F0   .  83F8 FF                cmp     eax, -1
004026F3   .  74 6E                  je      short 00402763
004026F5   .  50                     push    eax
004026FB   .  68 0BAF4000            push    0040AF0B                           ; /pFileSizeHigh = ReverseM.0040AF0B
00402700   .  50                     push    eax                                ; |hFile
00402706   .  E8 C34C0000            call    <jmp.&kernel32.GetFileSize>        ; \GetFileSize
00402711   .  A3 0BAF4000            mov     dword ptr [40AF0B], eax
00402716   .  85C0                   test    eax, eax
0040271C   .  74 45                  je      short 00402763
0040271E   .  83F8 20                cmp     eax, 20
00402721   .  72 40                  jb      short 00402763
00402727   .  58                     pop     eax
00402728   .  50                     push    eax
00402732   >  6A 00                  push    0                                  ; /pOverlapped = NULL
00402734   .  68 81AC4000            push    0040AC81                           ; |pBytesRead = ReverseM.0040AC81
0040273D   .  FF35 0BAF4000          push    dword ptr [40AF0B]                 ; |BytesToRead = 0
00402748   .  68 B3AC4000            push    0040ACB3                           ; |Buffer = ReverseM.0040ACB3
0040274D   .  50                     push    eax                                ; |hFile
00402753   .  E8 A64C0000            call    <jmp.&kernel32.ReadFile>           ; \ReadFile
00402758   .  58                     pop     eax
00402759   .  50                     push    eax                                ; /hObject
0040275E   .  E8 534C0000            call    <jmp.&kernel32.CloseHandle>        ; \CloseHandle
00402763   >  C3                     retn
整个crackme分析完了回头再看这段代码,记得作者说过-decoy code and decoy strings,这里就是个如假包换的水货,只是吸引眼球,浪费我们的时间罢了。
004020AA   .  E8 6A070000              call    402819
004020B5   .  66:8B0D AA904000         mov     cx, word ptr [4090AA]
004020C0   .  51                       push    ecx
004020C1   .  320D 2AB04000            xor     cl, byte ptr [40B02A]
004020CB   .  66:890D 38204000         mov     word ptr [402038], cx   ;★selfmodifying/polymorphic code
004020D6   .  320D 2AB04000            xor     cl, byte ptr [40B02A]
004020DC   .  59                       pop     ecx
004020E1   .  B8 B41B4000              mov     eax, <模块入口点>
004020E6   .  75 04                    jnz     short 004020EC
004020EC   >  8A1D 8B904000            mov     bl, byte ptr [40908B]
004020F7   >  E8 1D070000              call    402819
00402102   .  3018                     xor     byte ptr [eax], bl   ;★这个循环将OEP到004020F5这么一大段代码与某个数作了个异或,使这段代码面目全非了,过了这个循环想再回头来分析一下刚刚经过的这段代码是没有机会了,过了这个村就没有这个店了。
00402104   .  92                       xchg    eax, edx
00402105   .  42                       inc     edx
0040210D   .  E8 07070000              call    402819
00402118   .  92                       xchg    eax, edx
00402119   .  E8 FB060000              call    402819
00402123   .  3D F5204000              cmp     eax, 004020F5
00402128   .^ 7C CD                    jl      short 004020F7
0040212E   .  66:8B15 AE904000         mov     dx, word ptr [4090AE]
00402139   .  66:3315 A6904000         xor     dx, word ptr [4090A6]
00402144   .  66:8915 8D214000         mov     word ptr [40218D], dx   ;selfmodifying/polymorphic code
0040214F   .  66:3315 A6904000         xor     dx, word ptr [4090A6]
0040215A   .  83C4 04                  add     esp, 4
00402184   .  33C0                     xor     eax, eax
00402189   .  74 06                    je      short 00402191
0040218B   .  75 04                    jnz     short 00402191
00402191   .  E8 BA060000              call    402850
0040219C   .  68 A7214000              push    004021A7
004021A1   .  C3                       retn
雪    币: 433
活跃值: (176)
能力值: ( LV13,RANK:1250 )
在线值:
发帖
回帖
粉丝
冲天剑 31 2007-5-23 23:11
3
0
IAT没有加密,在IAT上下断,就可以分析出究竟调用了哪些函数
譬如说,汇编写的程序,做的第一件事往往是invoke GetModuleHandle, 0
分析出调用的API就好办了
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-24 23:44
4
0
00402431   .  68 BF244000            push    004024BF     ;程序发生异常后会跳到这个地址继续
0040243B   .  E8 10040000            call    402850
00402446   .  68 51244000            push    00402451
0040244B   .  C3                     retn
00402451   .  64:FF35 00000000       push    dword ptr fs:[0]
0040245C   .  E8 B8030000            call    402819
00402467   .  8925 DBB14000          mov     dword ptr [40B1DB], esp
00402472   .  E8 D9030000            call    402850
0040247D   .  68 88244000            push    00402488
00402482   .  C3                     retn
00402488   .  E8 8C030000            call    402819
00402493   .  64:8925 00000000       mov     dword ptr fs:[0], esp
0040249E   .  E8 76030000            call    402819
004024A9   .  33F6                   xor     esi, esi
004024AB   .  E8 7B080000            call    402D2B
004024B4   .  E8 4F050000            call    402A08
004024B9   .  F7F6                   div     esi     ;人为地制造异常
004024BB   .  74 30                  je      short 004024ED

004024BF   .  55                     push    ebp     ;异常发生后到这里继续执行
004024C0   .  8BEC                   mov     ebp, esp
004024C2   .  8B45 10                mov     eax, dword ptr [ebp+10]
004024CB   .  8B1D D7B14000          mov     ebx, dword ptr [40B1D7]                     ;  ReverseM.0040258E
004024D6   .  75 09                  jnz     short 004024E1
004024D8   .  74 02                  je      short 004024DC
004024DB   .  47                     inc     edi
004024DC   >  74 03                  je      short 004024E1
004024E1   .  8998 B8000000          mov     dword ptr [eax+B8], ebx
004024EC   .  8B1D DBB14000          mov     ebx, dword ptr [40B1DB]
004024F6   .  75 0A                  jnz     short 00402502
004024F8   .  74 03                  je      short 004024FD
004024FC   .  47                     inc     edi
004024FD   >  74 03                  je      short 00402502
00402502   .  8998 C4000000          mov     dword ptr [eax+C4], ebx
0040250D   .  8B1D DFB14000          mov     ebx, dword ptr [40B1DF]
00402518   .  8998 B4000000          mov     dword ptr [eax+B4], ebx
00402523   .  0370 04                add     esi, dword ptr [eax+4]   iDr0
00402526   .  F8                     clc
0040252D   .  75 09                  jnz     short 00402538
0040252F   .  74 02                  je      short 00402533
00402532   .  47                     inc     edi
00402533   >  74 03                  je      short 00402538
00402538   >  E8 DC020000            call    402819
00402544   .  0370 08                add     esi, dword ptr [eax+8]   iDr1
0040254E   .  68 59254000            push    00402559
00402553   .  C3                     retn
00402555   .  48                     dec     eax
00402559   .  E8 BB020000            call    402819
00402565   .  0370 0C                add     esi, dword ptr [eax+C]    iDr2
00402570   .  0370 10                add     esi, dword ptr [eax+10]   iDr3
0040257A   .  E8 9A020000            call    402819
00402585   .  8935 31B04000          mov     dword ptr [40B031], esi   ;★检测硬件断点,如果程序被调试且下了硬件断点(包括F4断点)则这里esi将不等于0
00402590   .  64:8F05 00000000       pop     dword ptr fs:[0]
0040259B   .  75 09                  jnz     short 004025A6
0040259D   .  74 02                  je      short 004025A1
004025A0   .  47                     inc     edi
004025A1   >  74 03                  je      short 004025A6
004025A6   >  68 B1254000            push    004025B1
004025AB   .  C3                     retn
004025AD   .  48                     dec     eax
004025B1   .  50                     push    eax
004025B2   .  83C4 04                add     esp, 4
004025BC   .  B8 A0234000            mov     eax, 004023A0
004025C1   .  75 04                  jnz     short 004025C7
004025C7   >  8A1D 87904000          mov     bl, byte ptr [409087]
004025D2   >  E8 42020000            call    402819
004025DD   .  3018                   xor     byte ptr [eax], bl    ;又来毁尸灭迹这一套(从004023A0至004025D0段代码从此没有意义了)要是你一不小心过了这里,就不可能再回头分析这一段代码是不是检测硬件断点之类的了。
004025DF   .  92                     xchg    eax, edx
004025E0   .  42                     inc     edx
004025E8   .  E8 BE170000            call    403DAB     ;★检验刚刚得到的标志
004025F3   .  92                     xchg    eax, edx
004025F4   .  E8 20020000            call    402819
004025FE   .  3D D0254000            cmp     eax, 004025D0
00402603   .^ 7C CD                  jl      short 004025D2
00402609   .  6A 00                  push    0                                           ; /lParam = NULL
0040260B   .  68 713E4000            push    00403E71                                    ; |DlgProc = ReverseM.00403E71
00402614   .  6A 00                  push    0                                           ; |hOwner = NULL
00402616   .  68 E9030000            push    3E9                                         ; |pTemplate = 3E9
0040261F   .  FF35 D0AB4000          push    dword ptr [40ABD0]                          ; |hInst = 00400000
0040262B   .  E8 EA4C0000            call    <jmp.&user32.DialogBoxParamA>               ; \DialogBoxParamA   
      
00403DAB >/$  833D 31B04000 00       cmp     dword ptr [40B031], 0   ;★检验是否下了硬件断点标志
00403DB6  |.  76 46                  jbe     short 00403DFE
00403DB8  |.  A1 31B04000            mov     eax, dword ptr [40B031]   ;如果检测到了硬件断点,则修改某些内存的值(这些个值其实是加密了的字符串Registed to,如果这里被修改了,就不可能出现作者要求的registed to your name 注册画面了。
00403DC1  |.  0105 86904000          add     dword ptr [409086], eax
00403DCC  |.  0105 8A904000          add     dword ptr [40908A], eax
00403DD7  |.  0105 8E904000          add     dword ptr [40908E], eax
00403DE2  |.  0105 92904000          add     dword ptr [409092], eax
00403DEE  |.  A1 86904000            mov     eax, dword ptr [409086]
00403DF9  |.  A3 35B04000            mov     dword ptr [40B035], eax
00403DFE  \>  C3                     retn
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-24 23:44
5
0
跟进DlgProc看看。
00403E71   .  55                     push    ebp
00403E72   .  8BEC                   mov     ebp, esp
00403E74   .  83C4 A8                add     esp, -58
00403E7C   .  64:FF35 00000000       push    dword ptr fs:[0]
00403E88   .  8F45 A8                pop     dword ptr [ebp-58]
00403E92   .  C745 AC D64B4000       mov     dword ptr [ebp-54], 00404BD6
00403E9D   .  C745 B0 FC434000       mov     dword ptr [ebp-50], 004043FC
00403EA9   .  8D45 A8                lea     eax, dword ptr [ebp-58]
00403EB3   .  64:A3 00000000         mov     dword ptr fs:[0], eax
00403EBF   .  8965 B4                mov     dword ptr [ebp-4C], esp
00403EC2   .  74 06                  je      short 00403ECA
00403EC4   .  75 04                  jnz     short 00403ECA
00403ECA   .  896D B8                mov     dword ptr [ebp-48], ebp
00403ED4   .  75 02                  jnz     short 00403ED8
00403ED6   .  74 00                  je      short 00403ED8
00403ED8   >  817D 0C 10010000       cmp     dword ptr [ebp+C], 110
00403EDF   .  0F85 8B0A0000          jnz     00404970
00403EEA   .  68 04010000            push    104                                ; /BufSize = 104 (260.)
00403EF5   .  68 4DB04000            push    0040B04D                           ; |Buffer = ReverseM.0040B04D
00403F00   .  E8 E1340000            call    <jmp.&kernel32.GetWindowsDirectory>; \GetWindowsDirectoryA
00403F0B   .  6A 04                  push    4                                  ; /n = 4
00403F0D   .  68 4DB04000            push    0040B04D                           ; |String2 = ""
00403F16   .  68 51B14000            push    0040B151                           ; |String1 = ReverseM.0040B151
00403F21   .  E8 F6340000            call    <jmp.&kernel32.lstrcpynA>          ; \lstrcpynA
00403F2C   .  6A 32                  push    32                                 ; /pFileSystemNameSize = 00000032
00403F2E   .  68 8DB14000            push    0040B18D                           ; |pFileSystemNameBuffer = ReverseM.0040B18D
00403F37   .  68 04904000            push    00409004                           ; |pFileSystemFlags = ReverseM.00409004
00403F42   .  68 00904000            push    00409000                           ; |pMaxFilenameLength = ReverseM.00409000
00403F4D   .  68 BFB14000            push    0040B1BF                           ; |pVolumeSerialNumber = ReverseM.0040B1BF
00403F58   .  6A 32                  push    32                                 ; |MaxVolumeNameSize = 32 (50.)
00403F5A   .  68 5BB14000            push    0040B15B                           ; |VolumeNameBuffer = ReverseM.0040B15B  ;★取系统盘VolumName,
后面有用到
00403F63   .  68 51B14000            push    0040B151                           ; |RootPathName = ""
00403F6E   .  E8 6D340000            call    <jmp.&kernel32.GetVolumeInformatio>; \GetVolumeInformationA
00403F79   .  C745 BC 14000000       mov     dword ptr [ebp-44], 14
00403F84   .  8D45 BC                lea     eax, dword ptr [ebp-44]
00403F87   .  50                     push    eax                                ; /pBufCount
00403F8F   .  68 C3B14000            push    0040B1C3                           ; |Buffer = ReverseM.0040B1C3  ;★取系统登录用户名,后面有用
00403F9A   .  E8 31350000            call    <jmp.&advapi32.GetUserNameA>       ; \GetUserNameA
00403FA5   .  66:8B15 AE904000       mov     dx, word ptr [4090AE]
00403FB0   .  66:3315 9E904000       xor     dx, word ptr [40909E]
00403FBB   .  66:8915 04404000       mov     word ptr [404004], dx
00403FC6   .  66:3315 9E904000       xor     dx, word ptr [40909E]
00403FD1   .  83C4 00                add     esp, 0
00403FFB   .  33C0                   xor     eax, eax
00404000   .  74 06                  je      short 00404008
00404002   .  75 04                  jnz     short 00404008
00404008   .  E8 43E8FFFF            call    402850
00404013   .  B8 69274000            mov     eax, 00402769
0040401E   .  A3 3DB04000            mov     dword ptr [40B03D], eax  ;★后面跳来跳去的一大段,其实这里的eax地址处才做了点实事,直接在eax地址处下
断然后F9过去就得了
00404029   .  E8 EBE7FFFF            call    402819
00404034   .  68 3F404000            push    0040403F
00404039   .  C3                     retn

我们来到这里
00402769   .  33D2                              xor     edx, edx
0040276B   .  EB 28                             jmp     short 00402795
00402775   >  8A9A 3CAB4000                     mov     bl, byte ptr [edx+40AB3C] ;★string decryption
0040277F   .  2ADA                              sub     bl, dl
00402781   .  32DA                              xor     bl, dl
0040278A   .  889A 3CAB4000                     mov     byte ptr [edx+40AB3C], bl
00402790   .  42                                inc     edx
00402795   >  83FA 2E                           cmp     edx, 2E
00402798   .^ 72 DB                             jb      short 00402775
004027A0   .  33DB                              xor     ebx, ebx
004027A2   .  33FF                              xor     edi, edi
004027A4   .  EB 27                             jmp     short 004027CD
004027A7   .  03E8                              add     ebp, eax
004027AB   >  6A 00                             push    0
004027AD   .  75 07                             jnz     short 004027B6
004027AF   .  74 05                             je      short 004027B6
004027B2   .  04 09                             add     al, 9
004027B6   >  8D87 3CAB4000                     lea     eax, dword ptr [edi+40AB3C]      ; |
004027BC   .  50                                push    eax                              ; |Class
004027C1   .  E8 724B0000                       call    <jmp.&user32.FindWindowA>        ; \FindWindowA 检查调试器来了
004027C6   .  03D8                              add     ebx, eax   ;★找到的窗口句柄累加
004027CC   .  47                                inc     edi
004027CD   >  83FF 2E                           cmp     edi, 2E
004027D0   .^ 72 D9                             jb      short 004027AB
004027D8   .  891D 25B04000                     mov     dword ptr [40B025], ebx  ;★保存标志
004027E2   .  33D2                              xor     edx, edx
004027E4   .  EB 28                             jmp     short 0040280E
004027EE   >  8A9A 3CAB4000                     mov     bl, byte ptr [edx+40AB3C]
004027F8   .  2ADA                              sub     bl, dl
004027FA   .  32DA                              xor     bl, dl
00402803   .  889A 3CAB4000                     mov     byte ptr [edx+40AB3C], bl ;★re-encryption
00402809   .  42                                inc     edx
0040280E   >  83FA 2E                           cmp     edx, 2E
00402811   .^ 72 DB                             jb      short 004027EE
00402813   .  C3                                retn

00403D53 >/$  833D 25B04000 00                  cmp     dword ptr [40B025], 0 ;★这里检查是否存在调试器标志
00403D5E  |.  76 46                             jbe     short 00403DA6
00403D60  |.  A1 25B04000                       mov     eax, dword ptr [40B025]
00403D69  |.  0105 86904000                     add     dword ptr [409086], eax
00403D6F  |.  EB 03                             jmp     short 00403D74
00403D74  |>  0105 8A904000                     add     dword ptr [40908A], eax
00403D7A  |.  EB 03                             jmp     short 00403D7F
00403D7F  |>  0105 8E904000                     add     dword ptr [40908E], eax
00403D85  |.  EB 03                             jmp     short 00403D8A
00403D8A  |>  0105 92904000                     add     dword ptr [409092], eax
00403D96  |.  A1 86904000                       mov     eax, dword ptr [409086]
00403DA1  |.  A3 29B04000                       mov     dword ptr [40B029], eax
00403DA6  \>  C3                                retn

黑名单
0040AB3C  53 4E 44 00 43 69 4D 27 73 00 53 48 41 44 4F 57  SND.CiM's.SHADOW
0040AB4C  00 54 45 53 54 44 42 47 00 70 65 64 69 79 30 36  .TESTDBG.pediy06                 ;看雪
0040AB5C  00 4F 4C 4C 59 44 42 47 00 4C 62 72 36 38 00 00  .OLLYDBG.Lbr68.
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-24 23:45
6
0
00403E03   $  33D2                              xor     edx, edx
00403E05   .  33F6                              xor     esi, esi
00403E07   .  74 05                             je      short 00403E0E
00403E09   .  68 03059090                       push    90900503
00403E0E   >  A1 D0AB4000                       mov     eax, dword ptr [40ABD0] ;基址
00403E19   .  05 00100000                       add     eax, 1000
00403E24   .  E8 F0E9FFFF                       call    00402819
00403E29   .  75 04                             jnz     short 00403E2F
00403E2B   .^ 74 88                             je      short 00403DB5
00403E2F   >  0FB610                            movzx   edx, byte ptr [eax]
00403E32   .  92                                xchg    eax, edx
00403E33   .  42                                inc     edx
00403E3A   .  E8 DAE9FFFF                       call    00402819
00403E45   .  03F0                              add     esi, eax  ;累加整个代码段
00403E47   .  75 07                             jnz     short 00403E50
00403E49   .  74 05                             je      short 00403E50
00403E4B   .  8809                              mov     byte ptr [ecx], cl
00403E4D   .  A5                                movs    dword ptr es:[edi], dword ptr [esi]
00403E50   >  92                                xchg    eax, edx
00403E51   .  E8 C3E9FFFF                       call    00402819
00403E56   .  EB 03                             jmp     short 00403E5B
00403E5B   >  3D FE7F4000                       cmp     eax, 00407FFE  ;段尾
00403E60   .^ 7C CD                             jl      short 00403E2F
00403E66   .  E8 AEE9FFFF                       call    00402819
00403E6B   .  C3                                retn

0040413C   > \B8 033E4000                       mov     eax, 00403E03                            ;  入口地址
00404147   .  A3 41B04000                       mov     dword ptr [40B041], eax
00404152   .  E8 B1E8FFFF                       call    00402A08
0040415D   .  E8 C9EBFFFF                       call    00402D2B
00404168   .  A1 D0AB4000                       mov     eax, dword ptr [40ABD0]
0040416D   .  03C6                              add     eax, esi
0040416F   .  EB 03                             jmp     short 00404174
00404174   >  0305 92904000                     add     eax, dword ptr [409092]
0040417E   .  2B35 A2904000                     sub     esi, dword ptr [4090A2]
00404189   >  81FE AA000000                     cmp     esi, 0AA    ;★自校验
00404199   >  74 0B                             je      short 004041A6    ;★必须跳
0040419B   .  75 02                             jnz     short 0040419F
0040419F   >  C605 62494000 08                  mov     byte ptr [404962], 8   ;★不干好事 注意这里004041AA   ?  2B05 9A904000                     sub     eax, dword ptr [40909A]
004041B6   .  0305 86904000                     add     eax, dword ptr [409086]
004041C0   .  6BC0 03                           imul    eax, eax, 3
004041C3   .  85C0                              test    eax, eax
004041C5   .  74 3B                             je      short 00404202
004041C7   .  75 02                             jnz     short 004041CB
004041CB   >  8B45 E4                           mov     eax, dword ptr [ebp-1C]
004041F5   .  33C0                              xor     eax, eax
004041FA   .  74 06                             je      short 00404202
004041FC   .  75 04                             jnz     short 00404202
00404202   .  66:8B15 AE904000                  mov     dx, word ptr [4090AE]
0040420D   .  66:3315 96904000                  xor     dx, word ptr [409096]
00404218   .  66:8915 121C4000                  mov     word ptr [401C12], dx
00404223   .  68 2E424000                       push    0040422E
00404228   .  C3                                retn

0040422E   .  66:3315 96904000                  xor     dx, word ptr [409096]
00404239   .  E8 15FBFFFF                       call    00403D53 ;★ 检查前面Findwindow得到的标志
00404244   .  68 4F424000                       push    0040424F
00404249   .  C3                                retn
0040424F   .  E8 33E6FFFF                       call    402887
0040425A   .  66:8B0D AE904000                  mov     cx, word ptr [4090AE]
00404265   .  51                                push    ecx
00404266   .  320D 2EB04000                     xor     cl, byte ptr [40B02E]
00404270   .  66:890D 01414000                  mov     word ptr [404101], cx
0040427B   .  320D 2EB04000                     xor     cl, byte ptr [40B02E]
00404281   .  59                                pop     ecx
00404286   .  B8 043A4000                       mov     eax, 00403A04                     ;  入口地址
00404291   .  A3 3DB04000                       mov     dword ptr [40B03D], eax
0040429C   .  E8 67E7FFFF                       call    402A08
004042A7   .  B8 223B4000                       mov     eax, 00403B22                     ;  入口地址
004042B2   .  A3 41B04000                       mov     dword ptr [40B041], eax
004042BD   .  E8 8EE5FFFF                       call    402850
004042C8   .  B8 FE3B4000                       mov     eax, 00403BFE                     ;  入口地址
004042D3   .  A3 45B04000                       mov     dword ptr [40B045], eax
004042DE   .  E8 36E5FFFF                       call    402819
004042E9   .  66:8B15 AE904000                  mov     dx, word ptr [4090AE]
004042F4   .  66:3315 26B04000                  xor     dx, word ptr [40B026]
004042FF   .  66:8915 48434000                  mov     word ptr [404348], dx
0040430A   .  66:3315 26B04000                  xor     dx, word ptr [40B026]
00404315   .  83C4 00                           add     esp, 0
0040433F   .  33C0                              xor     eax, eax
00404344   .  74 06                             je      short 0040434C
00404346   .  75 04                             jnz     short 0040434C
0040434C   .  E8 25E7FFFF                       call    402A76 ;★ F7进去
00404357   .  E8 2BE5FFFF                       call    402887
00404362   .  68 8E434000                       push    0040438E
0040436D   .  75 09                             jnz     short 00404378
0040436F   .  74 02                             je      short 00404373
00404372   .  47                                inc     edi
00404373   >  74 03                             je      short 00404378
00404378   >  A1 D0AB4000                       mov     eax, dword ptr [40ABD0]
0040437D   .  03C1                              add     eax, ecx
00404383   .  2B05 36B04000                     sub     eax, dword ptr [40B036]
00404389   .  C3                                retn
0040438E   .  6B05 9A904000 03                  imul    eax, dword ptr [40909A], 3
00404399   .  E8 1CE3FFFF                       call    004026BA
004043A4   .  66:03C2                           add     ax, dx
004043A7   .  03C3                              add     eax, ebx
004043A9   .  85C0                              test    eax, eax
004043AF   .  74 09                             je      short 004043BA
004043B1   .  75 01                             jnz     short 004043B4
004043B4   .  03C7                              add     eax, edi
004043BA   >  0305 9E904000                     add     eax, dword ptr [40909E]
004043C0   .  EB 03                             jmp     short 004043C5
004043C2   .^ 7E 90                             jle     short 00404354
004043C5   >  E8 FFE4FFFF                       call    004028C9 ;★ 这里F7跟进去一下,取了一个跟时间相关的数
004043CA   .  8BD8                              mov     ebx, eax
004043D0   .  E8 44E4FFFF                       call    402819
004043D5   .  33C0                              xor     eax, eax
004043DB   .  F7F0                              div     eax                  ;人为地制造异常
004043DD   .  E8 A5E4FFFF                       call    402887
004043E6   .  2B05 36B04000                     sub     eax, dword ptr [40B036]
004043EC   .  C3                                retn

00403A04  /$  33D2                              xor     edx, edx
00403A06  |.  EB 28                             jmp     short 00403A30
00403A10  |>  8A9A 93AA4000                     /mov     bl, byte ptr [edx+40AA93]
00403A1A  |.  2ADA                              |sub     bl, dl
00403A1C  |.  32DA                              |xor     bl, dl
00403A25  |.  889A 93AA4000                     |mov     byte ptr [edx+40AA93], bl
00403A2B  |.  42                                |inc     edx
00403A30  |>  83FA 1C                            cmp     edx, 1C
00403A33  |.^ 72 DB                             \jb      short 00403A10
00403A3B  |.  33DB                              xor     ebx, ebx
00403A3D  |.  33FF                              xor     edi, edi
00403A46  |.  68 00020000                       push    200                               ; /BufSize = 200 (512.)
00403A51  |.  68 E3B14000                       push    0040B1E3                          ; |Buffer = ReverseM.0040B1E3
00403A5C  |.  E8 85390000                       call    <jmp.&kernel32.GetWindowsDirector>; \GetWindowsDirectoryA
00403A67  |.  68 93AA4000                       push    0040AA93                          ; /StringToAdd = ""
00403A72  |.  68 E3B14000                       push    0040B1E3                          ; |ConcatString = ""
00403A7D  |.  E8 94390000                       call    <jmp.&kernel32.lstrcatA>          ; \lstrcatA
00403A88  |.  6A 00                             push    0                                 ; /hTemplateFile = NULL
00403A8A  |.  68 80000000                       push    80                                ; |Attributes = NORMAL
00403A93  |.  6A 03                             push    3                                 ; |Mode = OPEN_EXISTING
00403A95  |.  6A 00                             push    0                                 ; |pSecurity = NULL
00403A97  |.  6A 01                             push    1                                 ; |ShareMode = FILE_SHARE_READ
00403A9E  |>  68 00000080                       push    80000000                          ; |Access = GENERIC_READ
00403AA9  |.  68 E3B14000                       push    0040B1E3                          ; |FileName = ""
00403AB4  |.  E8 03390000                       call    <jmp.&kernel32.CreateFileA>       ; \CreateFileA  Ring0调试器检测
00403AC0  |.  83F8 FF                           cmp     eax, -1
00403ACA  |.  C605 E3B14000 00                  mov     byte ptr [40B1E3], 0
00403AD5  |.  C605 93AA4000 00                  mov     byte ptr [40AA93], 0
00403AE0  |.  74 09                             je      short 00403AEB ;★必须跳
00403AE2  |.  A3 9A904000                       mov     dword ptr [40909A], eax ;★ 否则就会修改这里的数值 这个值在最后解码用户名的时候有用到
00403AEB  |>  33D2                              xor     edx, edx
00403AED  |.  EB 28                             jmp     short 00403B17
00403AF7  |>  8A9A 93AA4000                     /mov     bl, byte ptr [edx+40AA93]
00403B01  |.  2ADA                              |sub     bl, dl
00403B03  |.  32DA                              |xor     bl, dl
00403B0C  |.  889A 93AA4000                     |mov     byte ptr [edx+40AA93], bl
00403B12  |.  42                                |inc     edx
00403B17  |>  83FA 1C                            cmp     edx, 1C
00403B1A  |.^ 72 DB                             \jb      short 00403AF7
00403B1C  \.  C3                                retn

0040AA93  5C 73 79 73 74 65 6D 33 32 5C 64 72 69 76 65 72  \system32\driver
0040AAA3  73 5C 57 49 4E 49 43 45 2E 64 61 74 00           s\WINICE.dat.


00403B22   $  33D2                              xor     edx, edx
00403B24   .  EB 28                             jmp     short 00403B4E
00403B2E   >  8A9A B0AA4000                     mov     bl, byte ptr [edx+40AAB0]
00403B38   .  2ADA                              sub     bl, dl
00403B3A   .  32DA                              xor     bl, dl
00403B43   .  889A B0AA4000                     mov     byte ptr [edx+40AAB0], bl
00403B49   .  42                                inc     edx
00403B4E   >  83FA 5C                           cmp     edx, 5C
00403B51   .^ 72 DB                             jb      short 00403B2E
00403B59   .  33DB                              xor     ebx, ebx
00403B5B   .  33FF                              xor     edi, edi
00403B5D   .  EB 47                             jmp     short 00403BA6
00403B60   .  03E8                              add     ebp, eax
00403B64   >  6A 00                             push    0                                 ; /hTemplateFile = NULL
00403B66   .  68 80000000                       push    80                                ; |Attributes = NORMAL
00403B6F   .  6A 03                             push    3                                 ; |Mode = OPEN_EXISTING
00403B71   .  6A 00                             push    0                                 ; |pSecurity = NULL
00403B73   .  6A 01                             push    1                                 ; |ShareMode = FILE_SHARE_READ
00403B7A   .  68 00000080                       push    80000000                          ; |Access = GENERIC_READ
00403B85   .  68 E3B14000                       push    0040B1E3                          ; |FileName = ""
00403B90   .  E8 27380000                       call    <jmp.&kernel32.CreateFileA>       ; \CreateFileA 检测驱动
00403B9B   .  83C0 01                           add     eax, 1
00403B9E   .  03D8                              add     ebx, eax ;★累加
00403BA0   .  47                                inc     edi
00403BA1   .  EB 03                             jmp     short 00403BA6
00403BA6   >  83FF 5C                           cmp     edi, 5C
00403BA9   .^ 72 B9                             jb      short 00403B64
00403BB1   .  3105 9E904000                     xor     dword ptr [40909E], eax ;★如果检测到黑名单中的驱动存在的话,这个值将被改写。个人感觉作者这里的原意应该是 xor dword ptr [40909E] ,ebx
00403BB7   .  EB 03                             jmp     short 00403BBC
00403BBC   >  C605 B0AA4000 00                  mov     byte ptr [40AAB0], 0
00403BC7   .  33D2                              xor     edx, edx
00403BC9   .  EB 28                             jmp     short 00403BF3
00403BD3   >  8A9A B0AA4000                     mov     bl, byte ptr [edx+40AAB0]
00403BDD   .  32DA                              xor     bl, dl
00403BDF   .  02DA                              add     bl, dl
00403BE8   .  889A B0AA4000                     mov     byte ptr [edx+40AAB0], bl
00403BEE   .  42                                inc     edx
00403BF3   >  83FA 5C                           cmp     edx, 5C
00403BF6   .^ 72 DB                             jb      short 00403BD3
00403BF8   .  C3                                retn

0040AAB0  5C 5C 2E 5C 53 49 43 45 00 5C 5C 2E 5C 53 49 57  \\.\SICE.\\.\SIW
0040AAC0  56 49 44 00 5C 5C 2E 5C 4E 54 49 43 45 00 5C 5C  VID.\\.\NTICE.\\
0040AAD0  2E 5C 52 45 47 53 59 53 00 5C 5C 2E 5C 52 45 47  .\REGSYS.\\.\REG
0040AAE0  56 58 47 00 5C 5C 2E 5C 46 49 4C 45 56 58 47 00  VXG.\\.\FILEVXG.
0040AAF0  5C 5C 2E 5C 46 49 4C 45 4D 00 5C 5C 2E 5C 54 52  
\\.\FILEM.\\.\TR
0040AB00  57 00 5C 5C 2E 5C 49 43 45 45 58 54 00           W.\\.\ICEEXT.

00403BFE   $  33D2                              xor     edx, edx
00403C00   .  EB 28                             jmp     short 00403C2A
00403C0A   >  8A9A 0DAB4000                     mov     bl, byte ptr [edx+40AB0D]
00403C14   .  2ADA                              sub     bl, dl
00403C16   .  32DA                              xor     bl, dl
00403C1F   .  889A 0DAB4000                     mov     byte ptr [edx+40AB0D], bl
00403C25   .  42                                inc     edx
00403C2A   >  83FA 2E                           cmp     edx, 2E
00403C2D   .^ 72 DB                             jb      short 00403C0A
00403C35   .  C605 29AB4000 00                  mov     byte ptr [40AB29], 0
00403C40   .  C605 34AB4000 00                  mov     byte ptr [40AB34], 0
00403C4B   .  33DB                              xor     ebx, ebx
00403C4D   .  33FF                              xor     edi, edi
00403C4F   .  75 06                             jnz     short 00403C57
00403C51   .  74 04                             je      short 00403C57
00403C57   >  B8 56020000                       mov     eax, 256
00403C62   .  A3 39B64000                       mov     dword ptr [40B639], eax
00403C6D   .  68 41B64000                       push    0040B641                          ; /pHandle = ReverseM.0040B641
00403C78   .  68 1F000200                       push    2001F                             ; |Access =
KEY_QUERY_VALUE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY|KEY_ENUMERATE_SUB_KEYS|KEY_NOTIFY|20000
00403C82   .  6A 00                             push    0                                 ; |Reserved = 0
00403C84   .  68 0DAB4000                       push    0040AB0D                          ; |Subkey = "SOFZWIZI\P",89,"Quw}bdt峹",85,"|
[z",85,"",96,"崗"
00403C8E   .  68 02000080                       push    80000002                          ; |hKey = HKEY_LOCAL_MACHINE
00403C99   .  E8 38380000                       call    <jmp.&advapi32.RegOpenKeyExA>     ; \RegOpenKeyExA
00403CA4   .  68 39B64000                       push    0040B639                          ; /pBufSize = ReverseM.0040B639
00403CAF   .  68 E3B34000                       push    0040B3E3                          ; |Buffer = ReverseM.0040B3E3
00403CB9   .  68 35AB4000                       push    0040AB35                          ; |pValueType = ReverseM.0040AB35
00403CBE   .  6A 00                             push    0                                 ; |Reserved = NULL
00403CC5   .  68 2AAB4000                       push    0040AB2A                          ; |ValueName = "q?,8B,"tapr",84,"qz"
00403CD0   .  FF35 41B64000                     push    dword ptr [40B641]                ; |hKey = 0
00403CDB   .  E8 FC370000                       call    <jmp.&advapi32.RegQueryValueExA>  ; \RegQueryValueExA 检测注册表
00403CE0   .  EB 03                             jmp     short 00403CE5
00403CE5   >  C605 0DAB4000 00                  mov     byte ptr [40AB0D], 0
00403CF0   .  C605 2AAB4000 00                  mov     byte ptr [40AB2A], 0
00403CFB   .  C605 35AB4000 00                  mov     byte ptr [40AB35], 0
00403D02   .  EB 03                             jmp     short 00403D07
00403D07   >  85C0                              test    eax, eax
00403D09   .  75 11                             jnz     short 00403D1C ;★必须跳
00403D11   .  8035 A6904000 37                  xor     byte ptr [4090A6], 37 ;★否则等待这个值的命运将是被修改
00403D1C   >  33D2                              xor     edx, edx
00403D1E   .  EB 28                             jmp     short 00403D48
00403D28   >  8A9A 0DAB4000                     mov     bl, byte ptr [edx+40AB0D]
00403D32   .  32DA                              xor     bl, dl
00403D34   .  02DA                              add     bl, dl
00403D3D   .  889A 0DAB4000                     mov     byte ptr [edx+40AB0D], bl
00403D43   .  42                                inc     edx
00403D48   >  83FA 2E                           cmp     edx, 2E
00403D4B   .^ 72 DB                             jb      short 00403D28
00403D4D   .  C3                                retn

0040AB0D  53 4F 46 54 57 41 52 45 5C 4E 75 4D 65 67 61 5C  SOFTWARE\NuMega\
0040AB1D  44 72 69 76 65 72 53 74 75 64 69 6F F8 49 6E 73  DriverStudio鳬ns
0040AB2D  74 61 6C 6C 44 69 72 FE 52 45 47 5F 53 5A 00     tallDirEG_SZ.


004043FC   .  FF75 A8                push    dword ptr [ebp-58]
00404407   .  64:8F05 00000000       pop     dword ptr fs:[0]
00404412   .  E8 B2E4FFFF            call    004028C9
00404417   .  2BC3                   sub     eax, ebx
0040441D   .  3D C02C0700            cmp     eax, 72CC0     ;检测上面人为制造的异常时间差,如果被单步调试的话这个值就很可能大于72CC0
00404422   .  72 30                  jb      short 00404454 ;★必须跳
00404428   .  A1 AA904000            mov     eax, dword ptr [4090AA]
0040442D   .  33DB                   xor     ebx, ebx
00404433   .  A3 63494000            mov     dword ptr [404963], eax  ;★不干好事
0040443E   .  A1 AE904000            mov     eax, dword ptr [4090AE]
00404449   .  A3 67494000            mov     dword ptr [404967], eax  ;★好事的不做
00404454   >  68 D8444000            push    004044D8
0040445F   .  E8 23E4FFFF            call    402887
0040446A   .  75 09                  jnz     short 00404475
0040446C   .  74 02                  je      short 00404470
0040446F   .  47                     inc     edi
00404470   >  74 03                  je      short 00404475
00404475   >  E8 9FE3FFFF            call    402819
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-24 23:47
7
0
程序接着往下来到这里
00401013   $  55                     push    ebp
00401014   .  8BEC                   mov     ebp, esp
00401016   >  FF75 08                push    dword ptr [ebp+8]
00401019   .  E8 D8000000            call    004010F6
0040101E   .  803D F0AD4000 30       cmp     byte ptr [40ADF0], 30
00401025   .  73 0A                  jnb     short 00401031
00401027   .  FF75 08                push    dword ptr [ebp+8]
0040102A   .  E8 C7000000            call    004010F6
0040102F   .^ EB E5                  jmp     short 00401016
00401031   >  FF75 08                push    dword ptr [ebp+8]
00401034   .  E8 FD000000            call    00401136
00401039   .  803D E6AD4000 01       cmp     byte ptr [40ADE6], 1
00401040   .  76 1D                  jbe     short 0040105F
00401042   .  FF75 08                push    dword ptr [ebp+8]
00401045   .  E8 AC000000            call    004010F6
0040104A   .  803D E9AD4000 CC       cmp     byte ptr [40ADE9], 0CC
00401051   .  76 61                  jbe     short 004010B4
00401053   .  FF75 08                push    dword ptr [ebp+8]
00401056   .  E8 DB000000            call    00401136
0040105B   .^ EB B9                  jmp     short 00401016
0040105D   .  EB 55                  jmp     short 004010B4
0040105F   >  803D E2AD4000 01       cmp     byte ptr [40ADE2], 1
00401066   .  76 1B                  jbe     short 00401083
00401068   .  FF75 08                push    dword ptr [ebp+8]
0040106B   .  E8 86000000            call    004010F6
00401070   .  803D EBAD4000 FF       cmp     byte ptr [40ADEB], 0FF
00401077   .  73 3B                  jnb     short 004010B4
00401079   .  FF75 08                push    dword ptr [ebp+8]
0040107C   .  E8 B5000000            call    00401136
00401081   .  EB 31                  jmp     short 004010B4
00401083   >  803D E4AD4000 30       cmp     byte ptr [40ADE4], 30
0040108A   .  75 0C                  jnz     short 00401098
0040108C   .  FF75 08                push    dword ptr [ebp+8]
0040108F   .  E8 A2000000            call    00401136
00401094   .^ EB 80                  jmp     short 00401016
00401096   .  EB 1C                  jmp     short 004010B4
00401098   >  803D E8AD4000 30       cmp     byte ptr [40ADE8], 30
0040109F   .  73 13                  jnb     short 004010B4
004010A1   .  FF75 08                push    dword ptr [ebp+8]
004010A4   .  E8 4D000000            call    004010F6
004010A9   .  803D B3AC4000 30       cmp     byte ptr [40ACB3], 30
004010B0   .  73 02                  jnb     short 004010B4
004010B2   .  EB 24                  jmp     short 004010D8
004010B4   >  68 08904000            push    00409008                         ; /unregistered
004010B9   .  68 ED030000            push    3ED                              ; |ControlID = 3ED (1005.)
004010BE   .  FF75 08                push    dword ptr [ebp+8]                ; |hWnd
004010C1   .  E8 C0620000            call    <jmp.&user32.SetDlgItemTextA>    ; \SetDlgItemTextA
004010C6   .  B8 16104000            mov     eax, 00401016
004010CB   >  8030 34                xor     byte ptr [eax], 34
004010CE   .  40                     inc     eax
004010CF   .  3D CB104000            cmp     eax, 004010CB
004010D4   .^ 7C F5                  jl      short 004010CB
004010D6   .  EB 1A                  jmp     short 004010F2
004010D8   >  FF75 08                push    dword ptr [ebp+8]
004010DB   .  E8 20FFFFFF            call    00401000
004010E0   .  68 15904000            push    00409015                         ; /registered to
004010E5   .  68 ED030000            push    3ED                              ; |ControlID = 3ED (1005.)
004010EA   .  FF75 08                push    dword ptr [ebp+8]                ; |hWnd
004010ED   .  E8 94620000            call    <jmp.&user32.SetDlgItemTextA>    ; \SetDlgItemTextA
004010F2   >  C9                     leave
004010F3   .  C2 0400                retn    4

004010F6  /$  55                     push    ebp
004010F7  |.  8BEC                   mov     ebp, esp
004010F9  |.  BB 01000000            mov     ebx, 1
004010FE  |.  E8 D7620000            call    <jmp.&kernel32.GetTickCount>     ; [GetTickCount
00401103  |.  8BC8                   mov     ecx, eax
00401105  |>  F7E1                   /mul     ecx
00401107  |.  F7E3                   |mul     ebx
00401109  |.  D1C8                   |ror     eax, 1
0040110B  |.  03C3                   |add     eax, ebx
0040110D  |.  33D2                   |xor     edx, edx
0040110F  |.  BE 24000000            |mov     esi, 24
00401114  |.  F7F6                   |div     esi
00401116  |.  83C2 41                |add     edx, 41
00401119  |.  83FA 5A                |cmp     edx, 5A
0040111C  |.  7E 03                  |jle     short 00401121
0040111E  |.  83EA 2B                |sub     edx, 2B
00401121  |>  8893 DEAD4000          |mov     byte ptr [ebx+40ADDE], dl
00401127  |.  3B1D 96A84000          |cmp     ebx, dword ptr [40A896]
0040112D  |.  74 03                  |je      short 00401132
0040112F  |.  43                     |inc     ebx
00401130  |.^ EB D3                  \jmp     short 00401105
00401132  |>  C9                     leave
00401133  \.  C2 0400                retn    4

00401136  /$  55                     push    ebp
00401137  |.  8BEC                   mov     ebp, esp
00401139  |.  BB 01000000            mov     ebx, 1
0040113E  |.  E8 97620000            call    <jmp.&kernel32.GetTickCount>     ; [GetTickCount
00401143  |.  8BC8                   mov     ecx, eax
00401145  |>  F7E1                   /mul     ecx
00401147  |.  F7E3                   |mul     ebx
00401149  |.  D1C8                   |ror     eax, 1
0040114B  |.  03C3                   |add     eax, ebx
0040114D  |.  33D2                   |xor     edx, edx
0040114F  |.  BE 0A000000            |mov     esi, 0A
00401154  |.  F7F6                   |div     esi
00401156  |.  83C2 30                |add     edx, 30
00401159  |.  8893 DEAD4000          |mov     byte ptr [ebx+40ADDE], dl
0040115F  |.  3B1D 96A84000          |cmp     ebx, dword ptr [40A896]
00401165  |.  74 03                  |je      short 0040116A
00401167  |.  43                     |inc     ebx
00401168  |.^ EB DB                  \jmp     short 00401145
0040116A  |>  C9                     leave
0040116B  \.  C2 0400                retn    4
如果我们之前有任何一处Anti没过的话,你对SetDlgItemTextA下断点的话将会发现只有这里调用了这个函数对控件的文本进行修改。但是我们注意到,通过资源文件我们发现界面上显示的那个文本框的ID是3EE(1006),而不是上面显示的3ED(1005)。
水货,又见水货。还记得作者说过decoy code and decoy strings吗?如果你对这段代码进行详细分析,并试图找出注册算法或者试图强暴她的话,那么恭喜你,你已经被作者耍了。
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-5-25 13:03
8
0
没能理解,是不是这样就可以了?
上传的附件:
  • 1.jpg (34.21kb,369次下载)
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-25 15:06
9
0
作者的意思好像就是这样的,不知道海风兄是如何搞定的 ,思路可以说说吗?
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-5-25 15:21
10
0
直接用reshacker把资源里字符改了,重编译一下,保存,即可

貌似OD之类的都不需要用
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-25 16:08
11
0
Goal is to register the ReverseMe. This is visualised if it says at startup "REGISTERED to:" followed by the name you registered it for.
You may either patch, fish or keygen. More info in About box. (Obviously, no aesthetic-patching-only!)

其实这个crackme还是很有意思的,能学到不少东东。里面Anti的技巧不少,而且就算是作者说很简单的注册机制(The algo is short and easy)也有点意思。
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-5-25 16:19
12
0
红字是什么的意思啊,我没理解
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-25 17:42
13
0
作者的解释:
aesthetic patching means not to patch through the registration scheme but for example by plain stupidly opening the ReverseMe in a resource editor and changing the "UNREGISTERED" into "REGISTERED to: fjlj" which doesn't effectively register anything. Right?
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-5-25 18:42
14
0
难道要自己写代码:SetWindowText() 修改它的字符?

还是它里面有这些代码要找出来?
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-25 19:33
15
0
crackme里面有相应的代码,不过被隐藏起来了。
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-5-25 20:16
16
0
这次没改资源
上传的附件:
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-26 00:12
17
0
打补丁的话也应该patch through the registration scheme 否则就没有难度同时也少了乐趣了,注意这个crackme是要求register,最好的结果是不改变这个crackme想办法注册成功使之显示成功画面
存在注册机的哟
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-5-26 10:07
18
0
说实话,我没发现
-anti-patching

在哪体现出来的

真晕,ReverseMe还有这么多限制
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-26 10:17
19
0
说实话,我没发现
-anti-patching
在哪体现出来的


程序存在自校验的,如果patch了代码段任一字节,那么真正的注册检验代码都是不可能被运行的。
海风兄最后patch的那个难道patch代码段了?

真晕,ReverseMe还有这么多限制


主要玩的就是anti and hide ,crackme嘛,练手+好玩罢了
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-5-26 10:21
20
0
patch是代码段啊,你可以下载看看啊,但不是注册验证附件的那一段,注册那一段也找到了,花指令就那几种,不难清除

程序没自校验,所谓的anti-patch其实就是smc来改变执行流程(貌似也就1处有效果)
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-29 17:25
21
0
patch是代码段啊,你可以下载看看啊,但不是注册验证附件的那一段,注册那一段也找到了,花指令就那几种,不难清除
程序没自校验,所谓的anti-patch其实就是smc来改变执行流程(貌似也就1处有效果)

注册验证的那一段确实不难,我就不分析了
给个能用的keyfile内容吧。不过由于machine specific algo,所以在我机器上能用的注册码在您的机器上可能就跑不起来。
我的keyfile二进制内容:

43 02 A9 40 2F 4E 0D CC 61 77 6E 58 EB 05 B8 B7 C〡/N.蘟wnX?阜
B8 B7 B8 64 8F 05 00 00 00 00 C9 68 75 4B 40 00 阜竏?....蒱uK@.
C3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?..............

其中绿色部分是加密后的用户名,由于我的用户名是hawking,所以这里是7位。
蓝色部分固定为CC,可以看作一个分隔符
红色部分是您当前系统登录用户名的第2、3个字符
紫色部分是您系统盘卷标的第3、4个字符
后面黄色的7个字节的和必须等于486H。而且程序会把从黄色开始的字节当作代码运行
用户名加密的算法行简单,algo is short and easy,大家自己分析一下就行了。被当作代码运行的字节我这里提供的只是一个参考,大家可以自己自由发挥。
注册机就不想写了。
雪    币: 7300
活跃值: (3758)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
海风月影 22 2007-5-29 17:37
22
0
00000000h: D5 14 AF 24 82 E8 68 4A CC 49 63 6E 58 EB 08 B7 ; ??傝hJ蘄cnX??
00000010h: B7 B7 B7 B7 90 90 90 FF 75 08 68 8B 1B 40 00 C3 ; 贩贩悙?u.h?@.

这个是我的内容,呵呵。前几天打算写注册机的,不小心中了VKING变种,忙着杀毒了

注册机我也不写了,没什么意思
放一个去掉花指令的版本吧
上传的附件:
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-29 17:52
23
0
0040ACC0   /EB 08           jmp     short 0040ACCA
0040ACC2   |B7 B7           mov     bh, 0B7
0040ACC4   |B7 B7           mov     bh, 0B7
0040ACC6   |B7 90           mov     bh, 90
0040ACC8   |90              nop
0040ACC9   |90              nop
0040ACCA   \FF75 08         push    dword ptr [ebp+8]
0040ACCD    68 8B1B4000     push    00401B8B
0040ACD2    C3              retn

想法差不多

0040ACBF   /EB 05           jmp     short 0040ACC6
0040ACC1   |B8 B7B8B7B8     mov     eax, B8B7B8B7
0040ACC6   \64:8F05 0000000>pop     dword ptr fs:[0]
0040ACCD    C9              leave
0040ACCE    68 754B4000     push    00404B75
0040ACD3    C3              retn
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
newmovie 2007-5-29 19:40
24
0
两位大大:前几天就看过了这个帖子,跟这个CM也几天了,因为大菜鸟一个至今也没有什么发现,希望两位高手能不吝多指教几处,先谢过了:
1.这个CM的花指令我一直都是手改的,也想用脚本处理但是水平实在太次尝试了几次也没成功,能不能在怎么去处这个CM花指令上多给些指教,如果能提供下脚本来学习就更好了!
2.为什么我跟到sysenter就跟不进去了,查了下是进入了ring0,这里是不是呢?那要怎么才能跟到注册处呢?
3.你们说的keyfile在哪里?我看了资源里也没有.
4.最后注册成功的信息是怎么写入文本框的呢?不是SetDlgItemTextA吗?
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
hawking 12 2007-5-29 19:53
25
0
1.这个CM的花指令我一直都是手改的,也想用脚本处理但是水平实在太次尝试了几次也没成功,能不能在怎么去处这个CM花指令上多给些指教,如果能提供下脚本来学习就更好了!

我写的脚本很简单,放个给你参考下。
repl 00401000,#8184E8??????????????E88184#,#909090??????????????909090#,64DC
repl 00401000,#8184??????????????????#,#9090??????????????????#,64DC

go 00401DE0

repl 00401000,#EB02????#,#90909090#,64DC
repl 00401000,#EB04????????#,#909090909090#,64DC
repl 00401000,#EB05??????????#,#90909090909090#,64DC
repl 00401000,#EB06????????????#,#9090909090909090#,64DC
repl 00401000,#74037501??#,#9090909090#,64DC
repl 00401000,#75037401??#,#9090909090#,64DC
repl 00401000,#74047502????#,#909090909090#,64DC
repl 00401000,#75047402????#,#909090909090#,64DC
repl 00401000,#74057503??????#,#90909090909090#,64DC
repl 00401000,#75057403??????#,#90909090909090#,64DC
repl 00401000,#E80A000000E8EB0C0000E8F6FFFFFFE8F2FFFFFF83C408#,#9090909090909090909090909090909090909090909090#,64DC
repl 00401000,#33C0740B7528????E80A000000????7402????74F3????E809000000??????????????????7402????83C40874??#,#90909090909090909090909090909090909090909090909090909090909090909090909090909033C090909074??#,64DC

asm 00402583,"xor esi,esi"
asm 004027C6,"xor ebx,ebx"
repl 00404199,#740B#,#EB0B#,2
repl 00403AE0,#7409#,#EB09#,2
asm 00403B9E,"xor eax,eax"
repl 00403D09,#7511#,#EB11#,2
repl 00404422,#7230#,#EB30#,2
repl 00403AE0,#7409#,#EB09#,2

go 00404963
sti
sti
ret

2.为什么我跟到sysenter就跟不进去了,查了下是进入了ring0,这里是不是呢?那要怎么才能跟到注册处呢?

应该是程序检测到被调试或被修改了,然后执行到某段代码去了。文中代码基本是按顺序排下来的,我并没有跟到您说的地方。
3.你们说的keyfile在哪里?我看了资源里也没有.

新建一个文件并命名为lena151,然后输入相应的二进制字节并保存在crackme同一个文件夹中就可以了。其实也就是个文件验证型crackme.
4.最后注册成功的信息是怎么写入文本框的呢?不是SetDlgItemTextA吗?

是SetDlgItemTextA,不过在没过Anti、keyfile的内容不正确的情况下这段代码是执行不到的。
游客
登录 | 注册 方可回帖
返回