2009年9月10日 星期四

test

video
看来不错。

2007年5月13日 星期日

本博客搬迁

抱歉没有更早的说明:

因为一些不可言说的愚蠢和恐惧,blogspot 在中国又遇到了访问上的难题。

所以本博客被迫转移,现在迁到 longgi.yo2.cn

2007年3月18日 星期日

ollydbg 对 GlobalAlloc 系列堆内存分配函数的支持

ollyDBG 的用户帮助->内存映射(Memory map)中说:
如果想查看由应用程序通过调用GlobalAlloc()LocalAlloc()等申请的内存块列表,请使用堆列表[Heap list]。
我们是不是可以这么理解:ollyDBG 的内存映射功能看不见使用 GlobalAlloc 系列API函数申请的堆内存。以上引用的这段文字见于翻译版的 ollyDBG 帮助,下面来看看英文原版是怎么说的:
To get list of memory chunks requested by application via calls to GlobalAlloc(), LocalAlloc() etc., use Heap list.
完全在四级考试范围之内,翻译的相当正确,没有歧义和理解错误。看来 ollyDBG 确实看不见GlobalAlloc 系列API函数动态分配的内存了。
.
.
.
.
.
.
.
可是,我做的实验似乎不是这样的…………
不明白,拿出来讨论一下吧。
嗯,还是讨论讨论比较好,请看我的实验程序。

[我的实验程序]


  这是一个相当简单的 HeapAlloc/GlobalAlloc 函数的 Delphi 10 实现演示,和原先发布的“御姐控的伟大胜利”范例程序如出一辙,只是按+/-按钮改变的变量是用以上提到的两个函数现场生成的。当然,程序退出时会主动释放(调用HeapFree/GlobalFree)。
  在MSDN上了解到,GlobalAlloc 函数是为了16位兼容性而存在的,效率比较差。建议使用 HeapAlloc 取代之。不过似乎又在哪里看见:这两个函数的入口点是一样的来着~~ 于是,俺先采用了 HeapAlloc 函数获得分配的内存的句柄或偏移量,再使用CopyMemory()写入数值。意外的,生成的变量用 FPE 和 Cheat engine 都搜索不出来,可是直接使用函数返回的偏移量可以在 ollyDBG 的内存映射里找到。这我就不明白了:ollyDBG 不是看不见 GlobalAlloc 出来的内存块吗?顺带又用 GlobalAlloc 做了一次,效果几乎一样。
  于是,我更加不爽了:为什么我自己做的什么程序的变量都可以在OD的内存映射里看见,而我调试的几个游戏中的属性值,明明知道偏移量的值,却在内存映射里怎么也找不着。

ps:
  实验程序下载 [7zip格式]

2007年3月15日 星期四

一篇纯粹为了表明我还活着的水贴

自从开学以后就一直没有更新 blog,一是因为新学期总有点事情要忙;二是觉得最近实在没什么好分享的知识或心得。

[最近在忙什么]
  主要是挑战杯的立项,主题是关于运用 OpenGL 实时渲染带自阴影的大面积草皮,算是一种优化算法的课题。目前课题正处于申报阶段,如果审批通过可以从学校获得最高 5000 元的拨款(今年学校大方了,往年都是 2000 的)。7月份要交一个预案,到时候一定得拿出东西。
  寒假时某[tc](技术水平>俺)向我演示的“魔兽修改器”给我留下了深刻的映像——突然发现自己的基础知识已经可以做 Crack Hack 之类的工作了。虽然某些 Crack&Hack 行为不需要太多的技术含量,但是 Hacker "通过一切"的技术豪情还是刺激着我。于是,我偶尔跟跟某[tc]的风,也开始摆弄起 ollydbg,w32Dasm 之类的工具,打印了包括PE文件格式和其他windows进程内存使用原理的短文和参考。

[成果]
  OpenGL 方面是在没有什么拿的出手的东西,在此就略过不表。
  游戏修改器相关技术方面已经成功的对自己编写的简单的靶程序进行了包括数据和汇编码的跨进程修改,效果参照配图自行想象。

[待解决的问题]
1)在游戏中搜索出的金钱之类的地址(不定),在 odbg 的内存映射->数据窗口使用转到时提示内存未分配。而用同样方法调试我自己编写的靶程序却可以找到。
2)正在学习加壳脱壳。
3)掌握 ollydbg 的常用调试方法。

ps:
  附编写的测试程序 [下载7z格式]