• 标 题:一篇破解入门 (7千字)
  • 作 者:custer
  • 时 间:2000-9-4 8:56:19
  • 链 接:http://bbs.pediy.com

软件WinImp1.11(主程序winimp32.exe 大小463,872字节)
该软件是类似winzip的压缩软件,支持的格式较多,压缩率也很高,并且软件本身有自交验功能。
本人是在该软件报警后,发现机器中有病毒的。

工具:trw2000-1.22
过程如下:
输入如下内容  name:1234      key1:12345678    key2:12345678

用BPX HMEMCPY下断点,拦截后BC *,PMODULE后进入下面程序

0167:00426013  PUSH    EBX
0167:00426014  PUSH    ECX
0167:00426015  PUSH    EDX
0167:00426016  PUSH    ESI
0167:00426017  PUSH    EDI
0167:00426018  ENTER    24,00
0167:0042601C  MOV      ESI,EAX
0167:0042601E  PUSH    DWORD 0100
0167:00426023  PUSH    DWORD 00453C60
0167:00426028  PUSH    BYTE +65
0167:0042602A  PUSH    EAX
0167:0042602B  XOR      EBX,EBX
0167:0042602D  CALL    NEAR [CS:0043D7A0]    <---- get name code
0167:00426034  MOV      DWORD [EBP-04],00
0167:0042603B  MOV      EAX,00453C60
0167:00426040  JMP      SHORT 00426046
0167:00426042  AND      EBX,BYTE +03
0167:00426045  INC      EAX
0167:00426046  CMP      BYTE [EAX],00
0167:00426049  JZ      00426067
0167:0042604B  CMP      BYTE [EAX],20
0167:0042604E  JZ      00426042
0167:00426050  CMP      BYTE [EAX],2E
0167:00426053  JZ      00426042
0167:00426055  MOVZX    EDI,BYTE [EAX]
0167:00426058  MOV      EDX,EBX
0167:0042605A  MOV      CL,[EDI+00451110]
0167:00426060  INC      EBX
0167:00426061  ADD      [EDX+EBP-04],CL      <---- move to [005cf740]
                                              1234<->31323334
0167:00426065  JMP      SHORT 00426042
0167:00426067  PUSH    BYTE +0C
0167:00426069  LEA      EAX,[EBP-24]
0167:0042606C  PUSH    EAX
0167:0042606D  PUSH    BYTE +66
0167:0042606F  PUSH    ESI
0167:00426070  MOV      EBX,10
0167:00426075  CALL    NEAR [CS:0043D7A0]    <---- get key1 code
0167:0042607C  LEA      EAX,[EBP-24]
0167:0042607F  XOR      EDX,EDX
0167:00426081  CALL    00437454              <---- 对代码的检测,并送入[005cf738]
                                              12345678<->78563412
0167:00426086  PUSH    BYTE +0C
0167:00426088  MOV      [EBP-0C],EAX
0167:0042608B  LEA      EAX,[EBP-24]
0167:0042608E  PUSH    EAX
0167:0042608F  PUSH    BYTE +67
0167:00426091  PUSH    ESI
0167:00426092  MOV      DWORD [EBP-08],00
0167:00426099  MOV      EBX,10
0167:0042609E  CALL    NEAR [CS:0043D7A0]    <---- get key2 code
0167:004260A5  LEA      EAX,[EBP-24]
0167:004260A8  XOR      EDX,EDX
0167:004260AA  CALL    00437454              <---- 对代码的检测,并送入[005cf73c]
                                              12345678<->78563412
0167:004260AF  MOV      EDX,[EBP-0C]
0167:004260B2  MOV      [EBP-08],EAX
0167:004260B5  CMP      EDX,01000000
0167:004260BB  JC      004260D3
0167:004260BD  CMP      EAX,01000000
0167:004260C2  JC      004260D3
0167:004260C4  MOV      EAX,EDX
0167:004260C6  MOV      EDX,[EBP-08]
0167:004260C9  CALL    004262A7              <---- main proc
0167:004260CE  CMP      EAX,[EBP-04]
0167:004260D1  JZ      004260EB


进入main proc
0167:004262A7  PUSH    EBX
0167:004262A8  PUSH    ECX
0167:004262A9  PUSH    ESI
0167:004262AA  MOV      ECX,EAX
0167:004262AC  MOV      EBX,EDX
0167:004262AE  MOV      EDX,[0044A764]
0167:004262B4  CALL    0042622D            <-------1
0167:004262B9  MOV      ESI,EAX
0167:004262BB  MOV      EDX,EBX
0167:004262BD  MOV      EBX,20
0167:004262C2  MOV      EAX,ECX
0167:004262C4  XOR      ECX,ECX
0167:004262C6  CALL    00436B7E            <-------2
0167:004262CB  XOR      EAX,ESI            <---- 这里是将key1的code进行一系列运算后的值(esi)
                                                  与key2的code(eax)异或,之后与name的code比较
                                                  这样可以简单的作出一个注册机

                                                  NAME XOR 199B0737(12345678<->KEY1)=KEY2
                                                  34333231(1234) XOR 199B0737=2DA83506
                                                 
                                                  name:1234    
                                                  key1:12345678    
                                                  key2:2da83506

0167:004262CD  POP      ESI
0167:004262CE  POP      ECX
0167:004262CF  POP      EBX
0167:004262D0  RET   

注意:key1,key2的长度是name的2倍。如果有兴趣,
可以进入上面的1,2中,分析一下,作出一个注册机。
--------------------------------------------------
1:
0167:0042622D  PUSH    EBX
0167:0042622E  PUSH    ECX
0167:0042622F  PUSH    ESI
0167:00426230  PUSH    EDI
0167:00426231  ENTER    04,00
0167:00426235  PUSH    EDX
0167:00426236  TEST    BYTE [EBP-08],01
0167:0042623A  JNZ      00426243
0167:0042623C  MOV      ECX,01
0167:00426241  JMP      SHORT 00426245
0167:00426243  MOV      ECX,EAX
0167:00426245  MOV      DWORD [EBP-04],02
0167:0042624C  MOV      EDI,EAX
0167:0042624E  JMP      SHORT 00426259
0167:00426250  SHL      DWORD [EBP-04],1
0167:00426253  CMP      DWORD [EBP-04],BYTE +00
0167:00426257  JZ      0042629F
0167:00426259  MOV      ESI,[0044A760]
0167:0042625F  MOV      EAX,EDI
0167:00426261  MOV      EDX,EDI
0167:00426263  MUL      EDX
0167:00426265  CMP      ESI,EDX
0167:00426267  JA      00426273
0167:00426269  MOV      EBX,EAX
0167:0042626B  MOV      EAX,EDX
0167:0042626D  XOR      EDX,EDX
0167:0042626F  DIV      ESI
0167:00426271  MOV      EAX,EBX
0167:00426273  DIV      ESI
0167:00426275  MOV      ESI,[EBP-08]
0167:00426278  MOV      EAX,EDX
0167:0042627A  MOV      EDI,EDX
0167:0042627C  TEST    [EBP-04],ESI
0167:0042627F  JZ      00426250
0167:00426281  MOV      ESI,[0044A760]
0167:00426287  MOV      EDX,ECX
0167:00426289  MUL      EDX
0167:0042628B  CMP      ESI,EDX
0167:0042628D  JA      00426299
0167:0042628F  MOV      EBX,EAX
0167:00426291  MOV      EAX,EDX
0167:00426293  XOR      EDX,EDX
0167:00426295  DIV      ESI
0167:00426297  MOV      EAX,EBX
0167:00426299  DIV      ESI
0167:0042629B  MOV      ECX,EDX
0167:0042629D  JMP      SHORT 00426250
0167:0042629F  MOV      EAX,ECX
0167:004262A1  LEAVE 
0167:004262A2  POP      EDI
0167:004262A3  POP      ESI
0167:004262A4  POP      ECX
0167:004262A5  POP      EBX
0167:004262A6  RET   
------------------------------------------------
2:
0167:00436B7E  AND      EBX,BYTE +3F
0167:00436B81  TEST    BL,60
0167:00436B84  JNZ      00436B8E
0167:00436B86  MOV      ECX,EBX
0167:00436B88  SHRD    EAX,EDX,CL
0167:00436B8B  SHR      EDX,CL
0167:00436B8D  RET   
0167:00436B8E  MOV      ECX,EBX
0167:00436B90  MOV      EAX,EDX
0167:00436B92  SUB      ECX,BYTE +20
0167:00436B95  XOR      EDX,EDX
0167:00436B97  SHR      EAX,CL
0167:00436B99  RET   
0167:00436B9A  AND      EBX,BYTE +3F
0167:00436B9D  TEST    BL,60
0167:00436BA0  JNZ      00436BAA
0167:00436BA2  MOV      ECX,EBX
0167:00436BA4  SHRD    EAX,EDX,CL
0167:00436BA7  SAR      EDX,CL
0167:00436BA9  RET   
0167:00436BAA  MOV      ECX,EBX
0167:00436BAC  MOV      EAX,EDX
0167:00436BAE  SUB      ECX,BYTE +20
0167:00436BB1  SAR      EDX,1F
0167:00436BB4  SAR      EAX,CL
0167:00436BB6  RET   
0167:00436BB7  AND      EBX,BYTE +3F
0167:00436BBA  TEST    BL,60
0167:00436BBD  JNZ      00436BC7
0167:00436BBF  MOV      ECX,EBX
0167:00436BC1  SHLD    EDX,EAX,CL
0167:00436BC4  SHL      EAX,CL
0167:00436BC6  RET   
0167:00436BC7  MOV      ECX,EBX
0167:00436BC9  MOV      EDX,EAX
0167:00436BCB  SUB      ECX,BYTE +20
0167:00436BCE  XOR      EAX,EAX
0167:00436BD0  SHL      EDX,CL
0167:00436BD2  RET   



                          custer      2000.9.3