• 标 题:用 softice 脱 aspack 2.1 的壳 (7千字)
  • 作 者:故我(KEN)
  • 时 间:2000-4-2 20:50:53
  • 链 接:http://bbs.pediy.com

工具: softice,procdump, SoftICE Backdoor Keeper, frogsice 0.43, icedump
      SoftICE Backdoor Keeper 到这边抓
      http://protools.exit.de/files/debuggers/ex-sibdk1.zip
      他说这个应该是适合所有的 softice 版本,我用 softice 4.05 测试没问题

前言:

这个档案也是用 asprotect 保护的
此版的 asprotect 会检测 softice, 且还会用 int 3 去检测
只用  frogsice 是无效的, 因此要配合 SoftICE Backdoor Keeper
把ex-sibdk1 解开,放到 softice 的目录,运行他,他为去改 winice.exe
改完了再重开机,就可以 下 bpint 3 了
若没有运行这个,下 bpint 3 是拦不到 int 3 的
还有一点,这个程序,未进入 OEP 之前
地址每次运行都会变,所以我写的地址,当然叶丝谕你的不一样
这个要注意的.

ok, go!!

1: 先用 procdump 观看一下 aspack,
  size of image 是 0007A000
  image og base 是 00400000
  看一下 section
  .idata 的 visual offset 是 46000
  这个应该是放 import table 的地方

2: 运行 frogsice,还有icedump, 按 ctrl-d 进入 softice, 下 bpint 3
  就是要拦截 int 3, 因为有运行过 
  运行 aspack2.1
  aspack2.1 会检测 sice 和 ntice
  sice 要去欺骗他, ntice 不要欺骗他,不然会当机
  到了拦截 int 3 时  , 就是这边,下 e eip 0
  故意让他生成例外.在下 bpm 446000
  为什么要下 446000 ? 是因为 400000+46000 = 446000

014F:004D2AD5  CC                  INT      3  ;  光标停在这边
014F:004D2AD6  EB02                JMP      004D2ADA                                   
014F:004D2AD8  E9025DEB02          JMP      033887DF                                   
014F:004D2ADD  E9FF33C05A          JMP      5B0D5EE1                                   
014F:004D2AE2  59                  POP      ECX                                         
014F:004D2AE3  59                  POP      ECX                 
014F:004D2AE4  648910              MOV      FS:[EAX],EDX         
014F:004D2AE7  EB0A                JMP      004D2AF3             
014F:004D2AE9  E9121AFFFF          JMP      004C4500             
014F:004D2AEE  E8791BFFFF          CALL      004C466C             
014F:004D2AF3  8A154C8F4D00        MOV      DL,[004D8F4C]       
014F:004D2AF9  8B45F4              MOV      EAX,[EBP-0C]         

3:
下完了 bpm 446000 , 不要按 F10 或  F8, 直接按 F5,
按 四次 F5,仔细看一下 ds:446000 的下方, 此时 import table 应该是
正确的 import table 了, 可以 dump 出来了,
用 icedump 来 dump, 下 pagein d 446000 2000 c:\temp\aspack.import
名字可以自定.

再按 2 次 F12,按第一次 F12 会等约10~20 秒才回到 softice
我也不知道为什么
按完了两次, 会到这边

014F:004BEDB4  33C0                XOR      EAX,EAX       
014F:004BEDB6  5A                  POP      EDX           
014F:004BEDB7  59                  POP      ECX           
014F:004BEDB8  59                  POP      ECX           
014F:004BEDB9  648910              MOV      FS:[EAX],EDX 
014F:004BEDBC  EB13                JMP      004BEDD1  ; 若过期了,当到了这边可下
            r eip  004BEE50 (当然,我的地址一定和你的地址不一样)       

014F:004BEDBE  E96914FFFF          JMP      004B022C         
014F:004BEDC3  66B80D00            MOV      AX,000D           
014F:004BEDC7  E870F1FFFF          CALL      004BDF3C         
014F:004BEDCC  E8C715FFFF          CALL      004B0398         
014F:004BEDD1  33C0                XOR      EAX,EAX           
014F:004BEDD3  55                  PUSH      EBP               
014F:004BEDD4  68F1ED4B00          PUSH      004BEDF1         
014F:004BEDD9  64FF30              PUSH      DWORD PTR FS:[EAX]
014F:004BEDDC  648920              MOV      FS:[EAX],ESP     
014F:004BEDDF  8B4508              MOV      EAX,[EBP+08]     
014F:004BEDE2  E80DFCFFFF          CALL      004BE9F4  ; 会跑出过期的消息,                 
014F:004BEDE7  33C0                XOR      EAX,EAX       
014F:004BEDE9  5A                  POP      EDX           
014F:004BEDEA  59                  POP      ECX           
014F:004BEDEB  59                  POP      ECX           
014F:004BEDEC  648910              MOV      FS:[EAX],EDX 
014F:004BEDEF  EB13                JMP      004BEE04     
014F:004BEDF1  E93614FFFF          JMP      004B022C     
014F:004BEDF6  66B81100            MOV      AX,0011       
014F:004BEDFA  E83DF1FFFF          CALL      004BDF3C     
014F:004BEDFF  E89415FFFF          CALL      004B0398     
014F:004BEE04  33C0                XOR      EAX,EAX       
014F:004BEE06  55                  PUSH      EBP           
014F:004BEE07  683DEE4B00          PUSH      004BEE3D     
014F:004BEE0C  64FF30              PUSH      DWORD PTR FS:[EAX]
014F:004BEE0F  648920              MOV      FS:[EAX],ESP 
014F:004BEE12  B83CDF4B00          MOV      EAX,004BDF3C 
014F:004BEE17  50                  PUSH      EAX         
014F:004BEE18  8B4508              MOV      EAX,[EBP+08] 
014F:004BEE1B  8B4810              MOV      ECX,[EAX+10] 
014F:004BEE1E  8B4508              MOV      EAX,[EBP+08] 
014F:004BEE21  8B5004              MOV      EDX,[EAX+04] 
014F:004BEE24  8B4508              MOV      EAX,[EBP+08] 
014F:004BEE27  8B00                MOV      EAX,[EAX]   
014F:004BEE29  E80AF6FFFF          CALL      004BE438     
014F:004BEE2E  A2305D4C00          MOV      [004C5D30],AL
014F:004BEE33  33C0                XOR      EAX,EAX     
014F:004BEE35  5A                  POP      EDX         
014F:004BEE36  59                  POP      ECX         
014F:004BEE37  59                  POP      ECX         
014F:004BEE38  648910              MOV      FS:[EAX],EDX                         
014F:004BEE3B  EB13                JMP      004BEE50   
014F:004BEE3D  E9EA13FFFF          JMP      004B022C   
014F:004BEE42  66B80E00            MOV      AX,000E   
014F:004BEE46  E8F1F0FFFF          CALL      004BDF3C   
014F:004BEE4B  E84815FFFF          CALL      004B0398   
014F:004BEE50  8B4508              MOV      EAX,[EBP+08]  SS:006AFE14=00465C57   
014F:004BEE53  8D4818              LEA      ECX,[EAX+18]
014F:004BEE56  8B4508              MOV      EAX,[EBP+08]
014F:004BEE59  8B10                MOV      EDX,[EAX]   
014F:004BEE5B  8B4508              MOV      EAX,[EBP+08]
014F:004BEE5E  8B401C              MOV      EAX,[EAX+1C]
014F:004BEE61  E85EF6FFFF          CALL      004BE4C4    ; 按 F8,追进去             
014F:004BEE66  5F                  POP      EDI
014F:004BEE67  5E                  POP      ESI   
014F:004BEE68  5B                  POP      EBX
014F:004BEE69  59                  POP      ECX
014F:004BEE6A  59                  POP      ECX


在 cs:014F:004BEE61  CALL      004BE4C4 
追进去之后, 就可以看到 POPAD
                      PUSH EAX  ; 此时 eax = 442238
                      CALL xxxxxxxx  ; 按 F8 追进去


所以 OEP 是 442238                       
看要用 icedump 或是 procdump 来 dump 都可以
dump 完了之后
把刚刚的 import table 的信息覆盖到不正确的 import table
用  procdump 去改刚刚 dump 出来的 exe
改 Entry point = 42238 , Import table 的  RVA = 46000,
若是用 icedump dump 的,
还要多一个步骤
把 所有的 section 的
PSize = VSize
offset = RVA
改完了,应该就没问题了,也没有过期了, 检测 softice 了