首页
社区
课程
招聘
[原创] 手脱某未知壳
发表于: 2010-1-13 15:38 5556

[原创] 手脱某未知壳

2010-1-13 15:38
5556
【文章标题】: 手脱某未知壳
【文章作者】: lovebird/爱鸟
【作者邮箱】: lovebird_ustc#126.com
【作者QQ号】: 1282260064
【软件名称】: 未知壳加壳的XP记事本
【软件大小】: 脱前51.5Kb 脱后140KB
【下载地址】: 附件中
【加壳方式】: 未知
【保护方式】: 未知壳加壳
【编写语言】: VC++
【使用工具】: OD+dump插件
【操作平台】: WinSP3+VMware6.0
【作者声明】: 菜鸟一个,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  在BST论坛淘到一堆加壳的记事本 检测一下,基本都是这阶段要学习的压缩壳 正好一个个的脱。
  Peid一扫,是Nothing found *,换成Hardcore,检验是Anti007 -> NsPacK Private。估计是Anti007的变形壳。
  不管它,od载入。异常选项选择忽略一切异常
  0101BC32 >  50              PUSH EAX                                 ; 停在这里
  0101BC33    40              INC EAX
  0101BC34    58              POP EAX
  0101BC35    60              PUSHAD
  0101BC36    57              PUSH EDI
  0101BC37    BF 16F7226A     MOV EDI,6A22F716
  0101BC3C    5F              POP EDI
  0101BC3D    E8 00000000     CALL 3_.0101BC42
  0101BC42    56              PUSH ESI
  0101BC43    46              INC ESI
  0101BC44    5E              POP ESI
  0101BC45    59              POP ECX
  0101BC46    81FE 17F7060D   CMP ESI,0D06F717
  0101BC4C    74 02           JE SHORT 3_.0101BC50
  0101BC4E    75 00           JNZ SHORT 3_.0101BC50                    ; 明显的花指令
  0101BC50    81C1 63000000   ADD ECX,63
  0101BC56    53              PUSH EBX
  眼一扫,各种花指令。手跟的结果是,这个壳保护方式主要三个花指令:
  push/pop对  JE/JNZ跳转同一个地址 jmp来回跳
  另外壳中有SEH的使用,问题不是很大,我们看见0101BC35的pushad指令,在0101BC36处点鼠标,然后F4
  命令行下断hr esp
  Shift+F9运行:
  0101BCC7    9C              PUSHFD                                   ; 第一次Esp定律到了这儿 取消硬断
  0101BCC8    9D              POPFD                                    ; F8过来 hr esp 或者直接走下去
  0101BCC9  ^ E9 8EFBFFFF     JMP 3_.0101B85C
  0101BCCE    F3:             PREFIX REP:                              ; 多余的前缀
  0101BCCF    A9 36D42F36     TEST EAX,362FD436
  0101BCD4    C3              RETN
  0101BCD5    8915 9F35AD3F   MOV DWORD PTR DS:[3FAD359F],EDX
  0101BCDB    2C DE           SUB AL,0DE
  0101BCDD    C8 EE8679       ENTER 86EE,79
  0101BCE1    094CBF 68       OR DWORD PTR DS:[EDI+EDI*4+68],ECX
  0101BCE5    C6C5 9A         MOV CH,9A
  0101BCE8    B1 66           MOV CL,66
  0101BCEA    15 23E81588     ADC EAX,8815E823
  0101BCEF    5D              POP EBP
  0101BCF0    006D DD         ADD BYTE PTR SS:[EBP-23],CH
  0101BCF3    93              XCHG EAX,EBX
  0101BCC8处hr esp
  Shift+F9运行:
  0101B85D    81F3 DA081565   XOR EBX,651508DA                         ; 第二次esp到了这儿 取消硬断
  0101B863    5B              POP EBX
  0101B864    60              PUSHAD
  0101B865    56              PUSH ESI                                 ; 此句F4 hr esp
  0101B866    BE 0BFF9915     MOV ESI,1599FF0B
  0101B86B    5E              POP ESI
  0101B86C    E8 1C010000     CALL 3_.0101B98D
  0101B871    ED              IN EAX,DX                                ; I/O 命令
  0101B872    07              POP ES                                   ; 段寄存器更改
  0101B873    DF2F            FILD QWORD PTR DS:[EDI]
  0101B875    EC              IN AL,DX                                 ; I/O 命令
  0101B876    D236            SAL BYTE PTR DS:[ESI],CL
  0101B878    082D 48DDBEC0   OR BYTE PTR DS:[C0BEDD48],CH
  0101B87E    4E              DEC ESI
  0101B87F    EA 7E80667D 563>JMP FAR 3B56:7D66807E                    ; 远跳转
  0101B865处hr esp
  Shift+F9运行,删除硬断。
  0101BBFA    57              PUSH EDI                                 ; ntdll.7C930228
  0101BBFB    0F02FE          LAR EDI,ESI
  0101BBFE    5F              POP EDI
  0101BBFF    53              PUSH EBX
  0101BC00    9B              WAIT
  0101BC01    DBE3            FINIT
  0101BC03    52              PUSH EDX
  0101BC04    85F7            TEST EDI,ESI
  0101BC06    74 02           JE SHORT 3_.0101BC0A
  0101BC08    75 00           JNZ SHORT 3_.0101BC0A                    ; 花指令
  0101BC0A    57              PUSH EDI
  0101BC0B    56              PUSH ESI
  0101BC0C    51              PUSH ECX
  0101BC0D    81C6 8D179777   ADD ESI,7797178D
  0101BC13    81C1 B07B6E5E   ADD ECX,5E6E7BB0
  0101BC19    59              POP ECX
  0101BC1A    5E              POP ESI
  0101BC1B    56              PUSH ESI
  0101BC1C    56              PUSH ESI
  0101BC1D    68 36816E22     PUSH 226E8136
  0101BC22    5E              POP ESI
  0101BC23    5E              POP ESI
  0101BC24    50              PUSH EAX
  0101BC25    50              PUSH EAX
  0101BC26    9B              WAIT
  0101BC27    DFE0            FSTSW AX
  0101BC29    58              POP EAX
  0101BC2A    C2 1000         RETN 10
  诸多花指令后,返回。
  0101A1B8    B8 853C0000     MOV EAX,3C85
  0101A1BD    E8 64140000     CALL 3_.0101B626
  0101A1C2    18BA 0CE8D8B0   SBB BYTE PTR DS:[EDX+B0D8E80C],BH        ; 此句F4
  0101A1C8    0000            ADD BYTE PTR DS:[EAX],AL
  0101A1CA    848CF9 009494C2 TEST BYTE PTR DS:[ECX+EDI*8+C2949400],CL
  0101A1D1    60              PUSHAD
  0101A1D2    A4              MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
  0101A1D3    8D41 E8         LEA EAX,DWORD PTR DS:[ECX-18]
  0101A1D6    E8 2C0200B4     CALL B501A407
  0101A1DB    00F2            ADD DL,DH
  0101A1DD    BB FCF80200     MOV EBX,2F8FC
  0101A1E2    4D              DEC EBP
  0101A1E3    61              POPAD
  一阵延迟后,停在
  0101A1C2    9C              PUSHFD                                   
  0101A1C3    EB 0C           JMP SHORT 3_.0101A1D1
  0101A1C5    E8 00000000     CALL 3_.0101A1CA
  0101A1CA    58              POP EAX
  0101A1CB    83F8 00         CMP EAX,0
  0101A1CE  ^ 74 FA           JE SHORT 3_.0101A1CA
  0101A1D0    C3              RETN
  0101A1D1    60              PUSHAD
  0101A1D2    40              INC EAX                                ; 此句F4 hr esp
  0101A1D3    40              INC EAX
  0101A1D4    40              INC EAX
  0101A1D5    E8 00000000     CALL 3_.0101A1DA
  0101A1DA    58              POP EAX
  0101A1DB    8BF0            MOV ESI,EAX
  0101A1DD    BB 0C120000     MOV EBX,120C
  0101A1E2    B9 28120000     MOV ECX,1228
  0101A1E7    2BCB            SUB ECX,EBX
  0101A1D2处hr esp
  不一会显示运行出错
  不用管它,现在走到OEP了,用od的dump插件 方式1直接dump出来就行
  
--------------------------------------------------------------------------------
【经验总结】
  如果在0101A1D2不用ESP定律 也可以找到oep 而且不会出现运行错误。但是比较慢 。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2010年01月13日 15:36:50

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

上传的附件:
  • 3.rar (37.15kb,26次下载)
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 370
活跃值: (52)
能力值: ( LV13,RANK:350 )
在线值:
发帖
回帖
粉丝
2
爱鸟刚升级的吧
强悍嘛  学习了
2010-1-14 16:15
0
游客
登录 | 注册 方可回帖
返回
//