首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • [原创]Unlocker加强版技术特征 [无满意答案结贴,结贴人:mydo]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mydo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    • 20

      13

    发表于:2008-04-27 22:42:27 楼主
    Unlocker加强版技术特征

    Unlocker是一个偶闲时写的小工具,主要功能有:

    1. 解锁已打开文件;
    2.建立以特定用户身份的shell。

    上一个版本的概述在
    :[原创]C# 与 汇编 的一次亲密接触。

    [size=14px]加强版本新增的特征有:

    1.采取了和 regmon & filemon 类似的方法,将 dll 等模块嵌入到主PE中,
    使之成为真正的 "绿色" 工具。

    C# code
    Assembly asmy = Assembly.GetExecutingAssembly(); ResourceManager rm = new ResourceManager("unlocker.Properties.Resources", asmy); FileStream fs; FileInfo fi; Byte[] bs = (byte[])rm.GetObject("unlocker"); if (bs.Length != 0) { fs = File.Create(Application.StartupPath.ToString() + @"\unlocker.dll", bs.Length, FileOptions.SequentialScan); fs.Write(bs, 0, bs.Length); fs.Flush(); fs.Close(); fi = new FileInfo(Application.StartupPath.ToString() + @"\unlocker.dll"); if (fi.Exists == false) { IsDllExist = false; //IsSucessed = false; } else if (fi.Length != bs.Length) { IsDllExist = true; } else { fi.Attributes = fi.Attributes | FileAttributes.Hidden | FileAttributes.System; fi.Refresh(); IsDllExist = true; IsSucessed = true; } }


    2.因为gcc没有naked函数的功能(虽然有naked选项,但是生成不了naked函数
    如果哪位知道是什么问题,请不吝指出,多谢。),所以用汇编写了一个
    静态库进行连接。之所以要采用naked函数是想实现不定参数的跨函数传递,
    比如:[/size]

           
    C/C++ code
    void myprintf(const char *ft,...) { printf(ft,?????);//wrong! }



    而在汇编或vc中这个比较好办,我们设计一个"透明"的跳板,好像从myprintf
    直接跳转到printf一样:


     
    Assembly code
    _MsgShow_Console proc jmp printf _MsgShow_Console endp


    但在要做中间处理的情况下,就更复杂一些,比如:

    C/C++ code
    void myprintf_msgbox(const char *ft,...) { char buf[BUFSIZ]={0}; sprintf(buf,ft,?????);//wrong! MessageBox(NULL,buf,"message",MB_OK); }


    这时不能直接做跳转,必须手动写参数处理,就像偶以前在汇编区回答过一位
    VC仁兄的问题 <如何处理函数的不定参数> 一样:


    Assembly code
    _MsgShow_Win32 proc push ebp ;save ebp is very important mov eax,[esp+4] ;temp return address lea ebp,[esp+4] sub esp,0100h ;create tmp buf (0x100 bytes) mov esi,esp ;save tmp buf address add eax,2 movzx ecx,byte ptr [eax] shr ecx,2 ;get parms number total size / size(dword) mov ebx,esp ;save esp .while ecx > 0h mov eax,[ebp + ecx*4] push eax dec ecx .endw push esi call sprintf invoke MessageBoxA,0,ebx,addr cp,0 lea esp,[ebp-4] pop ebp ;restore ebp ret _MsgShow_Win32 endp


    然后在gcc中只要按需求定义宏,就可以实现完全自动的DEBUG输出了:

    C/C++ code
    #ifdef _DRV_DEBUG_ #if defined(_DRV_CONSOLE_) #define MsgShow(...) _MsgShow_Console(__VA_ARGS__) #elif defined(_DRV_WIN32_) #define MsgShow(...) _MsgShow_Win32(__VA_ARGS__) #elif defined(_DRV_CORE_) #define MsgShow(...) _MsgShow_Core(__VA_ARGS__) #else #error : Must Choose One From 3 Show Model. #endif #else #define MsgShow(...) ((void)0) #endif


    对于内核中的 "printf" 函数我们同样有:

     
    Assembly code
    _MsgShow_Core proc jmp DbgPrint _MsgShow_Core endp


    3.在unlocker中加入了建立用户shell的功能,方便测试。比如可以方便的生成本地最高
    权限SYSTEM用户的shell,以及其他任何管理员和用户的shell;可以在当前是user级别
    用户的环境下直接产生Administrator级别用户的shell。






    4.增加了 关闭核心句柄 的功能。使之在NT下可以关闭像 PageFile.sys 这样核心文件对
    象的句柄。但对一些关键核心文件对象,比如 SAM 文件来说,如果将其关闭马上会造成
    系统蓝屏。所以请在虚拟机下尝试,否则后果自负哦。





    5.分别在 Windows 2000 sp4、Windows XP sp2、Windows 2003 sp1 下做了兼容性测试,发
    现几处需要调整的地方:

      a.windows 2000 中没有 GetProcessImageFileName 函数,所以将原来的 API
      换成 GetModuleFileNameEx;

      b.windows 2000 中没有 NtCreateProcessEx 这个 API ,所以将原来的
      _CreateSystemShell分为2个版本;

      c.windows 2003 对内存属性的检查更加严格,故而从原来的
      PAGE_READWRITE 变成 PAGE_EXECUTE_READWRITE,否则在2003下程序崩溃。

    因为条件有限,没有在 windows NT 4.0 上做测试,如果哪位可以帮忙测试一下,就十分
    感谢啦. :)

    6.增加了 强力查找 功能,可以模糊匹配更多关键字;

    7.加强了对 是否真正关闭 的检查功能,不像以前只是给出一个"模糊"的结果。并且更具
    不同的结果以不同的颜色更加显目的呈现给用户。





    8.修正了一个有符号数的关系 BUG 。

    (未完待续)


    (下载审核中,稍后公布下载地址)
    11  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mydo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 20

      13

    发表于:2008-04-27 23:10:221楼 得分:0
    unlocker EX 下载连接: http://download.csdn.net/source/433389 欢迎测试,请多多指出bug 。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wuyi8808
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-27 23:18:312楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hopewoo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-28 09:55:543楼 得分:0
    技术贴支持~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • paulmake
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-28 10:06:574楼 得分:0
    很好很强大,MARK学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • meiZiNick
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-30 19:15:175楼 得分:0
    有点难度哦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • knowledge_Is_Life
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-30 20:12:146楼 得分:0
    没遇到过这种情况.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mydo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 20

      13

    发表于:2008-05-09 11:08:347楼 得分:0
    c : http://topic.csdn.net/u/20080427/23/9b796d69-19a8-4eed-93b8-93aa1cf8ca88.html
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved