首页
社区
课程
招聘
网上有关OD的贴子,我都会集于此了。
发表于: 2004-12-5 17:49 34390

网上有关OD的贴子,我都会集于此了。

2004-12-5 17:49
34390
收藏
免费 7
支持
分享
最新回复 (32)
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
ollydbg破解完了在修改的地方,点右键先复制到可执行文件中!保存就OK了!
不然的话再打开破解的软件还是老样子,跟本没有破的那个

问:1.在看用OD破解Armadillo壳时,总是说要"忽略所有异常",请问怎样使OD忽略所有异常?
2.怎样才能改变EIP中的地址?
谢谢!

答:shift+F7,F8,F9
double click EIP and change the datum

提供一个能让od现在ASCII的插件
附上的文件http://forum.9down.com/attachment.php?attachmentid=625
2004-12-5 17:49
0
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
问:以前看别人写的文章说用OD破VB的软件好,
现摘取文章片段如下:
"用ollydbg 1.07载入程序,Alt+E在打开的窗口里双击MSVBM60.DLL,再Ctrl+N,在打开的窗口内找到_vbaStrCmp,光标放这行点一下,然后按F2下中断,双击回到主窗口"

我的问题是,我用F2下了中断后,双击没有什么反应,
而且在MSVB60.DLL里编辑只能最后存为*.dll
请问大家:此时应该怎么回到主窗口?
谢谢了啊.

答:把这个子窗口关掉。。。

od里拦截加密狗:
下bp DeviceIoControl

OD在 XP 下的万能断点插件

这也是,和附件的不同(点击下载)
附上的文件 OD在 XP 下的万能断点插件.rar (
http://forum.9down.com/attachment.php?attachmentid=626

修改版只能避开检测窗口名之类的反跟踪:诸如软件保护神的检测Ollydbg、ACPU、ACPUASM……,ACProtect检测父进程名,COOL for XP.exe检测DBGHELP.DLL等。其他的如时间检测、注入等反跟踪方式必须自己在调试时手动跳开了。压缩包内的Test文件夹有几个Anti例子,大家可以对比看看。

Code: [Copy to clipboard]
Ollydbg V1.10正式汉化修改版――flyODBG 文件夹目录

├─Ollydbg.exe //聆风听雨 兄汉化的 OllyDbg V1.10 正式版
├─Ollydbg.ini //OllyDbg 配置文件
├─eXpLoRer.exe //flyODBG 修改版
├─flyODBG.ini //flyODBG 配置文件
├─API地址专家.exe//kongfoo兄弟的API地址专家
├─CmdBar.ini
├─Cmdline.dll
├─DBGHELP.DLL
├─DeJunk.dll
├─DeJunk.ini
├─license.txt
├─loaddll.exe
├─OLLYDBG.HLP
├─PSAPI.DLL
├─Readme.CHS.txt
├─readme.txt


├─IDTools For WinXP//飞叶流枫兄的程序,脱幻影时可以保存中断门
├─Lib//导入库
├ ├─MFC42.Lib
├ ├─mfc71.Lib
├─Test//三个Anti测试程序
├ ├─COOL for XP.exe
├ ├─ollydtct.exe
├ ├─SDProtector Test.EXE
├─UDD
└─Plugin//插件
├─Bookmark.dll
├─CleanupEx.dll
├─CmdBar.dll
├─CmdBar.ini
├─Cmdline.dll
├─dejunk 1.2.txt
├─DeJunk.dll
├─DeJunk.ini
├─DeJunk.Log
├─DeJunk.sfv
├─extracopy.dll
├─HideCapt.dll
├─IsDebug V1.4.dll
├─Junkdb.cfg
├─Labeler.def
├─LoadMap.dll
├─mapconv.c
├─MapConv.dll
├─MapConv.txt
├─OllyDump V2.21汉化版.dll
├─OllyDump.ini
├─ollyscript Plugin命令中文解释.txt
├─OllyScript.dll
├─StayOntop.dll
├─WatchMan.dll
├─windowinfos.dll
├─windowjuggler.dll
└─文件清除.ini

2、如果是脱壳,推荐在Win XP、2000、2003系统平台上分析。修改版在Win9X上有命令行插件无法加载!

3、本修改版是在 聆风听雨 兄汉化的 OllyDbg V1.10 正式版基础上稍作修改。

4、压缩包内包含原OllyDbg汉化版主程序、收集的很多插件、飞叶流枫兄的IDTools For WinXP、kongfoo兄弟的API地址专家等等。

5、不要更改压缩包里的几个文件的文件名!使用前重新设置你的UDD、插件以及其他路径!否则无法加载插件!

6、本修改版仅仅是我个人使用,没有什么价值。兄弟们别嬉笑偶就很感激啦!

7、感谢Ollydbg这个伟大工具的作者、聆风听雨 兄的汉化、以及帮忙测试的各位朋友。

程序大小:2.54M

因为程序比较大,所以放在 零度地带 下载站。下载页面:
:-)
http://www2.0zones.com:808/SoftView/SoftView_16520.html

全部汉化插件.

http://www.chinadfcg.com/attachment.php?aid=3897
全部汉化插件2
http://www.chinadfcg.com/attachment.php?aid=3897

--------------------------------------------------------------------------------

另一下载地址:
http://gujing.westwww.com/soft/flyODBG V1.10正式汉化修改版.rar
包含全部汉化

当用flyOD打开,总是在系统载入时中断在LoadLibraryExA上面。用“断点”查看,系统在LoadLibraryExA设了永久断点。用F2取消断点后,系统才开始断在程序入口时:

删除你以前的UDD文件
或者取消这个断点后再退出OD
2004-12-5 17:50
0
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
问:
我装的OD后找不到命令栏~~~

答:
1、检查你的OD有没有下载命令行插件
2、检查你的OD有没有设置好插件路径
3、你是否在98系统下使用修改版的OD??修改版的OD在win98系统无法显示,只有win2K以上的系统才能正确显示。

--------------------------------------------------------------------------------

问:
OD 中如何改 eip?
sice中 r eip xxxxxx 可以修改eip, OD 中可以改eax ...但EIP如何改?

答:
代码窗口->在要跳转到的地址处按鼠标右键出现菜单->此处新建EIP(Ctrl-*)
双击eip,任意更改。

--------------------------------------------------------------------------------

在OD里可以使用ida签名的插件

有了这个插件,在OD里的汇编代码可读性可以超过ida了。

下载
http://www.chinadfcg.com/attachment.php?aid=5222

--------------------------------------------------------------------------------

问:
在OD中如何使用消息窗口下断点我不知道指令是什么。
如对函数下断点 BP DialogboxparamA
消息窗口下断点 我理解是不是 ** 0084 WM_DESTROY
就不知道指令 ** 它是什么了

答:
右键->断点->条件

  #19     10-15-2004, 10:44 AM  
phoenxi[ne]  
版主   注册日期: Sep 2004
帖子: 413  

--------------------------------------------------------------------------------

问:
OD fly版的修改!

OD fly版本的命令行插件 显示的字体太小,看得很吃力,希望朋友们告知在配置文件那行代码是修改该项字体的


插件里面====>快捷命令===>字体设置!

---------------------------

--------------------------------------------------------------------------------

OllyDbg plugin : DLLBreakEx
v1.2
+ Static version (no runtime)
* Added compatibility with 1.10b (ODBG_Paused)

v1.1
+ Added DLL Breakpoints List in Menu
+ Ignore other modules when bp is set
* Bug with module cache on restart

附件LLBreakEx.12.zip
http://bbs.pediy.com/upload/file ... akEx.12.zip_287.zip

Rtl60.bpl

附件:RTL60.rar

http://bbs.pediy.com/upload/file/2004/10/RTL60.rar_578.rar

忘了说一下,应将RTL60.BPL拷贝至\windows\system32(win2000、winxp系统)目录下。

--------------------------------------------------------------------------------

[转]Writing a VB Plugin for OllyDbg
原文出处:
http://www.blogcn.com/blog/trackbac...mydiary=4079549
--------------------
thinks immlep
--------------------
URL:
http://sandsprite.com/CodeStuff/VB_Plugin_for_Olly.html

Ok some people will ask why I would bother...but VB really makes interfaces a breeze, is super quick to debug, and well my entire code base is already written in it.

So this article highlights a way to make a VB plugin for OllyDbg. This same technique should also work for IDA plugins.

Olly was written in C and all of its plugin APIs use the cdecl calling convention. To be able to interface VB with it, we need to use stdcall functions and have the VB runtime properly loaded and initalized.

The easiest way to accomplish both of these things at once is to create a small stub Dll plugin in Cpp for Olly to load. This stub will handle the plugin initalization, adding menu items to Olly, and then starting up our VB code when it is time to launch our plugin.

The plugin stub is also responsible for providing the VB app with a set of stdcall functions so it can access the Olly cdecl plugin API.

When it comes time to launch the plugin, our Cpp code creates an instance of our VB COM server and calls a method on its main interface. This loads and initilizes VB runtime and transfers execution over to our VB Code.

The VB code then in turns uses stdcall exports from the Cpp dll via the VB Declare function mechanism. A basic block diagram looks like the following:

查看图片
http://www.blogcn.com/User14/immlep...10455494102.jpg

This sample plugin will extract all user entered comments from Olly. Thanks goes out to Joe Stewart and his LabelMaster plugin for an example on how to yank the comments out using Ollys plugin API

To install the plugin just copy both dlls over to your Olly plugins directory. Make sure to register the VB dll (VbOllyPlugin.dll) with regsvr32 because it is a COM server. Both Dlls have to be in the same directory so the VB one can load the exports from the stub.

I suppose the next step to this is to have the Cpp stub be able to enumerate and dynamically load and initilize multiple VB plugins for use and integration in Olly. Where the Cpp olly plugin would in turn support its own plugin framework designed around VB modules for integration back into Olly. However I am not that bored at this moment

Anyway, I was wondering how to interface a VB UI as an Olly plugin so here it is  

Download Sample files :
http://sandsprite.com/CodeStuff/vb_plugin_for_olly.zip

-dzzie

- as a side note, this is not limited to only working between 2 dlls
you can also export functions(http://sandsprite.com/CodeStuff/exe_export.zip) from your VC exes and use the same trick
2004-12-5 17:51
0
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
一个关于ollydbg跟踪各种算法的汇总站点

地址http://www.iespana.es/OllyDBG/Criptograf%EDa.html

附件是说明的西班牙文转英文的翻译!
附件:introduction.rar
http://bbs.pediy.com/upload/file/2004/9/introduction.rar_714.rar

转贴自askformore :

1楼 2004-09-25,16:39

--------------------------------------------------------------------------------

也谈写OllyScript脚本之Career和心声
也谈写OllyScript脚本之Career(for 0.92)

现在喜欢用Ollydbg的人相信比较多……

近来,喜欢上写OllyScript脚本,又爱又恨。脚本写得比较烂和慢,原因是汇编命令没认识几个,逻辑思维差,不过认识的还能在OllyScript脚本找到,OllyScript是那么让人和爱可亲,却又是(一般地说)比较难灵活运用,运行还欠些好的透明度。个人认为,脚本和我们写程序(我可没写过真正的程序)一样,先是你有了主题(target:目标),然后用你认为可行的方式进行组织“框架”,(用OS的“法规”)填饱草图,一番潇洒的“文笔”(写命令)后,马上就要进入天堂和地狱的测试考验。如果你是“算死草”--逻辑思维很强的老手,多数直接奔向天堂;但地狱又经常向我等傻瓜招手,屡屡折磨我们。

以下是我写脚本的 Career 和心声(还很烂):

1.注意变量的声明,最好写在一起声明(在开头,同在一个脚本里的都是全局的了),以便报错时,能快速查找(虽然脚本有报错行,但我相信你不想去拉滚动条)

2.弄清变量的真正含义(声明后在赋值后才能确定,有字符、16进制数值串、32位地址或数值):
for example:
var addr
mov addr,[esp+10]//不支持间接计算,这样脚本不会报错,但你一运行就知利害

var addr
var code
mov addr,401000 //缺少这行赋值,addr是0,会带来非法操作
mov addr,#9876543210ABCDEF# // 这条本是想存放16进制串到addr,应该这样 mov [addr],#9876543210ABCDEF# ,且addr应是个有效地址

3.注意命令作用的变更:
find类命令应该用得比较多吧
for example:
find eip,#ABCDEF# // 0.85版是从eip所在的内存块image地址开始搜索
//0.92版是从eip所指地址开始搜索
findop //此命令,是查找真正的命令--一眼就能看到的,如你要找的命令附近有花指令的,使用是找不到的。

4.尽量写成模块功能(精简为上),以便写注释、移植、(用#inc命令)组装和查找错误(第1个运行的脚本定义的变量是全局的,它到第2、3..脚本有效,全局变量值改变后可返回到上一脚本,与全局变量同名变量重新声明无效),包含脚本方面的作用我还在糊涂中。
for example:
//下面的功能简单:不难看出是交换a、b两个数
var a
var b
var c

mov a,12
mov b,10
mov c,a
mov a,b
mov b,c
log a //记录交换后的结果
log b
ret

遗憾的是大家都比较少写模块功能脚本,缺乏加强交流测试认证(可能功能细小,大家怕写了没人理会),只想写一气呵成、一起包办的专门版本脚本(开始我都认为该这样写)--有的显得相当长篇,难以理解,方法各有特点,一般只有作者本人可以读懂,这样长让作者写注释都要瞄来瞄去,心情欠佳(比如:对付某版本某加壳,作者都希望脚本简短,可多数事与愿为)就不起劲;模块化(一定的功能)可能还未被人重视的原故吧,我个人觉得应该多向这方面考虑出发写一下,好比C语言,就是个大家都普遍了解的例子,模块化一些功能--贵精求精,使之标准化==Public,容易移植,往后,我们要写起脚本来就轻松得多,因为功能已经得到测试认可,只需利用在其模块上修改一些变量或参数等,用#inc或粘贴在适当位置作连接就可事半功倍....

5.在循环设计和判断方面上,应该多考虑错误发生的可能性,调试或运行时可在其中放入pause和log somthing 或step以便监察运行当中的闪失漏洞。比如:我所遇到过的某变量a是的地址变量,在循环中突然变成了0,如果它是参与地址访问,哈哈,后果...

6.认真检查变量对象的名称是否误写了,比如:esp写成了ebp,运行的话,脚本是无法为你检出错误的,因为这些是不需要声明的。

7.我不是程序员,也不是专家,仅是a boy,所说的都是错误中的心声,希望大家都来分享你自己的脚本“心声”,多多少少总会有的,不管它是喜与忧,是不懂还是半懂,只有加强交流和实践,脚本编写方面总会取得一定的成果的。大家很少谈写脚本的心得,猜测原因大概是写脚本的一般都不是真正的程序员(程序员引以为傲的是自己能写程序搞顶吧)或者认为提出要谈论的就一定是高手,然而你写出的功能脚本也有可能是不太实用或实际的,但我认为你愿意跟别人交流已经很不错了--即使那是事实。写脚本比较花时间(有时一个脚本花上好几天,主要是调试)--首先你要取得调试方面的收获,然后又要花尽脑汁去描绘脚本,测试,调试修复,再测试……直到成功,写完后发布,又要经历同样的测试,不难想象,他们(包括我)害羞、没空、希望交流又没人组织和提供交流的固定地点……我可是那一类不想做组织和leader的家伙,当然自己也没什么本事嘛!希望有位中国同志站出来...呵呵,鼓掌中……推举一下loveboom怎么样………

last:
我也有写脚本的问题,好些命令也没机会实践:
象是 0.92的<EXECute/END>对当前调试进程,执行在EXEC和ENDE之间的指令。
exec
push 0
call ExitProcess
ret
ende

我没有执行成功,理解能力差吧,也不知它如何使其能够执行,call ExitProcess 这个OS能理解翻译吗?还有的是call函数一般都要用到句柄参数等,这个命令的执行缺乏透明度,里面干了什么不得而知,有朋友可告知其运用的实例吗?

呵呵,看完了,我可不是练打字呀,希望能大家发动互相交流。如果脚本写得好的话,会有一些惊喜的亮点,很多Ollydbg的其它插件都可以隐居山林了呀……

顺便来一个脚本(不知如何):

// 抵达aspr首次堆栈出现硬盘指纹

//作用:如题,方便大家在aspr定位,比如填写注册信息或什么!欢迎大家测试反馈!
var drc
var test
var zero
var count
mov count,0

dbh
eob break

loop:
esto
inc count
mov drc,esp
add drc,28
mov zero,drc
sub zero,4
mov zero,[zero]
mov drc,[drc]
cmp zero,0
jne loop
cmp drc,0
je loop
mov test,drc
and test,FF000000
cmp test,0
jne loop

final:
log eip
log drc
sub drc,4
cmp [drc],0C
jne loop
log "下面count是使用脚本以来的异常统计:"
log count
cmt eip,"祝贺,你成功抵达首次堆栈出现硬盘指纹的异常!"
ret

break:
msgyn "现在脚本发现不明的断点中断,请选择是否继续Pass异常?Y/N"
cmp $RESULT,0
je end
jmp loop

end:
msg "你选择了结束脚本,Bye Bye!"
ret

OllyScript v0.92中文帮助文档
以下内容为TT小组[Translation Team]翻译。原英文文档版权属于SHaG。TT小组保留翻译部分的权利,您可以任意转载,但需标明出处来自TT小组。
欢迎大家加入TT小组。

-------------------------------
Olly脚本插件v0.92 制作: SHaG
文档汉化:ZMWorm[CCG][TT]
E-Mail:TranslationTeam[at]126.Com
2004年08月12日初稿
-------------------------------

1. 关于 OllyScript
2. 目前情况
2.1 v0.92最新更新
3. 文档
3.1 语言概述
3.1.1 保留变量
3.1.2 指令
3.2 标签
3.3 注释
3.4 菜单
4. 嵌入其他的插件
5. 如何联系我
6. 特许与源代码
7. 鸣谢!

------------------------------

1. 关于 OllyScript
-------------------
OllyScript 是 OllyDbg调试器的一个插件。我个人认为,OllyDbg是目前最好的程序级调试器。
这个调试器的最大的特色之一就是她的插件体系,这是使得用户能够更为有效的扩展她的功能。
OllyScript 是一种通过类汇编语言的脚本,来控制OllyDbg自动运行的插件。
在调试程序时,常常都是仅仅为了要找到某几个关键点,而不得不做大量的重复工作。
而通过使用我的脚本,您就可以做到“写一次脚本,无限使用” [write a script once and for all]。

------------------------------

2. 目前情况(200年7月10日)
----------------------------
v0.92
修正了一个关于脚本同步的大Bug(感谢loveboom!)。
GN 指令行为更新[behaviour updated]。
MOV 指令可以将字符串写入内存。

v0.91
修正了一个关于应用程序暂停的Bug。
增加GN指令。
ASM指令返回$RESULT。

v0.9
OllyScript目前的下载量已经超过一万次了!这意味着超过2Gb的网络下载流量。这个结果对我来说还不错!因为我要参与一个xray系统项目,这个项目要花去我不少的时间,所以开发这个插件的步伐可能要放慢了。真的对不起大家了。

2.1 最新更新
---------------
+ 新的指令:ASK, BPL, BPLCND, COB, COE, EVAL, EXEC/ENDE, GN, TICND, TOCND
+ 在调试进程中执行代码
+ ADD和EVAL指令支持串操作。
+ 输入对话框
+ 记录断点[Logging breakpoints]
+ 去除EOB和EOE指令
+ 条件跟踪
+ 获得地址名
# ASM指令返回汇编命令长度,保存在$RESULT中
# 修正程序暂停时发生崩溃的Bug
# 修正JBE指令的Bug,希望这是最后一个关于跳转指令的Bug
# OllyScript 目前只完全支持OllyDbg v1.10。对于其他版本并不一定完全兼容。

------------------------------

3. 文档
----------------
在这个版本中,附带了两个脚本例子(tElock098.osc 和 UPX.osc)。
这两个脚本,可以迅速找到对应壳的入口。

3.1 语言
------------
OllyScript脚本语言是一个种类汇编的语言。

在后面的文档中, “源操作数” 和 “目的操作数”表示以下含义:
- 十六进制常数,既没有前缀也没有后缀。 (例如:是00FF, 而不是 0x00FF 和 00FFh的形式)
- 变量,这个变量必须在使用前用Var进行定义
- 一个32位寄存器 (EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP)。
目前尚不支持非32位寄存器,但是您可以使用SHL/SHR 和 AND指令来获得这它们的值。
- 一个被中括号括起来的内存地址 (例如:[401000] 指向内存地址为401000里存放分数据,
[ecx] 指向内存地址为寄存器ecx里存放分数据).
- 一个标志位,带有感叹号前缀(!CF, !PF, !AF, !ZF, !SF, !DF, !OF)
- 字符串,也可叫数据序列。其格式为: #6A0000# (数值在两个“#”号之间),两个“#”号之间必须包含至少有一个数值。
- 包含“?”通配符的字符串。比如 #6A??00# 或者 #6?0000#

33.1.1 保留变量
------------------------

$RESULT
-------
<RESULT>
保存某些函数的返回值,比如FIND函数,等等。

$VERSION
--------
<VERSION>
保存OllyScript,的版本信息
例:
cmp $VERSION, "0.8" //比较是否大于 0.8版
ja version_above_08

3.1.2 指令
--------------

#INC "文件名"
---------
<INClude>
将一个脚本文件的内容包含到另外一个脚本文件中
例:
#inc "anotherscript.txt"

#LOG
----
<LOG>
开始记录运行指令
指令会显示在OllyDbg的log窗口中,每条记录前都会加上“-->”的前缀
例:
#log

ADD 目的操作数,源操作数
-------------
<ADD>
源操作数与目的操作数相加,并把相加的结果保存到目的操作数中。
例:
add x, 0F
add eax, x
add [401000], 5
add y, " times" // 如果在次之前y="1000" ,则在执行完此指令之后y="1000 times"

AI
--
<Animate Into>
在OllyDbg中执行“自动步入” [Animate into]操作。
例:
ai

AN 地址
-------
<ANalyze>
从指定处,对代码进行分析。
例:
an eip // 相当于在OllyDbg中按 Ctrl+A键

AND 目的操作数, 源操作数
-------------
<AND>
源操作数与目的操作数进行逻辑与操作,并将结果保存到到目的操作数中。
例:
and x, 0F
and eax, x
and [401000], 5

ASK 问题
------------
<ASK>
显示一个提示输入框,让用户输入,并将结果保存转保留变量$RESULT中(如果用户按了取消键,则$RESULT=0)。
例:
ask "Enter new EIP"
cmp $RESULT, 0
je cancel_pressed
mov eip, $RESULT

ASM 地址, 指令
-----------------
<ASseMble>
修改指定地址的指令。
并将修改后的汇编指令长度保存到保留变量$RESULT中
例:
asm eip, "mov eax, ecx" //将当前指令修改为 mov eax,ecx

AO
--
<Animate Over>
在OllyDbg中执行“自动步过” [Animate over]操作。
例:
ao

BC 地址
-------
<BreakPoint Clear>
清除指定地址的断点。
例:
bc 401000
bc x
bc eip

BP addr
--------
<BreakPoint>
在指定地址设断点
例:
bp 401000
bp x
bp eip

BPCND 地址, 条件
----------------
<BreakPoint on CoNDition>
在指定地址处,设置条件断点。
例:
bpcnd 401000, "ECX==1" //当 代码执行到401000且 ecx等于1 时,程序暂停

BPL 地址, 表达式
--------------
<BreakPoint of Logging>
在指定地址处设置记录断点,将表达式的结果记录到记录窗口中。
例:
bpl 401000, "eax" // 每次执行到401000时,都将eax寄存器的结果记录

BPLCND 地址, 表达式, 条件
-----------------------
<BreakPoint of Logging on CoNDition>
在指定地址处设置记录断点,如果条件为真时,将表达式的结果记录到记录窗口中。
例:
bplcnd 401000, "eax", "eax > 1" // 如果执行到401000时,满足eax>1,则将eax寄存器的结果记录

BPMC
----
<BreakPoint Memory Clear>
清除内存断点。
例:
bpmc

BPHWC 地址
----------
<BreakPoint HardWare Clear>
删除指定地址处的硬件断点。
例:
bphwc 401000 //清除 401000处的断点

BPHWS 地址, 模式
----------------
<BreakPoint HardWare Set>
在指定地址,设置硬件断点。有三种模式: "r" - 读取, "w" - 写入 或者 "x" - 执行.
例:
bphws 401000, "x" //当执行到此地址时发生中断

BPRM 地址, 大小
---------------
<BreakPoint on Read Memory>
在指定地址处,设置一个内存读取断点。 “大小” 是指内存中的字节大小。
例:
bprm 401000, FF //一个字节

BPWM 地址, 大小
---------------
<BreakPoint on Write Memory>
在指定地址处,设置一个内存写入断点。“大小” 是指内存中的字节大小。
例:
bpwm 401000, FF

CMP 目的操作数, 源操作数
-------------
<CoMPare>
比较 目的操作数与源操作数的大小,和其对应的汇编指令作用相同。
例:
cmp y, x
cmp eip, 401000

CMT 地址, 字符串
--------------
<CoMmenT>
在指定地址处,加入注释。
例:
cmt eip, "这是入口" //当前地址处 加上 “这是入口”的注释

COB
---
<Continue On Breakpoint>
发生中断后,让脚本继续执行(移除EOB指令)
例:
COB

COE
---
<Continue On Exception>
发生异常后,让脚本继续执行(移除EOE指令)
例:
COE

DBH
---
<DeBugger Hided>
隐藏调试器
例:
dbh

DBS
---
<DeBugger Show>
对隐藏的调试器操作进行恢复,不再隐藏。
例:
dbs

DEC 变量
-------
<DECrement by 1>
对变量进行减一操作
例:
dec v

DM 地址, 大小, 文件名
-------------------
<Dump Memory>
从指定地址处开始,在内存中提取指定大小的数据,并保存到指定的文件中
例:
dm 401000, 1F, "c:\dump.bin"

DMA 地址, 大小, 文件名
-------------------
<Dump Memory Appended>
从指定地址处开始,在内存中提取指定大小的数据,并保存到指定的文件中;如果指定文件已存在,则将数据追加到指定文件尾部。
例:
dma 401000, 1F, "c:\dump.bin"

DPE 文件名, 入口
----------------
<Dump Process with Entry point>
提取执行模块到指定文件中。
“入口”用来设定入口地址。
例:
dpe "c:\test.exe", eip //入口为当前地址,保存为C盘下test.exe

EOB 标签
---------
<Execution On Breakpoint>
在下次中断发生时,跳转到指定标签处。
例:
eob SOME_LABEL

EOE 标签
---------
<Execution On Exception>
在下次异常发生时,跳转到指定标签处。
例:
eoe SOME_LABEL

ESTI
----
<Exception STep Into>
相当于在OllyDbg按 SHIFT-F7。
例:
esti

ESTO
----
<Exception STep cOntinue>
相当于在OllyDbg按 SHIFT-F9。
例:
esto

EVAL
----
<EVALuate>
计算含义变量的表达式。
变量必须已经在脚本中声明。插到字符串中时,要放在用大括号{}中。
结果保存在保留变量$RESULT中Sets the reserved $RESULT variable
例:
var x
mov x, 1000
eval "x的值是 {x}" // 执行后$RESULT为 "x的值是 00001000"

EXEC/ENDE
---------
<EXECute/END of Execute>
对当前调试进程,执行在EXEC和ENDE之间的指令。
有大括号的,会被大括号中的变量的值替代。
例:
// 以下是做移动操作
var x
var y
mov x, "eax"
mov y, "0DEADBEEF"
exec
mov {x}, {y} // mov eax, 0DEADBEEF 将被执行
mov ecx, {x} // mov ecx, eax 将被执行
ende
// 以下是调用调试程序的ExitProcess函数
exec
push 0
call ExitProcess
ende
ret

FIND 地址, 查找内容
---------------
<FIND>
从指定地址开始在内存中查找指定的内容。
如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。
查找的串支持通配符“??”(见下面的例子)。

例:
find eip, #6A00E8# // 查找一个Call,其的第一个参数为0 (push 0)
find eip, #6A??E8# // 查找一个带参数的Call

FINDOP 地址, 查找内容
-----------------
<FIND OPcode>
从指定地址开始查找指定一个指令,这个指令是以指定内容为开始的。
如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。
查找的串支持通配符“??”(见下面的例子)。
例:
findop 401000, #61# // find next POPAD
findop 401000, #6A??# // find next PUSH of something

译者注:
对比一下FIND 和FINDDOP的区别:
地址 数据 代码
00401007 B8 3300 MOV EAX, 33
0040100C 33F6 XOR ESI, ESI
find 401007, #33# //$RESULT等于401008
finddop 401007, #33# //$RESULT等于40100C

GN 地址
-------
<Get Name>
获得指定地址的符号名(比如指向API函数)。
符号名将保存到保留变量$RESULT中。如果符号名是一个API函数,则$RESULT_1保存链接库名(比如 kernal32)而 $RESULT_2保存符号名(比如 ExitProcess)。
例:
gn 401000

GPA 函数名, 动态链接库名
-------------
<Get Procedure Address>
在指定的动态链接库中,获得指定函数的地址。
如果查找成功,地址会保存到保留变量$RESULT中,否则$RESULT将等于 0。
在设置API函数断点时,这个指令非常有效。
例:
gpa "MessageBoxA", "user32.dll" // 这条指令执行后,$RESULT等于函数MessageBoxA的地址,您可以使用"bp $RESULT"设置断点。

GO 地址
-------
<GO>
执行到指定地址处 (相当于SoftICE中的 G 命令)
例:
go 401005

GMI 地址, 信息
--------------
<Get Module Info>
获得指定地址所在模块的相关信息。
“信息”可以是模块基地址[MODULEBASE], 模块大小[MODULESIZE], 代码段基地址[CODEBASE] 或者 代码段大小[CODESIZE]
(如果您想在将来的版本中,获得更多的信息,请联系我)。
信息会保存到保留变量$RESULT中 (如果没有找到信息,则$RESULT等于0).
例:
GMI eip, CODEBASE // 这条指令执行后,$RESULT等于当前所在模块的代码段基地址。

INC 变量
-------
<INCrement by 1>
对变量进行加一操作
例:
inc v

JA 标签
--------
<Jump if Above>
在cmp命令后使用. 和其对应的汇编指令作用相同.
例:
ja SOME_LABEL

JAE 标签
---------
<jump if Above or Equal>
cmp. 和其对应的汇编指令作用相同.
例:
jae SOME_LABEL

JB 标签
--------
<Jump if Below>
在cmp命令后使用. 和其对应的汇编指令作用相同.
例:
jb SOME_LABEL

JBE 标签
---------
<Jump if Below or Equal>
在cmp命令后使用。和其对应的汇编指令作用相同.
例:
jbe SOME_LABEL

JE 标签
--------
<Jump if Equal>
在cmp命令后使用. 和其对应的汇编指令作用相同.
例:
je SOME_LABEL

JMP 标签
---------
<JuMP>
跳转到指定标签.
例:
jmp SOME_LABEL

JNE 标签
---------
<Jump if Not Equal>
在cmp命令后使用. 和其对应的汇编指令作用相同.
例:
jne SOME_LABEL

LBL 地址, 字符串
--------------
<LaBel Insert>
在指定地址处插入一个标签
例:
lbl eip, "NiceJump"

LOG 源操作数
-------
<log>
将源操作数输出到OllyDbg的记录窗口[log window]中。
如果源操作数 是一个字符串常量,则原样记录。
如果源操作数 是一个变量或一个寄存器,则记录名称及其存放的数值
例:
log "Hello world" // 记录为 "Hello world"
var x
mov x, 10
log x // 记录为 "x = 00000010"

MOV 目的操作数, 源操作数
-------------
<MOVe>
将源操作数移动到目的操作数中。
源操作数可以是一个十六进制序列格式#某个十六进制序列#,例如:#1234#。
提醒:十六进制序列的位长只能是偶数,比如2, 4, 6, 8等等。
例:
mov x, 0F
mov y, "Hello world"
mov eax, ecx
mov [ecx], #00DEAD00BEEF00#
mov !CF, 1
mov !DF, !PF
mov [403000], "Hello world"

MSG 消息
-----------
<MeSsaGe>
将指定消息,显示到一个对话框中。
例:
MSG "脚本暂停"

MSGYN message
-----------
<MeSsaGe Yes or No>
将指定消息,显示到一个对话框中,这个对话框有“是”、“否”按钮。
如果点“是”,保留变量 $RESULT 等于1,否则保留变量$RESULT等于0 。
例:
MSGYN "继续?"

OR 目的操作数, 源操作数
-------------
<OR>
源操作数和目的操作数做逻辑或操作,并将结果保存到到目的操作数中。
例:
or x, 0F
or eax, x
or [401000], 5

PAUSE
-----
<PAUSE>
暂停脚本运行。可以通过插件菜单恢复脚本运行。
例:
pause

REPL addr, find, repl, len
--------------------------
REPL 地址, 查找字符串, 替换字符串, 长度
--------------------------
<REPLace>
在指定地址开始,在指定长度字节内,用“替换字符串”替换“查找字符串”。
允许使用通配符
例:
repl eip, #6a00#, #6b00#, 10
repl eip, #??00#, #??01#, 10
repl 401000, #41#, #90#, 1F

RET
---
<RETurn>
退出脚本。
例:
ret

RTR
---
<Run To Return>
相当于在OllyDbg中执行 "Run to return" [Ctrl+F9]操作。
例:
rtr

RTU
---
<Run To User code>
相当于在OllyDbg中执行 "Run to user code"[Alt+F9] 操作。
例:
rtu

RUN
---
<RUN>
相当于在OllyDbg中按 F9。
例:
run

SHL 目的操作数, n
-------------
左移目的操作数,n比特位;并将结果保存到到目的操作数中。
例:
mov x, 00000010
shl x, 8 // x is now 00001000

SHR目的操作数, n
-------------
<SHift Right>
右移目的操作数,n 比特位;并将结果保存到到目的操作数中。
例:
mov x, 00001000
shr x, 8 // x is now 00000010

STI
---
<STep Into>
相当于在OllyDbg中按 F7,单步步入。
例:
sti

STO
---
<STep Over>
相当于在OllyDbg中按 F8,单步步过。
例:
sto

SUB dest, src
-------------
Substracts src from dest and stores result in dest
Example:
sub x, 0F
sub eax, x
sub [401000], 5

TI
--
<Trace Into>
相当于在OllyDbg中执行 "Trace into" 操作。
例:
ti

TICND cond
----------
<Trace Into Condition>
执行 "Trace into" 操作,直到条件为真时停止。
例:
ticnd "eip > 40100A" // 当 eip > 40100A 时停止

TO
--
<Trace Over>
相当于在OllyDbg中执行 "Trace over" 操作。
例:
to

TOCND cond
----------
<Trace Over Condition>
执行 "Trace over" 操作,直到条件为真时停止。
例:
tocnd "eip > 40100A" // 当 eip > 40100A 时停止

VAR
---
<VARiable>
在脚本中,声明一个变量。
必须在变量使用先声明。
例:
var x

XOR 目的操作数, 源操作数
-------------
<XOR>
源操作数与目的操作数进行异或操作,并将结果保存到到目的操作数中。
例:
xor x, 0F
xor eax, x
xor [401000], 5

3.2 标签
----------
定义标签,要在标签名后面要加上一个冒号.
例:
SOME_LABEL:

3.3 注释
------------
您可以使用“//”在任何地方进行注释。
块注释必须另外起一行并以 “/*”做为开始,以“*/”作为结束,“*/”也必须另起一行。

例:
/*
您的注释
*/

3.4 菜单
---------
OllyScript的主菜单包含了下面几项:
- Run script...[运行脚本...]: 用户选择一个脚本,并运行这个脚本。
- Abort [中止]: 中止脚本运行
- Pause [暂停]: 暂停脚本运行
- Resume[恢复]: 恢复脚本运行
- About [关于]: 显示此插件信息

------------------------------

4. 嵌入其他的插件
---------------------------------
您可以在您的插件中调用OllyScrip,并且运行一个脚本。
使用类似于下面的代码进行调用:

HMODULE hMod = GetModuleHandle("OllyScript.dll";
if(hMod) // 检测是否被其他插件加载
{
// 获得输出函数地址
int (*pFunc)(char*) = (int (*)(char*)) GetProcAddress(hMod, "ExecuteScript";
if(pFunc) // 检查是否获得输出函数
pFunc("myscript.txt"; // 执行输出函数
}

------------------------------

5. 如何联系我
-------------
您可以在论坛提交问题,也可以用IRC 在EFnet的给SHaG发消息。当然您也可以直接写信给我,我的信箱是:shag(at)apsvans.com。

------------------------------

6. 特许与源代码
--------------------------
过一段时间,我打算卖这个插件,你想继续使用的话必须要交很高的费用!,嘿嘿,开个玩笑。
严肃的说,只要您需要,您可以免费使用这个插件及其源代码。
但是请您在您的文档和版权对话框中,标注上我的名字。
如果您的工程,大规模的使用我了的代码。也请您通知我,我会关心一下的。
这个插件的源代码可以随时提供给您。 如果您需要源代码的话,请发邮件!

------------------------------

7. 鸣谢!
----------
对于所有提交Bug、编写脚本以及提供宝贵建议的朋友,我表示感谢。
感谢R@dier提供Dump引擎。
当然,特别要感谢Olly,是他开发出了如此优秀的调试器!
2004-12-5 17:53
0
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
od 脚本编辑器
附件: Oscedit.rar (30.61 K)

http://www.chinadfcg.com/attachment.php?aid=4839

问:
OD打开新的文件怎么会断在上次的断点处啊?!
我都晕了,每次关掉ollydbg后再打开一个新的文件,结果直接就将这个软件断在了上次对另一个文件下的断点处,如何能彻底取消啊?!谢谢了各位!

答:
看你设置的保留断点信息的路径了,如果没有就在OD目录下,把与你调试的软件同名的文件删掉

--------------------------------------------------------------------------------

OllyDbg中文命令行帮助~!要的快下~!
附件:CMDLINE.rar
http://bbs.pediy.com/upload/file/2004/8/CMDLINE.rar_331.rar

OllyDbg插件发布 - Ultra String Reference
+----------------------------------------------------+
+ 名称: Ultra String Reference
+ 版本: v0.10
+ 作者: 罗聪
+ 日期: 2004-07-15(yyyy-mm-dd)
+----------------------------------------------------+

下载地址:
http://www.luocong.com/myworks/zipped/ustrref.zip
或者
点击下载:附件!ustrref.zip
[简介]
Ultra String Reference 是一个 OllyDbg 的插件(Plugin),OllyDbg的串式参考(String Reference)对中文的支持比较差,有感于此,我写了这个插件,支持对 GB2312 中文的串式参考,希望可以改善这种状况。

[系统需求]
OllyDbg 1.10,否则该插件不会被装载。

[安装]
把 ustrref.dll 拷贝至 OllyDbg 主程序所在的目录下即可。

[使用方法]
第一步,用 OllyDbg 载入 PE 文件。
第二步,选择主菜单的“Plugins->Ultra String Reference”,或者右键单击并选择反汇编窗口中弹出的“Ultra String Reference”菜单,然后选择“Find ASCII”或者“Find UNICODE”。具体使用哪个请自行决定,一般来说 VB 的程序应该使用“Find UNICODE”,非 VB 的程序应该使用“Find ASCII”。

[原理]
通过对PE文件的代码段进行反汇编,找出以 push、mov、lea 开头的 3 种形式的代码。例如:
;--------------------
push [address]
;--------------------
或者
;----------------------------------------
mov [register], offset [address]
;----------------------------------------
我们知道,push 很可能是进行参数的压栈操作;mov offset 和 lea offset 则很可能是紧跟一个字符串的偏移地址。因此如果对程序进行反汇编,并进行一些相应的地址转换后,得到的就非常可能是字符串。根据多次尝试后,我最终采取的方法就是这样――对代码段进行反汇编,然后转换地址,再筛选掉没用的垃圾字符,从而找出有用的字符串。

[特点]
1、能正确找出中文字符串。
这点 OllyDbg 就无法做到,大部分的中文字符串都会被它漏掉。

2、与 OllyDbg 原有的 String Reference 功能兼容。
操作步骤和界面都是一样的,基本上不会造成使用上的困难。

[缺点]
1、有部分中文字符串不被支持。
为了尽可能地过滤垃圾字符串,目前仅支持双字节 2 区的 6763 个常用简体中文汉字(即 GB2312 标准的汉字),以及双字节 1 区和双字节 5 区的图形符号。然而对于大多数程序来说,这些常用字已经足够了。

2、会存在一定的垃圾字符串。
有部分垃圾字符串的组合编码会与 GB2312 简体中文汉字和图形符号的码位范围落在同一个区间内,这样就会导致识别错误。不过这是很难避免的,其实 W32Dasm 也存在同样的问题。

[ToDo]
对生成的串式参考字符串进行搜索。

[联系方式]
姓名:罗聪
主页:http://www.luocong.com
邮件:admin@luocong.com
2004-12-5 17:53
0
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
Ollydbg 中断方法

Quote:
Originally posted by dong at 2004-6-1 10:29 PM:
我问个问题
在od中怎么下断点呢??
现在有的程序一点注册就没反映了
这样的怎么下断点呢??
能介绍下什么情况下什么断点吗?
在转存中下硬件访问->Word"断点,下断之后,怎么取消!
9398944(老菜鸟) 11:09:59
alt+D 按H 然后删除

这个没有万能的方法,只能视具体情况而定,就我的经验而言:
第一步,反汇编找有用信息,有时候虽然点击注册按钮后,没有任何反映,但软件也许包含了可用的信息,比如“未注册”,“已注册”等等之类的,都可用做断点的。
第二步,如果反汇编也找不到有用信息,如果用OD可以下HMEMECPY断点,在每个调用的函数上下断,虽然这个法子太笨,但我试过,几乎有70%以上的机会可找到断点,找到断点后再慢慢跟吧!这只是个人的看法,关键只要找到断点,有什么办法都无所谓。
在命令行下bpx hmemcpy断点,然后回车,在每个调用的函数上下断。
有的程序甚至无法用API中断,可以在OD载入程序后上下翻动反汇编窗口查看字符串参考下断,在反汇编窗口里直接找到的,右键查找那里找不到

转发Ollydbg 中断方法浅探-各种断点常识知识

Ollydbg 中断方法浅探
??国庆节小礼

Ollydbg是一个新的32位的汇编层调试软件。适应于windows98、me、2000、xp和2003操作系统。由于他具有图形窗口界面,所以操作方便、直观,是cracker的好工具。
由于Ollydbg没有了TRW2000的万能断点,所以许多的新手感觉到用Ollydbg断点不好找。现在我来的说说Ollydbg下中断的几种方法。本人是个菜鸟,水平有限,可能不能完整的写出来,也可能存在错误。请大家指正。
我所表述的是Ollydbg v1.09d中文版,其他版本和英文版下自己参考。

第一 寻常断点
Ollydbg中一般下中断的方法,就是在程序的地址处用鼠标选择这一行。然后按F2键,这时被选择的那一行的地址会变成别的颜色,就表示这个地址处下了中断。然后运行程序时只有到这个地址处就会被Ollydbg中断。
这个方法用的比较多,所以把他称作寻常断点。
如果有命令行插件,就可以在命令窗口中输入BPX xxxxxxxx 下断点。
优点:只要自己怀疑是重要的代码处都可以下这种下断点,不受条件的限制,所以方便实用。
缺点:如果不知道代码功能下断点具有盲目性。

第二 API断点
Ollydbg中一般下API中断的方法,有二种。
1. 在代码窗口中点鼠标右键,出现功能菜单。在[搜索]选择项下有〔当前模块的名称〕和〔全部模块的名称〕俩项,选择其中的一项就打开了程序调用API的窗口,在这个窗口中选择你要跟踪的API函数名。双击这个函数就能到程序的调用地址处。然后用F2下中断。也可以在API窗口中选择需要跟踪的函数点鼠标右键出现功能菜单,选择〔在每个参考设置断点〕。同样下了断点。
快捷方式:Ctrl+N
2. 在命令行窗口中输入BPX API函数名或者BP API函数名 后回车。这时出现了所有调用这个函数的地址的窗口,在这个窗口中可以看到调用这个API函数的地址已改变了颜色。说明下好了断点。
说明一下:BPX一般中断在程序调用API的地址处。BP会中断在API的写入地址处。二这有所不同,根据需要选择。
优点:这种方法下的断点是针对每一个API函数的,所以具有明确的目的。
缺点:关键的API函数不容易找到。所以有时下的断点没有作用。

第三 内存断点(跟踪关键数据的断点)
Ollydbg中的内存断点相当于TRW中的bpm 断点。
下断点的方法是:在程序运行中断时选择界面中的转存窗口,用光标选择内存中的一段关键数据(颜色会改变),然后右击鼠标出现功能菜单。选择〔断点〕项,其中有二个选择〔内存访问〕和〔内存写入〕。
〔内存访问〕断点是程序运行时要调用被选择的内存数据时就会被Ollydbg中断,根据这个特点在破解跟踪时只要在关键数据内存中下中断就可以知道程序在什么地方和什么时候用到了跟踪的数据。对于一些复杂算法和流程变态的算法跟踪有很大的帮助。从破解上讲,一个注册码的生成一定是由一些关键数据或者原始数据计算来的。所以在内存中一定要用到这些关键数据。那么〔内存访问〕断点就是最好的中断方法。
〔内存写入〕断点是程序运行时向被选择的内存地址写入数据时就会被Ollydbg中断。根据这个特点在破解时可以跟踪一个关键数据是什么时候生成的,生成的代码段在那个地方。所以一个关键的数据如果不知道他的由来就可以用〔内存访问〕断点查找计算的核心。
内存中断的下断点还有另外的一种方法:程序运行时如果知道关键的数据,比如我们输入的试验码、程序生成的序列号等。这时在内存中一定存在这些数据。用Alt+M打开内存窗口,在这个窗口中搜索知道的关键数据。用光标选择这些数据同样下内存中断,这种方法更容易找的关键的数据。
优点:断点是直接面向关键数据的,所以比较容易到核心部分。
缺点:内存断点重新运行后会消失,干扰比较多。

第四 硬件断点(跟踪关键标志的断点)
硬件断点是Olldbg所特有的断点,他不会因为重新运行就销毁,只要不删除。跟踪这个程序时就有效。但他在98系统下会不起作用。
硬件断点是根据关键标志回逆到关键代码的好方法。下中断的方法和内存断点的方法相同,有三个方式〔硬件访问〕、〔硬件写入〕、〔硬件执行〕。一般用前2个。他也同样有内存断点的特性,所以可以用内存断点的地方也可以用硬件断点。这里介绍利用他来跟踪注册标志的使用方法,一般软件的注册都用到了标志比较。即在内存地址中有一个标志,在判断是不是注册时比较标志的值。不同的值表示不同的注册状态。这个标志的地址一般比较固定。根据这个特点可以下硬件断点来跟踪标志位是什么地方被标志的。
方法:在转存窗口中选择到标志存放的内存地址处,然后选择标志值。下〔硬件写入〕中断(根据标志的字节下不同的长度)。重新运行程序你会发现Ollydbg会不断的中断在这个标志的内存地址处。在功能菜单的〔调试〕选项下选择〔硬件断点〕就打开了硬件断点的窗口,在这个窗口中选择〔跟踪〕,这时转存窗口就会来到被下中断的内存地址处。运行程序跟踪内存地址中的值就会知道被赋标志的代码,跟踪到计算的核心。〔硬件访问〕的使用可以知道程序在运行时多少地方用到了这个注册标志。对于破解复杂效验的程序十分的有效。
直接在命令栏里下bh ****硬件断点

以上只是我的总结,本想每个方法用一段例子,无奈时间有限,请大家原谅了。
当然,还是许多的下中断的方法,本人水平有限,不能一一尽述。只当抛砖引玉,请大侠们赐教。

Fxyang
属于中国破解组织[OCN][BCG][FCG]
2003-10-1
2004-12-5 17:54
0
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
olldbg 下怎么下消息断点?

如在softice 中下 BMSG 0084 WM_DESTROY,在olldbg下该怎么做?

不如下断 SendMessage,PostMessage,程序中的消息不一定都经过消息循环。

Ollydbg下消息断点的一个方法

原文:
SoftIce can trace application messages. And Olly?
by FuZzYBiT

SoftIce can trace application messages. And Olly?
And so does OllyDbg. That’s a very “hidden feature”. I guess it is sooo useful.
1. Open program
2. Names window [CTRL+N in CPU Window]
3. Find User32.TranslateMessage API
4. right click/FindReferences
5. conditional breakpoint [SHIFT+F4]
6. expression: MSG
7. Log function arguments: Always
If you cannot find it, try right click SEARCH FOR-> ALL INTERMODULAR CALLS.
But if I want to trap a specific message like WM_COMMAND?
To Log Only WM_COMMAND
Do it in this fashion:
1. Open program
2. Names window [CTRL+N in CPU Window]
3. Find User32.TranslateMessage API
4. right click/FindReferences
5. conditional breakpoint [SHIFT+F4]
6. Condtion box: MSG==WM_COMMAND
7. Log function arguments: On Condition
If you can’t find User32.TranslateMessage API, do the same as above.

翻译:

SoftIce 能够跟踪应用程序的消息,那么OllyDbg呢?
by FuZzYBiT

OllyDbg也是可以的,那是一个非常"隐蔽的功能"。它是如此的有用。
1. 打开程序
2. 名字窗口[ 在CPU窗口中按CTRL+N ]
3. 查找 User32.TranslateMessage API
4. 右击/FindReferences(查找参考)
5. 下条件断点 [SHIFT+F4]
6. 表达式: MSG
7. 记录函数参数:永远

如果你不能找到它,试试右击鼠标,然后搜索全部模块中的名称。
但是如果我想要捕捉一个特定的消息如WM_COMMAND呢?
只对WM_COMMAND记录
用这个方法做:
1. 打开一个程序
2. 名字窗口[ 在CPU窗口中按CTRL+N ]
3. 查找 User32.TranslateMessage API
4. 右击/FindReferences(查找参考)
5. 下条件断点 [SHIFT+F4]
6. 条件框:MSG==WM_COMMAND
7. 记录函数参数: 条件满足时
如果你不能找到User32.TranslateMessage API,象上面那样做。

命令行插件支持的命令

CALC
判断表达式

WATCH
添加监视表达式

AT
在指定地址进行反汇编

FOLLOW
跟随命令

ORIG
反汇编于 EIP

DUMP
在指定地址进行转存

DA
转存为反汇编代码

DB
使用十六进制字节格式转存

DC
使用 ASCII 格式转存

DD
转存在堆栈格式

DU
转存在 UNICODE 格式

DW
使用十六进制字词格式转存

STK
前往堆栈中的地址

AS
(AS + 地址 + 字符串)
在指定地址进行汇编

BP
进行条件中断(有条件的断点)

BPX
中断在全部调用 (Call)

BPD
清除全部调用中的断点

BC
清除断点

MR
内存断点于访问时

MW
内存断点于写入时

MD
清除内存断点

HR
访问时进行硬件中断

HW
写入时进行硬件中断

HE
执行时进行硬件中断

HD
清除硬件断点

STOP
停止运行程序调试

PAUSE
暂停执行程序调试

RUN
运行程序进行调试

GE
运行和通过例外

SI
单步进入 Call 中

SO
步过 Call

TI
跟踪进入直到地址

TO
跟踪步过直到地址

TC
跟踪进入直到满足条件

TOC
跟踪步过直到满足条件

TR
运行直到返回

TU
运行直到用户代码

LOG
查看记录窗口

MOD
查看模块窗口

MEM
查看内存窗口

CPU
查看 CPU 窗口

CS
查看 Call 堆栈

BRK
查看断点窗口

OPT
打开选项设置窗口

EXIT
退出 OllyDbg

QUIT
退出 OllyDbg

OPEN
打开一个可执行文件

CLOSE
关闭可执行文件

RST
重新运行当前程序

HELP
查看 API 函数的帮助

OllyDbg 常用快捷热键
聆风听雨整理
===============================================================
打开一个新的可执行程序 (F3)

重新运行当前调试的程序 (Ctrl+F2)

当前调试的程序 (Alt+F2)

运行选定的程序进行调试 (F9)

暂时停止被调试程序的执行 (F12)

单步进入被调试程序的 Call 中 (F7)

步过被调试程序的 Call (F8)

跟入被调试程序的 Call 中 (Ctrl+F11)

跟踪时跳过被调试程序的 Call (Ctrl+F12)

执行直到返回 (Ctrl+F9)

显示记录窗口 (Alt+L)

显示模块窗口 (Alt+E)

显示内存窗口 (Alt+M)

显示 CPU 窗口 (Alt+C)

显示补丁窗口 (Ctrl+P)

显示呼叫堆栈 (Alt+K)

显示断点窗口 (Alt+B)

打开调试选项窗口 (Alt+O)

转OllyDbg实用技巧六则

标题: OllyDbg实用技巧六则

作者: dOSKEY lEE

关键词: OllyDbg、OD、技巧

1、让跳转路径显示出来

打开Options\Debugging Option。弹出Debugging Option对话框,选择CPU页,选定“Show direction to jumps”、“Show jump path”和“Show grayed path if jump is not taken”。如此以来在 Disassembler窗口就会显示跳转的路径了。

2、让OD显示MFC42.DLL中的函数

如果程序是用MFC进行的动态编译,那么在OD中将只能显示MFC42.DLL中的函数为:

00410E40 |. E8 43000000 CALL <JMP.&MFC42.#1576> 1576是函数在MFC42.DLL中的序号。打开Debug\Select import libraries,单击弹出的对话框中“Add”,在弹出的打开文件对话框中选择“MFC42.LIB”并打开,重新载入MFC程序,你就可以看见函数名称变为:

00410E40 |. E8 43000000 CALL <JMP.&MFC42.#1576_?AfxWinMain@@Y>

IDA中分析出了来的东西一样了!呵呵,以后不用等待IDA的“细嚼慢咽”也可以轻松搞定MFC程序了。其他的DLL类似,如果有序号,可以在VC的LIB目录中找到相关的.LIB文件,加到OD中便可。如果你没有“MFC42.DLL”,你可以的到看学论坛的下载区找,我已经上传到那里了。

3、让OD轻松躲过“ANTI-DEBUG”

很多“ANTI-DEBUG”的程序都是在程序开始时来检查是否安装调试器的。用这种特性我们可以轻松的用OD的“Attach”绕过检查部分。如“X语言”,如果你哟内TRW2K/S-ICE/OD 直接加载它的话,程序回警告你安装了调试器并结束。但是我们在“X语言”开启后再运行OD,并用“Attach”系上它就就可以了,轻松通过检查。而且在OD系上它后仍然可以用CTRL+A进行分析。如此一来,快哉!:)

4、轻松对付调用“MessageBoxA”以及类似的模态对话框的程序

很多人都认为OD不好拦截“MessageBoxA”这类API函数。其实我们有个很简单的办法将API拦截下来,并且快速找到比较地点/主算法地点。首先用OD加载目标程序,如果不能加载,用上面的方法“Attach”目标程序。然后,F9运行目标程序,并且有意让目标程序显示“ MessageBox”,然后切换到OD中,F12暂停,如

0041201F |> 53 PUSH EBX ; /Style
00412020 |. 57 PUSH EDI ; |Title
00412021 |. FF75 08 PUSH [ARG.1] ; |Text
00412024 |. FF75 F4 PUSH [LOCAL.3] ; |hOwner
00412027 |. FF15 A8534100 CALL DWORD PTR DS:[4153A8] ; \MessageBoxA
0041202D |. 85F6 TEST ESI, ESI ; 停在此处
0041202F |. 8BF8 MOV EDI, EAX
00412031 |. 74 05 JE SHORT 1551-CRA.00412038

F8单步一下,切换到“MessageBox”中,确认,被OD中断。我们可以看见上面的代码41201F处有一个“〉”,说明可以从某段代码跳转到此处,我们选择41201F这一行,在“Information”栏看见一句“JUMP FROM 412003”,右键单击,选择“GO TO JUMP FROM 412003”。回到412003,一般都是条件跳转,上面的内容就是比较的地方啦。:)

5、使用OD的TRACK功能

OD拥有强大的TRACK功能,在分析算法时十分有用。首先我们要设定OD的TRACK缓冲区大小,选择Option\Debugging Option,在弹出的对话框中选择TRACK页,“Size of run track buffer(byte/record)”,缓冲区大小,当然约大约好。其他的设置在我以前的OLLYDBG.INI中都已经设置好了。然后,开启目标程序,在DEBUG中选择“Open or clear run track”。然后我们就可以用CTRL+F11或CTRL+F12开启“Track into”和“Track over”了。当我们暂停程序的时候,可以用小键盘上的“+”,“-”,“*”来控制TRACK功能了。

“Track into”和运行类似,但是记录所有指令以及寄存器变化。并且会自动进入所有的CALL中。
“Track over”和“Track into”类似,但是不进入CALL
“+”用来显示TRACK缓冲区中的下一条指令
“-”用来显示TRACK缓冲区中的上一条指令
“*”用来发返回当前指令

6、不是技巧的技巧
当你遇到花指令的时候一定会很头痛。但是如果你用OD进行分析的时候就会轻松得多。OD会自动标识出无效指令,即花指令。如果OD没有正确识别,你还可以用CTRL+↑/↓来单个 字节的移动。可以很有效的识别出花指令的所在。

后记

本人脑袋不太好使,一时记不起所有内容,以后想起来再贴。转贴时请保持本文的完整。

--------------------------------------------------------------------------------

我想知道在OD中如何下地址断点
比如bpx 5022e2
是不是在命令行中?有其他办法没?
命令行在98下不能用

ctrl+g输入地址,F2下断

转Draren总结的ollydbg v1.09d 中文版使用说明

一点一滴的积累,也就会了.

之所以选择ollydbg

1.我的os是winXP,无法使用trw2000,而softice装了多次均未成功,还蓝屏死机多次.郁闷.

2.友好的gui界面,不像softice.可以边干活边听歌,不像softice,把整个os都挂起了.多用两次,连时间都不知道了.

3.强大的内存查看功能,再不用什么-d了,而且跳转方便,爽!一目了然.

4.强大的右键菜单功能

ollydbg的界面:

菜单:

文件:
1.其中包括该菜单的下部有上次打开的纪录,该纪录保存有上次未清除的断点.
2.附加.对付那些Anti-Debug程序.先运行程序,再运行od,文件-->附加.
查看:
1.执行模块(Alt+E),查看程序使用的动态链接库
2.查看断点.Alt+B
调试:
1.运行(F9)加载程序后,运行!
2.暂停(F12)
3.单步进入(F7)遇见CALL进入!进入该子程序.
4.单步跳过(F8)遇见CALL不进去!
5.执行到返回(ALT+F9)就是执行到该子程的返回语句

ollydbg的16进制编辑功能.类似与hiew,hex workshop

查看-->文件

二进制文件编辑功能.查看-->文件,打开的文件是二进制显示.选中要改变的机器指令,空格,修改,右击-->保存.

ollydbg的四个区域

左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值.
右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Eflag的值,对于寄存器,指令执行后发生改变的寄存器会用红色显示.
cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态. 不错;
左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息;
右下角的是当前堆栈情况,还有注释啊.

F3选择打开程序.

使用

F9执行程序.

下断点:

1.对函数下下断点

在代码区右击-->搜索-->当前模块中的名称(ctrl+N),在跳出来的对话框中选择需要下的断点函数.->右击->查找导入参考(enter),按F2下断点.如果有多个地方调用了该函数就这样操作。

2.在需要的地方下断点 F2

添加注释:

在代码区第四列,右击-->注释

查看内存地址

右击内存地址列-->前往-->输入要查看的内存地址

在函数lstrlen的注释的上方,有一个变量string,当执行到该函数的时候,string后面会出现lstrlen函数的参数字符串.在实际使用中一般是输入的字符串.(很好用哦)

类似的还有lstrcmp,上面有string1,string2能够显示将要比较的两个字符串.

另外,一般在执行getwindowtext等函数后,右边寄存器列,eax会显示函数的返回值,即取到的内容.同时内存中也会有显示.

在反汇编中选中一条命令,如果其中有用到内存中的地址,右击-->在转存中跟随-->直接常数
此时内存地址会显示指令中引用到的内存字符

拷贝功能十分强大.直接选择要拷贝的内容.右击-->复制-->文件or剪贴板

ollydbg的条件断点可以按寄存器,存储器,消息(必须是消息的数字,如wm_command就是111)等等设断,非常强大,一旦设了之后记录到文件中,下次restart程序还能用,不用拿笔记,很方便。

显示跳转路进:
选项-->调试设置-->cpu页-->显示跳转的方向,显示跳转的路径,如果跳转没有实现则显示灰色路径。在cpu窗口中,机器码的前面显示">"符号.同时,在cpu窗口下的小缝中会显示跳转路径,从何跳转而来.右击-->前往...一般都是条件跳转,上面的内容就是比较的地方啦。:)

跟踪功能:
选项-->调试跟踪-->跟踪:设置运行跟踪的缓存大小.越大越好.
调试-->打开或清除运行跟踪
然后我们就可以用CTRL+F11或CTRL+F12开启“跟踪进入”和“ 跟踪跳过”了。当我们暂停程序的时候,可以用小键盘上的“+”,“-”,“*”来控制跟踪功能了。
其中,“跟踪进入”和运行类似,但是记录所有指令以及寄存器变化。并且会自动进入所有的CALL中。
“ 跟踪跳过”和“跟踪进入”类似,但是不进入CALL
“+”用来显示跟踪缓冲区中的下一条指令
“-”用来显示跟踪缓冲区中的上一条指令
“*”用来发返回当前指令

让OD显示MFC42.DLL中的函数
打开调试-->选择导入库-->添加-->选择MFC43.LIB加入.重新载入MFC程序,就可以看到call后面的api函数了.

动态暂停以messagebox为例)
先运行目标程序,再运行od,选择文件-->附加.在目标程序运行出现对话框时,切换至od,F12暂停.

字符串参考:
在汇编代码区,右击-->搜索-->字符参考

更改二进制文件:

方法1.查看-->文件,打开文件,找到欲修改的偏移,使用机器码修改,然后右击保存文件.缺点是需要使用其他软件来获取偏移地址.

方法2.直接在反汇编代码区更改,这时可以使用汇编代码更改,不用记机器码.完了.右击-->复制到可执行文件-->保存文件.很是方便哪!

关于虚拟地址和偏移地址:
ollydbg果然强大,太强大了,在欲修改的指令处右击-->复制到可执行文件,弹出窗口中光标所在行即是欲修改的指令所在的偏移地址,右击-->汇编,直接修改汇编指令,不用记机器码,又不用虚拟地址到偏移地址的转换.改完后保存文件.爽丫!
2004-12-5 17:55
0
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
附件: OD脚本器简单使用说明.rar (748 K)
http://www.chinadfcg.com/attachment.php?aid=3363

: ollyscript v.081命令中文解说.rar (214.33 K)
http://www.chinadfcg.com/attachment.php?aid=3366

请问用ollydbg如何跟踪被跟踪进程的子进程

我在跟踪一个程序的时候,它用CreatProgressA产生了一个子进程,然后关闭父进程,请问我如何在子进程的入口处下断?请高手指教!
指令为:
00454476 50 PUSH EAX
00454477 6A 00 PUSH 0
00454479 E8 C218FBFF CALL kernel32.CreateProcessA

00454479处堆栈内容如下:
0012FD40 00000000 |ModuleFileName = NULL
0012FD44 00956B94 |CommandLine = "C:\QXJDGL\QXJDGL.DLL 2"
0012FD48 00000000 |pProcessSecurity = NULL
0012FD4C 00000000 |pThreadSecurity = NULL
0012FD50 00000000 |InheritHandles = FALSE
0012FD54 00000020 |CreationFlags = NORMAL_PRIORITY_CLASS
0012FD58 00000000 |pEnvironment = NULL
0012FD5C 00000000 |CurrentDir = NULL
0012FD60 0012FD84 |pStartupInfo = 0012FD84
0012FD64 0012FD74 \pProcessInfo = 0012FD74

飞叶流枫回答:
C:\QXJDGL\QXJDGL.DLL 2,这个程序是一个EXE程序,你可以改入口点为INT 3,也就是CCh,将OD设为最终异常处理程序。当程序启动的时候会产生一个INT 3非法操作,你点调试就可以中断在QXJDGL.DLL中了

目前世界上最好最全的OllyDBG破解专题资料站!
我特意奉献给各位,这个站从不同的保护方式破文,以及不同的密码学方式破文都整理分类好的,十分方便查阅!相信这个站的站长应该是牛人一个了。很多教学都是PDF格式,看样子他本人全看完了。

http://freehost10.websamba.com/JoePage/

OllyDbg 消息格式串处理 存在执行任意指令的漏洞
www.rising.com.cn 2004-7-22 15:05:00 信息源:瑞星编译

广告

受影响系统:

OllyDbg OllyDbg 1.10
OllyDbg OllyDbg 1.09
OllyDbg OllyDbg 1.08b
OllyDbg OllyDbg 1.06

详细描述:

OllyDbg是一个32位汇编级的直观的分析调试器。OllyDbg在处理调式包含格式串的消息时存在问题,被跟踪的应用程序可以使OllyDbg崩溃,或可能以进程权限执行任意指令。

OllyDbg跟踪一进程并允许用户自定义会话,如是否跟踪或设置断点等。其中OutputDebugString函数可发送字符串到调试器上,然后OllyDbg会在底端显相关状态消息,但是如果包含格式串消息,就可能使OllyDbg崩溃。精心构建提交数据可能以进程权限在系统上执行任意指令。

目前厂商还没有提供补丁或者升级程序。

大家在用它调试时,小心针对这个BUG的恶意程序了。

ollydbg 出了一个最新的插件!
主要是提供分析作用的,如资源,进程,比如什么东西加壳,最最大的好处,我可能想到了,分析多层壳,绝对是非常有用的。IDA signature loader 也非常有用。这样能为动态提供静态分析的优点。Map loader 没用过。 Notepad 记事用的,感觉作用不大。如果能写个SOFTICE的Notepad ,那就很好了。
http://ollydbg.win32asmcommunity.ne...rum=2&topic=841

GODUP - Godfather+ Olly Debugger Universal Plug-in
ver. 1.0

This plug-in consist of 5 handy tools:

1. Map loader
2. Resource viewer
3. Process info
4. IDA signature loader
5. Notepad

1. Map loader - use it for loading map files produced by compiler or by
IDA. You can use it to load label names and/or to load comments from .map file.
There is no any checking if map file match currently debugged process.

2. Resource viewer - use it for looking to your resources ;-) This is
probably only viewer which works through direct memory access - means that you
can even look to resources of compressed (protected) executables.
NOTE: Still in experimental phase.

3. Process info - Give you basic information about process + try to
recognize compiler and protection mechanism. . Process info use signature file
signs.txt from PE tools v1.5 (NEOx, .Cryorb) Fell free to add your own
signatures and share it with us.

4. IDA signature loader - probably mostly wanted add on for Olly debugger -
now you can use IDA signature without IDA ;-) Just look to process info - find
your compiler and select and apply matching IDA signature. It's not problem if
you apply wrong one, you can apply another also. Only what you must do is to set
proper path to IDA signatures, and you need sigdump.exe file from IDA resource
kit.

5. Notepad - Simple but smart notepad which load your notes per process
automatically every time.

http://bbs.pediy.com/upload/files/GODUP V1.0.rar_32543.rar
2004-12-5 17:55
0
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
转贴:OllyDbg消息格式串处理 有执行任意指令漏洞
原文地址:
http://db.kingsoft.com/c/2004/07/22/124160.shtml

原文转载:
OllyDbg消息格式串处理 有执行任意指令漏洞
http://db.kingsoft.com 毒霸信息安全 2004年07月22日 15:52 金山毒霸编译

  OllyDbg是一个32位汇编级的直观的分析调试器。OllyDbg在处理调式包含格式串的消息时存在问题,被跟踪的应用程序可以使OllyDbg崩溃,或可能以进程权限执行任意指令。

  OllyDbg跟踪一进程并允许用户自定义会话,如是否跟踪或设置断点等。其中OutputDebugString函数可发送字符串到调试器上,然后OllyDbg会在底端显相关状态消息,但是如果包含格式串消息,就可能使OllyDbg崩溃。精心构建提交数据可能以进程权限在系统上执行任意指令。

  受影响系统:

  OllyDbg OllyDbg 1.10

  OllyDbg OllyDbg 1.09

  OllyDbg OllyDbg 1.08b

  OllyDbg OllyDbg 1.06

  解决方案:

  目前厂商还没有提供补丁或者升级程序。

OllyScript V0.85 + 脚本大全
不用介绍了吧

点击下载:附件!http://bbs.pediy.com/upload/files/1085978513.rar

问:
我不知道怎么才能表达我对fly的谢意,我已经下载到了

我把解压缩以后的文件复制到OllyDbg目录下但是插件选项目里依然没有出现新的项目,把目录指向OllyDbg\OllyScripts依然没有提示,这里要怎么设置?还请指教

fly答:把OllyScript0.85.dll放到你的OD 插件目录 下
脱壳时选择 插件->OllyScript->Run Script
然后选择相应的Script
2004-12-5 17:56
0
雪    币: 296
活跃值: (250)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
11
辛苦了,支持
2004-12-5 18:12
0
雪    币: 212
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
这个是好东西:D
2004-12-5 19:12
0
雪    币: 768
活跃值: (530)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
13
狂顶
2004-12-5 19:35
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
如何在OllyDbg下设消息断点了
首先运行一个程序,打开"窗口"界面,选择所调试程序的主窗口,右键.选择"消息断点在 ClassProc",然后在列表中选一个需要的消息(如:WM_RBUTTONDOWN),下面的选项选择"中断在相同标题的窗口",然后确定就可以了.现在在窗口上点一下右键试试看吧...

以上这段代码说的功能,我怎么没有在OLLYDBG中找到啊,楼主能否贴个图出来说明一下,谢谢!!
2004-12-5 23:38
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
请楼主能否把文章打包在一起放上来 ,方便大家下载回去,慢慢研究!!
2004-12-6 00:17
0
雪    币: 247
活跃值: (135)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
OD我用了几个版本,它们有很多地方是不同的,比如有的有“插件”这一菜单栏有的就没有。
贴图的话,我现在在网吧不方便贴,2个星期后贴出来。

文章的话,我会打包的。

那也要2个星期了。
对不住各位了。
不好意思
2004-12-6 17:17
0
雪    币: 221
活跃值: (100)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
17
支持,
2005-10-7 10:09
0
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
18
好细心哦,真会替人着想,支持一下。OD-FAQ!

2005-10-7 11:23
0
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
晕啊。。
支持一下,楼主辛苦了

不过要是能做成chm文档提供下载就更好了。呵呵,这样子看着太累也不便于查找
2005-10-7 13:36
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
灌水有了新方向
2005-10-7 14:37
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
21
最初由 phoenix[ne] 发布
OD我用了几个版本,它们有很多地方是不同的,比如有的有“插件”这一菜单栏有的就没有

........


先设置插件路径...
2005-10-7 19:47
0
雪    币: 300
活跃值: (412)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
22
辛苦了,收藏学习
2005-10-7 20:20
0
雪    币: 251
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
支持楼主

2005-10-7 21:31
0
雪    币: 219
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
楼主文章中网页都打不开
2005-10-7 23:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
好东东ksafsdf
2005-12-15 00:13
0
游客
登录 | 注册 方可回帖
返回
//