飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 14596|回复: 16

用脚本、补区段脱Asprotect SKE 2.x壳笔记

[复制链接]
  • TA的每日心情
    开心
    2022-11-22 20:08
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2006-5-31 01:39:18 | 显示全部楼层 |阅读模式
    【文章标题】: 用脚本、补区段脱Asprotect SKE 2.x壳笔记
    【作    者】: machenglin
    【软件名称】: ccproje 5.13
    【下载地址】: 自己搜索下载
    【加壳方式】: Asprotect SKE 2.x
    【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
    --------------------------------------------------------------------------------
    【详细过程】
      首先感谢[一蓑烟雨]论坛fly兄弟给我们提供了这个学习平台。
      
      Volx大侠的脚本确实是非常成功的,非常感谢他的辛勤劳动,这是我用他的脚本练习过程中的笔记,结合SYSCOM大侠的补区段大法,完成Asprotect SKE 2.x壳的过程,我尽量的记录详细一点,试图使初学脱壳者能理解容易些,请各位大侠不要笑话我罗嗦。
      
      
      00401000 c>  68 01D0DE00        push ccproje.00DED001              ; OD入口处
      00401005     E8 01000000        call ccproje.0040100B
      0040100A     C3                 retn
      0040100B     C3                 retn
      0040100C     2B02               sub eax,dword ptr ds:[edx]
      0040100E     37                 aaa
      0040100F     8D77 F6            lea esi,dword ptr ds:[edi-A]
      00401012   - E1 E8              loopde short ccproje.00400FFC
      -------------------------------------------------------------------------------------------------
      Aspr2.XX_IATfixer脚本停在OEP了。
      
      016C039C     E8 5FFC0600        call 01730000                      ; OEP=00040190C
      016C03A1     50                 push eax
      016C03A2     E9 3B060000        jmp 016C09E2
      016C03A7     68 85056C01        push 16C0585
      016C03AC     E8 4FFC0600        call 01730000
      016C03B1     52                 push edx
      016C03B2     E9 98000000        jmp 016C044F
      016C03B7     43                 inc ebx
      016C03B8     E9 5B010000        jmp 016C0518
      016C03BD     F2:                prefix repne:
      016C03BE     EB 01              jmp short 016C03C1
      016C03C0     F0:83C4 08         lock add esp,8                     ; 不允许锁定前缀
      
      Alt+l,查看硬件断点1位于014FCCB4。
      IATstartaddr:00A4115C
      IATsize:11F8
      
      OEP=016C039C-400000=012C039C
      RVA=00A4115C-400000=0064115C
      
      Volx大侠的脚本已经解决了Asprotect SKE 2.x壳的诸多问题,手动修复stolen code,确实很完美,但本人功底太浅,OEP的前面部分基本还能蒙上,后来就陷在壳里了,还跳不出来,还是等修炼N段时间再尝试吧。
      
      SYSCOM大侠的教程,采用补区段的方法很适合我们菜鸟,用lordpe区域转存,dump出程序中stolen code和VM区段,如果不清楚那些是stolen code和VM区段,一看OEP部分在哪个区段,二看壳用到哪几个区段,不妨多dump些区段备用。
      
      VM Address          Size
      ===========================================================
      014D0000           47000    <-ASProtect 解密 CODE 区段     
      01520000           14000    <-ASProtect 资料 DATA 区段
      016C0000            2000    <-OEP  Stolen Code
      016D0000            2000    <-M1   Stolen Code
      016E0000            2000    <-M1   Stolen Code
      016F0000            1000    <-M2   Stolen Code
      01700000            1000    <-M2   Stolen Code
      01710000            1000    <-M2   Stolen Code  
      01720000            1000    <-M3   Stolen Code
      01730000            1000    <-M3   Stolen Code
      01740000            1000    <-M3   Stolen Code   
      ===========================================================
      
      这里提醒一下,把dump出的区段附加在dumped_后面时,所有VM Address要减去基址,如:
      014D0000-400000=10D0000。
      把dump出的区段附加完成后,用lordpe修复PE Header。
      
      重新在OD中载入程序,开始处理壳的自校验。
      
      =================================================================================================
      
      ===处理壳自校验===
      
      感谢SYSCOM大侠的教程,他是这样描述:
      //////////////////////////////////////////////////////////////////////////////////////////////
      Route CHECK,算是壳的自我检查,它是由 A,B 两数值,作互减运算。
      
      A=GetCurrentThreadID
      B=CALL Route Address
      
      运算后 ...
      B=B-A
      
      当你脱壳之后,B=会发生错误 ERROR 111 ,所以我们只要,抓出正确的 CALL Route Address,就可以通过  CHECK SUM ,也就是在 [ESP+58],的 STACK 位址。所以我们使用
      MOV  EAX,[ESP+58] ,来还原 B 值 +5 后修正 B 值 Address
      
      9F70CE-MOV  EAX,[EAX+34]  
      9F70D1-CALL EAX              =>  GetCurrentThreadID
      9FD0D3-SUB  [EBP+C],EAX      =>  B=B-A
      9FD0D6-MOV  EAX,[ENP+C]   
      //////////////////////////////////////////////////////////////////////////////////////////////
      
      014F8A58    /EB 01              jmp short dumped_1.014F8A5B           ; ①↓014F8A5B
      014F8A5A    |698B 73308B7B 14A1>imul ecx,dword ptr ds:[ebx+7B8B3073],37>
      014F8A64     50                 push eax
      014F8A65     018B 4034FFD0      add dword ptr ds:[ebx+D0FF3440],ecx
      014F8A6B     2945 0C            sub dword ptr ss:[ebp+C],eax
      014F8A6B     2945 0C            sub dword ptr ss:[ebp+C],eax
      014F8A6E     8B45 0C            mov eax,dword ptr ss:[ebp+C]
      014F8A71     2B43 18            sub eax,dword ptr ds:[ebx+18]
      014F8A74     2B43 68            sub eax,dword ptr ds:[ebx+68]
      014F8A77     8945 FC            mov dword ptr ss:[ebp-4],eax
      014F8A7A     8D43 24            lea eax,dword ptr ds:[ebx+24]
      014F8A7D     8945 F8            mov dword ptr ss:[ebp-8],eax
      014F8A80     85FF               test edi,edi
      014F8A82     76 38              jbe short dumped_1.014F8ABC
      014F8A84     EB 01              jmp short dumped_1.014F8A87
      014F8A86     C7                 ???                                     ; 未知命令
      014F8A87     8B45 F8            mov eax,dword ptr ss:[ebp-8]
      014F8A8A     0FB600             movzx eax,byte ptr ds:[eax]
      014F8A8D     8B5483 40          mov edx,dword ptr ds:[ebx+eax*4+40]
      014F8A91     8BC6               mov eax,esi
      014F8A93     FFD2               call edx
      014F8A95     3B45 FC            cmp eax,dword ptr ss:[ebp-4]
      014F8A98     75 1A              jnz short dumped_1.014F8AB4
      014F8A9A     8B45 10            mov eax,dword ptr ss:[ebp+10]
      014F8A9D     50                 push eax
      014F8A9E     8B45 14            mov eax,dword ptr ss:[ebp+14]
      014F8AA1     50                 push eax
      014F8AA2     E8 19FAFFFF        call dumped_1.014F84C0
      014F8AA7     50                 push eax
      014F8AA8     8BCE               mov ecx,esi
      014F8AAA     8B55 18            mov edx,dword ptr ss:[ebp+18]
      014F8AAD     8BC3               mov eax,ebx
      014F8AAF     E8 D4FDFFFF        call dumped_1.014F8888
      014F8AB4     4F                 dec edi
      014F8AB5     0373 6C            add esi,dword ptr ds:[ebx+6C]
      014F8AB8     85FF               test edi,edi
      014F8ABA   ^ 77 CB              ja short dumped_1.014F8A87
      014F8ABC     68 D88A4F01        push dumped_1.014F8AD8                  ; ASCII "111"
      014F8AC1     E8 66C3FEFF        call dumped_1.014E4E2C
      
      由014F8A58跳到这里。
      014F8A5B     8B73 30            mov esi,dword ptr ds:[ebx+30]           ; dumped_1.016C10F9
      014F8A5E     8B7B 14            mov edi,dword ptr ds:[ebx+14]
      014F8A61     A1 F0375001        mov eax,dword ptr ds:[15037F0]
      014F8A66     8B40 34            mov eax,dword ptr ds:[eax+34]      ; 从这里开始修改。
      014F8A69     FFD0               call eax
      014F8A6B     2945 0C            sub dword ptr ss:[ebp+C],eax
      014F8A6E     8B45 0C            mov eax,dword ptr ss:[ebp+C]
      014F8A71     2B43 18            sub eax,dword ptr ds:[ebx+18]
      014F8A74     2B43 68            sub eax,dword ptr ds:[ebx+68]
      014F8A77     8945 FC            mov dword ptr ss:[ebp-4],eax
      
      二进制
      90 90 8B 44 24 58 83 E8 05 90 90
      
      修改后的代码,保存文件。
      014F8A5B     8B73 30            mov esi,dword ptr ds:[ebx+30]           ; dumped_1.016C10F9
      014F8A5E     8B7B 14            mov edi,dword ptr ds:[ebx+14]
      014F8A61     A1 F0375001        mov eax,dword ptr ds:[15037F0]
      014F8A66     90                 nop
      014F8A67     90                 nop
      014F8A68     8B4424 58          mov eax,dword ptr ss:[esp+58]
      014F8A6C     83E8 05            sub eax,5
      014F8A6F     90                 nop
      014F8A70     90                 nop
      014F8A71     2B43 18            sub eax,dword ptr ds:[ebx+18]
      014F8A74     2B43 68            sub eax,dword ptr ds:[ebx+68]
      014F8A77     8945 FC            mov dword ptr ss:[ebp-4],eax
      
      F9,开始运行,软件界面一闪后,程序退出了,看来还有自校验。
      ================================================================================================
      
      ===处理文件自校验===
      
      重新加载程序,下断点 BP GetFileSize。
      
      F9大约8次,注意程序返回到本地领空,F8步进。
      ===================================================================
      0012FA50   005BD602   /CALL 到 GetFileSize 来自 dumped_1.005BD5FD
      0012FA54   000001B0   |hFile = 000001B0 (window)
      0012FA58   00000000   \pFileSizeHigh = NULL
      ===================================================================
      断在这里。
      7C810C8F k>  8BFF               mov edi,edi
      7C810C91     55                 push ebp
      7C810C92     8BEC               mov ebp,esp
      7C810C94     51                 push ecx
      7C810C95     51                 push ecx
      7C810C96     8D45 F8            lea eax,dword ptr ss:[ebp-8]
      7C810C99     50                 push eax
      7C810C9A     FF75 08            push dword ptr ss:[ebp+8]
      7C810C9D     E8 7FFFFFFF        call kernel32.GetFileSizeEx
      7C810CA2     85C0               test eax,eax
      7C810CA4   ^ 0F84 EA8FFFFF      je kernel32.7C809C94
      
      继续跟踪,来到这里,修改0040B43E。
      
      0040B437     E8 5C211B00        call dumped_1.005BD598
      0040B43C     84C0               test al,al
      0040B43E     75 5E              jnz short dumped_1.0040B49E             ; 修改jnz-->jmp
      0040B440     33DB               xor ebx,ebx
      0040B442     EB 4C              jmp short dumped_1.0040B490
      0040B444     8BD3               mov edx,ebx
      0040B446     A1 F879A300        mov eax,dword ptr ds:[_mainform]
      0040B44B     E8 18B54000        call dumped_1.00816968
      0040B450     8B15 14227500      mov edx,dword ptr ds:[752214]           ; umped_1.Tbx::TTBXItem::
      0040B456     E8 6D894A00        call dumped_1.008B3DC8
      0040B45B     85C0               test eax,eax
      0040B45D     74 30              je short dumped_1.0040B48F
      0040B45F     8BD3               mov edx,ebx
      0040B461     A1 F879A300        mov eax,dword ptr ds:[_mainform]
      0040B466     E8 FDB44000        call dumped_1.00816968
      0040B46B     8B15 14227500      mov edx,dword ptr ds:[752214]           ; umped_1.Tbx::TTBXItem::
      0040B471     E8 52894A00        call dumped_1.008B3DC8
      
      F9,运行很畅快,脱壳过程算是结束了。
      
    --------------------------------------------------------------------------------
    【总结】
      对于初学者,选用脚本、补区段的方法,相对成功率高些。
      
    --------------------------------------------------------------------------------
    【版权声明】: 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-31 07:40:18 | 显示全部楼层
    顶~~~~~~~~~,支持并学习ing~~~~~~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2006-5-31 07:58:40 | 显示全部楼层
    又多学习了一篇该壳的脱文,先收藏后学习啦。。。


    +++++++++++++++++++++++++++++++++++


    什么时候图解给我们呀。。。

    语音视频演示更欢迎!

    [ 本帖最后由 野猫III 于 2006-5-31 22:08 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2019-3-20 20:06
  • 签到天数: 258 天

    [LV.8]以坛为家I

    发表于 2006-6-1 00:22:43 | 显示全部楼层
    好文!~~~

    学习下
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-8-5 08:23
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2006-6-9 12:21:59 | 显示全部楼层
    看不懂,以后再来看这高深的
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-2-18 10:29:07 | 显示全部楼层
    又是转来的。。郁。。。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-4-30 23:01:46 | 显示全部楼层
    好文!学习下!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-5-1 21:25:03 | 显示全部楼层
    原帖由 野猫III 于 2006-5-31 07:58 发表
    又多学习了一篇该壳的脱文,先收藏后学习啦。。。


    +++++++++++++++++++++++++++++++++++


    什么时候图解给我们呀。。。

    语音视频演示更欢迎!


    说出了像我这样的菜鸟的心声
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-12-4 12:50:51 | 显示全部楼层
    看的一塌糊涂,刚开始还行,越往后就不明白了
    希望哪个高手能做个视频教程,让新手步出这个误区!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-12-6 12:52:58 | 显示全部楼层
    不是很懂,不过值得研究
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表