• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    手动脱壳入门第十六篇 MoleBox 2.x 续之Patch IAT加密

    发布者: 山止川行 | 发布时间: 2025-6-28 23:39| 查看数: 103| 评论数: 0|帖子模式

    【脱文动画】http://cnxhacker.net/donghua/crack/200607/245.html
    【脱文标题】 手动脱壳入门第十六篇 MoleBox 2.x 续之Patch IAT加密
    【脱文作者】 weiyi75[Dfcg]
    【作者邮箱】 weiyi75@sohu.com
    【作者主页】 Dfcg官方大本营
    【使用工具】 Peid,Ollydbg,ImportREC1.6f,Loadpe
    【脱壳平台】 Win2K/XP
    【软件名称】 IMCaster ICQ E-Marketer
    【软件简介】 IMCaster ICQ E-Marketer是一个强大的ICQ即时信息查找工具。你可以根据不同的条件(如:性别、年龄、国家或者职业等等)搜索在线ICQ用户,向他们发送信息以提高你网站或企业的知名度。
    【软件大小】 2.61M
    【下载地址】 http://www.imcaster.com/Downloads/IMCastSetupEnt.exe 或 二哥推荐的教学篇里面下载
    【加壳方式】 MoleBox 2.x.x -> Mole Studio [Overlay]
    【保护方式】 MoleBox压缩壳
    【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
    --------------------------------------------------------------------------------
    【脱壳内容】
    首先Peid查壳,为MoleBox 2.x.x -> Mole Studio [Overlay],OD载入运行,无任何异常,判断其为压缩壳。
    前面二哥的修复方法大家都看到了,继然IAT可以加密就可以IAT解密,实际是跳过。
    一口气写OD脱壳脚本写到16篇后发现这篇IAT被加密了,只写个找OEP的脚本没意思,要写脚本首先得会脱这个壳。
    脱壳后发现程序不能运行,这时需要用Imprec修复引入函数表(Import Table)
    在Oep处填8636F,点IT自动搜索,然后点获输入信息,有9个指针没有修复。
    IAT的起始地址是89000,大小B80
    根据Imprec提示89110 处的指针被加密
    就从这里入手,也可以随便找个加密指针处入手。
    OD载入程序,命令行
    Hw 489110
    因为这个地址先前写入的地址是对的,然后程序将这个地址加密为Imprec不认识的东西,我们就要跟踪这个过程。
    F9运行
    004D1237     8B45 F8             mov eax,dword ptr ss:[ebp-8]      ; imcast.00489110
    004D123A     40                  inc eax
    004D123B     40                  inc eax
    004D123C     8945 F8             mov dword ptr ss:[ebp-8],eax
    004D123F     0FB745 E2           movzx eax,word ptr ss:[ebp-1E]
    004D1243     C1F8 08             sar eax,8
    004D1246     0FB74D E2           movzx ecx,word ptr ss:[ebp-1E]
    堆栈友好提示
    0012FCD8    7FFDF000
    0012FCDC    47D047D0
    0012FCE0    47334733
    0012FCE4    5EBC5EBC
    0012FCE8    72BF72BF
    继续3次F9,注意堆栈友好提示
    004D13CE     FF15 24804D00       call dword ptr ds:[; KERNEL32.GetProcAddress
    004D13D4     8B4D F0             mov ecx,dword ptr ss:[ebp-10]
    004D13D7     8901                mov dword ptr ds:[ecx],eax
    004D13D9     EB 26               jmp short imcast.004D1401
    004D13DB     8B55 F0             mov edx,dword ptr ss:[ebp-10]
    004D13DE     8B02                mov eax,dword ptr ds:[edx]
    004D13E0     25 FFFF0000         and eax,0FFFF
    004D13E5     50                  push eax
    004D13E6     8B4D F4             mov ecx,dword ptr ss:[ebp-C]
    004D13E9     51                  push ecx
    004D13EA     FF15 24804D00       call dword ptr ds:[; KERNEL32.GetProcAddress
    堆栈友好提示
    0012FE2C    77E7ED4C  KERNEL32.SetFilePointer //这个和EAX中是一样的,都是正确指针
    0012FE30    6BC4B4AC  MFC42.#1576
    0012FE34    0049428A  imcast.0049428A
    0012FE38    004943FE  ASCII "KERNEL32.dll"
    0012FE3C    00489110  imcast.00489110
    0012FE40    77E60000  KERNEL32.77E60000
    0012FE44    00493294  imcast.00493294
    现在我们
    dd 489110 往上看到489100被加密了,呵呵,我说过可以随便找个加密指针处入手。
    004D13D9    /EB 26               jmp short imcast.004D1401
    004D1401     8B4D EC             mov ecx,dword ptr ss:[ebp-14]     ; imcast.004943FE
    004D1404     51                  push ecx
    004D1405     8B55 F0             mov edx,dword ptr ss:[ebp-10]
    004D1408     52                  push edx
    004D1409     E8 12050000         call imcast.004D1920 //如果单步过了这里,就Over了。显然它是个加密Call,NOP掉程序正常运行,进去看看。
    ******************************************
    004D1920     55                  push ebp
    004D1921     8BEC                mov ebp,esp
    004D1923     83EC 10             sub esp,10
    004D1926     C745 FC 00000000    mov dword ptr ss:[ebp-4],0
    004D192D     833D 30F04D00 00    cmp dword ptr ds:[4DF030],0
    004D1934     75 0A               jnz short imcast.004D1940
    004D1940     8B45 08             mov eax,dword ptr ss:[ebp 8]  //注意这时EAX=77E7ED4C是正确指针
    004D1943     8B08                mov ecx,dword ptr ds:[eax]
    004D1945     51                  push ecx
    004D1946     8B0D 30F04D00       mov ecx,dword ptr ds:[4DF030]
    004D194C     E8 AB380000         call imcast.004D51FC
    004D1951     8945 F8             mov dword ptr ss:[ebp-8],eax
    004D1954     837D F8 00          cmp dword ptr ss:[ebp-8],0
    004D1958     74 45               je short imcast.004D199F
    004D195A     8D55 F0             lea edx,dword ptr ss:[ebp-10]
    004D195D     52                  push edx
    004D195E     6A 04               push 4
    004D1960     6A 04               push 4
    004D1962     8B45 08             mov eax,dword ptr ss:[ebp 8]
    004D1965     50                  push eax
    004D1966     FF15 70804D00       call dword ptr ds:[; KERNEL32.VirtualProtect
    004D196C     85C0                test eax,eax
    004D196E     75 0A               jnz short imcast.004D197A
    004D197A     8B4D 08             mov ecx,dword ptr ss:[ebp 8]
    004D197D     8B55 F8             mov edx,dword ptr ss:[ebp-8]
    004D1980     8B02                mov eax,dword ptr ds:[edx]
    004D1982     8901                mov dword ptr ds:[ecx],eax //可恶这里; imcast.004D490E
    EAX=004D490E  dword ptr ds:[ecx] 是推算被加密的地址00489110,实际也是,看OD信息框就知道了。我们必需让EAX是正确的指针。我们看到004D1940 处EAX被赋值,而且当时的EAX是正确指针。
    这就容易了
    004D1940     8B45 08             mov eax,dword ptr ss:[ebp 8]
    修改为
    004D1940     8BC0                mov eax,eax                       ; KERNEL32.SetFilePointer
    004D1942     90                  nop
    自给自足
    004D1984     8D4D F4             lea ecx,dword ptr ss:[ebp-C]
    004D1987     51                  push ecx
    004D1988     8B55 F0             mov edx,dword ptr ss:[ebp-10]
    004D198B     52                  push edx
    004D198C     6A 04               push 4
    004D198E     8B45 08         &n

    来源:https://www.jb51.net/hack/5152.html
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    浏览过的版块

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

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