CS游戏分析第二回——解决上次遗留的数据问题

武器

上回的一个遗留问题是人物和武器的结合。今天先来分析一下。首先根据上节课的找子弹部分,找到武器的对象地址。

这是子弹减少的代码,esi指向武器,偏移CC指向子弹。

ESI=0102CFC8

07956C3A - 48 - dec eax
07956C3B - 8B CE  - mov ecx,esi
07956C3D - 89 86 CC000000  - mov [esi+000000CC],eax <<
07956C43 - 8B 86 A4000000  - mov eax,[esi+000000A4]
07956C49 - 8B 40 04  - mov eax,[eax+04]

逆向分析windows密码获取工具

用过一个小型获取明文密码程序,只有一个可执行文件ReadPSW.exe,通过逆向写出了源代码,稍微改改可能也可以支持64位。分享一下逆向过程和工作原理。

我喜欢先用IDA看大致流程,遇到难以静态看出来的函数再用OD或者windbg。 IDA F5 main函数,一段一段得看。

CS游戏分析第一回——做到无敌

前言

游戏安全一直是敏感的灰色话题,很多技术不会公开,从事游戏攻防的也很低调。这造成一个问题,对游戏安全感兴趣的人会无从下手,比如我,就不知道面对复杂的游戏如何分析。经过一些日子的思考学习,总算有了点思路,就以CS为例,介绍如何分析游戏、辅助工具以及相应的安全防护。

选择CS有几个原因:首先它是我第一次碰电脑就接触的东西,感情深厚;其次CS逻辑清晰易懂,没有复杂的反调试、加密等防护;最后就是基本所有人都玩过,写例子大家也容易理解。打算写一个小系列,从简单的不死、子弹不减到联网状态的数据包传输、找到各个功能实现call、人物画面渲染等,最后了解整个游戏结构,并写出防护软件来保护CS。

Windbg和od脚本编写

一般情况调试器的基本功能已经够用,尤其是有源码的时候,查找问题足够方便。但是很多时候我们需要让调试器自动完成一些功能,比如某个函数调用之后的数据记录、数次调用某函数的结果、两个函数调用之间发生的事情等等,简单的可以用条件断点或者基础log解决,稍微复杂的就需要用到脚本了。

平常用windbg和od最多,前者功能强大,还能调试驱动;后者简单易用画面清晰。偶尔也会用到Immunity Debugger,《python灰帽子》中对这款python调试器大加赞赏,兼容性上比OD略好一些,对python的支持扩展起来也更方便。我觉得只有掌握调试器脚本的用法才能在解决一些有难度或者复杂问题时做到游刃有余,既能利用现有调试器的功能,又能更灵活的找到自己需要的信息。

CVE-2010-3962分析

比较老的漏洞,html解析器出了问题,<table style=position:absolute;clip:rect(0)>这个极品代码会导致类的虚函数表被覆盖一位,然后地址就错位了。http://www.exploit-db.com/exploits/15421/ 可以找到POC,经典的heapspray;http://bbs.pediy.com/showthread.php?t=125122 解析过程导致漏洞触发分析。我这里就是用windbg调一下,触发并找到问题所在。winxp sp3 + IE6 。

首先把POC的shellcode开头改成CCCC,windbg载入IE,这里可以设置利用页面为首页,方便.restart。直接跑起来,执行到shellcode自动断下。

IE漏洞调试之CVE-2013-3893

前言

Windows平台的漏洞挖掘和安全研究中,IE始终是绕不开的话题。IE漏洞就跟adobe系列一样经典,是学习exploit、shellcode的绝佳途径。 在IE漏洞中,UAF即Use-After-Free是最为经典的一类。UAF可以这样简单理解:A先后调用B、C、D三个子函数,B会把A的某个资源释放掉;而D由于判断不严谨即使在B把A的资源释放后依然去引用它,比如某个指针,这时D引用了很危险的悬空指针;C是个什么角色呢?我们可以通过B分配数据。所以利用方法来了:构造奇葩的数据,让A调用B,B把A的某个指针释放掉;接着执行C,C赶紧分配内存,企图使用刚才释放掉的内存,同时我们可以控制这个内存;最后D被调用,由于检查不严格调用了已经释放掉的某指针,而该指针实际上已经被我们重用并且扭曲。漏洞被利用。

添加管理员的shellcode

看到一个通用的加管理员shellcode,很经典的利用PEB查找kernel32.dll然后找到WinExec函数地址,压栈并执行。中规中矩,不过中规中矩就是最大的亮点。

反调试技术基础

虽然现在的保护主要是注册码机制,但反调试仍然是很有趣的值得学习的技术。从最简单的WIN32 API反调试到ring0的各种HOOK,Anti和Anti-Anti技术互相促进,很有意思。