手动脱壳入门第十六篇 MoleBox 2.x 续之Patch IAT加密
程序员文章站
2022-03-19 11:12:50
【脱文动画】http://cnxhacker.net/donghua/crack/200607/245.html
【脱文标题】 手动脱壳入门第十六篇 MoleBox 2.x 续之Patch IAT加密
【脱文作者】 weiyi75[Dfcg]
【作者... 08-10-08...
【脱文动画】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
上一篇: webshell后门分析第一篇