宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 2834|回复: 0

[转载] 针对某游戏保护DebugPort清零的一次逆向

[复制链接]
  • TA的每日心情
    开心
    2013-6-9 11:35
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    346022142 发表于 2013-5-3 12:54:20 | 显示全部楼层 |阅读模式

    欢迎您注册加入!这里有您将更精采!

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    标 题: 【原创】针对某游戏保护DebugPort清零的一次逆向。
    作 者: 悲歌
    时 间: 2012-05-14,11:04:57
    链 接: http://bbs.pediy.com/showthread.php?t=150642

    第一次发帖。LZ很菜的哦。大牛请忽略本帖。
    首先还是先了解一下DebugPort吧,百度之后得到了如下结果

    -------------------------------此处转贴------------------------------------
    每个进程都有一个数据结构,EPROCESS,这个结构是在内核里面的,系统用来标识和管理每一个win进程的基本数据结构.

    这个结构中包含了一个重要的字段,DebugPort,如果一个进程不在被调试的时候那么就是NULL,否则他是一个指针,win前,这个成员保存的是用于接收调试事件的LPC端口对象指针.发生调试时,系统会向这个端口发送调试信息.

    Winxp下因为使用了专门用于调试的内核对象DebugObject,所以debugport指向的是一个DebugObject对象,不管是指向LPC端口还是指向调试对象,虽然类似不同吧~~~
    但是他们的作用都是用来传递调试事件的,所以debugport中指向的对象,我们就叫做调试端口

    张奎银大牛,告诉了我们,这个端口是链接调试器进程和被调试进程的纽带~
    被调试程序的事件由这个端口发送到调试器进程的。   
    (so,某些产品,为了不被调试就一直对这个字段写入0,导致调试事件无法发送,造成了调试器像傻子一样~~)
    -----------------------------------------------------------

    调试内核,最先想到的肯定是windbg,于是LZ碰到了第一个问题,那个T什么的保护禁止了双机调试。下面给出过掉防止双机调试的方法。

    KDCOM.dll:KdReceivePacket  //这两个是COM串口的接受和发送数据
    KDCOM.dll:KdSendPacket      //主要用来方式别人双机调试
    上面两个函数几乎可以忽略掉,VirtualKD这个工具自己实现了COM通信替代了上面两个函数。

    然后是。。。是。。。
    KdDisableDebugger,ok过掉对这个函数的调用应该就可以进行双机调试了。
    启动虚拟机调试模式,windbg对KdDisableDebugger下断点,然后运行游戏。
    发现游戏登陆之前windbg就已经断下来了,eb指令对KdDisableDebugger第一行代码写入C3(ret)

    然后F8单步执行找到调用KdDisableDebugger处

    仔细看代码不难发现这是一段循环调用KdDisableDebugger的代码。eb对上图中edcaa6d5出写入74过掉此处
    F5跑起来会再次断下来,单步执行返回到另一处调用


    尾部mov     dword ptr [ecx],eax这句很关键,不能让他执行,一旦执行windbg就失去通信了
    对上图中edcaa803位置写入75然后F5跑起来  再次断下来发现调用位置还是上面这里。
    修改CALL EAX上面那行也就是edcaa7c4位置写入75再次跑起来就不会再断下来了 游戏正常运行。
    但是游戏登陆以后,保护会出现错误重新加载一次保护,然后按照上面的方法重新过一次就可以了。

    接下来就等游戏跑起来以后 windbg手动断下来,命令行键入!process 0 0回车
    得到当前所有进程的EPROCESS对象地址

    注意这里完成后要让虚拟机尽快跑起来,中断久了游戏会和服务器断开连接。
    好了会找到两个游戏进程,接下来虚拟机里面打开任务管理器,查看当前游戏的进程ID转换16进制


    转换后就是上面获取到的CID:0370
    然后对PROCESS 85f5d228 这个地址+BC处下数据写入断点,+bc就是DebugPort地址了
    指令 ba w 4[85f5d228 +bc]   //ba指令格式ba Access Size [地址] Access为访问方式 Size为监控访问位置大小

    然后跑起来,立马就会断下来,这里注意多跑几次,有两个地方做了清零如下图
    第一处:



    第二处:



    xor     ecx,ecx
    xchg    ecx,dword ptr [eax]

    还有。。。

    xor     eax,eax
    xchg    eax,dword ptr [edi]
    这两个地方。
    好了位置找到了,收工。
    另外传说中的监控线程在哪里在哪里在哪里。。。怎么找怎么找。。。   求大牛指教呀  完全没有思路,找不到入手点。。。





    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-3-29 22:47 , File On Powered by Discuz! X3.49

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