首页
社区
课程
招聘
OllyMachine问答与技巧集
2004-12-1 19:52 21580

OllyMachine问答与技巧集

2004-12-1 19:52
21580
收藏
点赞1
打赏
分享
最新回复 (64)
雪    币: 319
活跃值: (2304)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2004-12-3 11:30
26
0
昨天打印了手册学习了一下,感觉功能上比OS强。只是还一时没适应过来。因为用OS形成了一种习惯。
雪    币: 319
活跃值: (2304)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2004-12-3 12:44
27
0
写了个记录异常次数的脚本,但执行后出现问题:
HideOD
run
aman:
eoe aman
invoke loglong,reg00
inc reg00
esto
halt

执行后在OD的LOG里看到reg00的值除了第一次记录为1,其他的记录全为00000002。无法实现++。请laoluo指教。

已解决。原来不能使用reg00的,改用reg01就可以了:D
雪    币: 1593
活跃值: (726)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
luocong 9 2004-12-3 13:23
28
0
应该尽量避免使用reg00,因为reg00是用来储存API的返回值的:p
雪    币: 319
活跃值: (2304)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2004-12-3 13:28
29
0
ReadMemLong读取在address地址处的len个字节数据,并且储存在寄存器reg00中返回。
len 只能在1~4之间,小于1的话会被设置为1,大于4的话会被设置为4。

4个字节太小了。能不能增加?
雪    币: 1593
活跃值: (726)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
luocong 9 2004-12-3 13:29
30
0
最初由 csjwaman 发布
ReadMemLong读取在address地址处的len个字节数据,并且储存在寄存器reg00中返回。
len 只能在1~4之间,小于1的话会被设置为1,大于4的话会被设置为4。

4个字节太小了。能不能增加?


已经在0.20版中新增了一条API来完成这个功能,请稍微等待几天...
雪    币: 381
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
askformore 18 2004-12-3 15:05
31
0
呵呵,我曾经有个班长叫 “x 钜聪”,很投缘的,经常有他说没我说的。不是广州人,佛山人罢了,不过都是人,不是吗:D

至于LoadFileInMem,应该申请与请求的文件一样大小,希望没有文件句柄的烦脑,一般来说不会需要太多的内存,反正如 hex编辑器一样加载文件就行了,可以考虑加入撤消此“块”的 API,但不加入也行的,反正都作“间接”应用!

我都说了,大家可以发表意见嘛!:D
雪    币: 1593
活跃值: (726)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
luocong 9 2004-12-3 15:30
32
0
那好,增加一个API用来load一个文件进内存,然后返回该内存的首地址吧。我有不少同学在佛山、南海,有时间去佛山的话找你玩。
雪    币: 2909
活跃值: (3462)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 5 2004-12-3 16:31
33
0
把0.19的手册打印了一份,把整理的DOC放上来。嘿嘿。附件:OllyMachine.rar
雪    币: 1593
活跃值: (726)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
luocong 9 2004-12-3 16:36
34
0
最初由 china 发布
把0.19的手册打印了一份,把整理的DOC放上来。嘿嘿。附件:OllyMachine.rar


非常感谢!:D
哇,我现在才知道原来有86页那么多!
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
monkeycz 11 2004-12-3 17:22
35
0
我也打印了,不过不是80多页,而是100多页:)

拿起来厚厚的一沓,一个牛皮档案袋刚好装下。

当时打印的时候我看那个负责打印机的人脸都绿了~~~~~~~~~~~
雪    币: 1593
活跃值: (726)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
luocong 9 2004-12-3 17:54
36
0
问:如何在OllyMachine中使用间接寻址?也就是 [ ] 这种类型的寻址方式?
答:目前OllyMachine不支持间接寻址,例如 mov  reg00, [reg01] 是不允许的,但是我们可以用一些小技巧来实现它:

// 先保存eax和ebx的值,因为我们要用它们来作中介
push eax
push ebx

mov eax, reg01
__asm
{
mov ebx, [eax]
}
mov reg00, ebx

// 恢复eax和ebx的值
pop ebx
pop eax


原理:在嵌入汇编中是支持间接寻址的,所以可以利用嵌入汇编来间接地完成这个功能。我们可以把这个功能写成一个单独的文件,然后在需要用到的时候include该文件就可以了。
雪    币: 319
活跃值: (2304)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2004-12-3 18:01
37
0
可是这很烦呀!最好能实现间接寻址:D
雪    币: 319
活跃值: (2304)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2004-12-3 22:28
38
0
1、OS脚本和OM脚本的MSG区别:
OS:msg "请先设置忽略除INT3外的所有异常,同时忽略0EEDFADF和C0000008异常!"/////运行脚本后,可以对OD进行设置,然后点确定脚本会继续执行。

OM:invoke msg,"请先设置忽略除INT3外的所有异常,同时忽略0EEDFADF和C0000008异常!"/////运行脚本后,无法对OD进行设置,OD被锁定。

能不能不锁定?

2、invoke msg,"已DUMP在c:\test.exe。请重新载入用另一脚本修复IAT。"

运行后其中的\不能完整显示。
雪    币: 1593
活跃值: (726)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
luocong 9 2004-12-4 00:05
39
0
最初由 csjwaman 发布
1、OS脚本和OM脚本的MSG区别:
OS:msg "请先设置忽略除INT3外的所有异常,同时忽略0EEDFADF和C0000008异常!"/////运行脚本后,可以对OD进行设置,然后点确定脚本会继续执行。

OM:invoke msg,"请先设置忽略除INT3外的所有异常,同时忽略0EEDFADF和C0000008异常!"/////运行脚本后,无法对OD进行设置,OD被锁定。

能不能不锁定?

2、invoke msg,"已DUMP在c:\test.exe。请重新载入用另一脚本修复IAT。"

运行后其中的\不能完整显示。


1、Sorry,我没看明白……
2、你用的是哪个版本的OM呢?“\”的问题确实曾经在某个版本中存在过,但0.19版应该已经没有这个bug的了。
雪    币: 319
活跃值: (2304)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 24 2004-12-4 08:07
40
0
1、我的意思是在OS中调用MSG后,仍然可以激活OD窗口,对OD进行设置。而OM中调用MSG后,就无法激活OD窗口,返回到OD中进行设置了。
2、我用的是0.19的。
压缩包内是图片。附件:a.rar
雪    币: 381
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
askformore 18 2004-12-4 10:19
41
0
忘记 了,那个load API 应该还要提供 size 的返回值,不然我们的文件头指针运算该移到什么地方才是见底:)

我觉得 asm{}
用我说过的 “特殊标识”理论上应该可行,而且是为 以后实现标签功能作准备的,引用你的话,大概意思“用户的汇编指令组织是千奇百怪的”,你所说的逻辑也有可能被拖跨,比如:
asm
{
xor eax,eax
mov ebx,eax
jmp kernel32.GetProAddress
jmp kernel32.GetProAddress //实际不是 jmp 指令也会有同样的效果
}

这样来,你的虚拟机也逻辑上不好实现,责任不知归谁,有 特殊标识 ,虚拟机只要在 标识指令(最后那个指令地址) 上设断点,断点生效时,再一个 F8 单步,就不是完事,如果不行,就说明用户安排的出口指令不合理!

还有的是如果日后支持 标签,大家会愿意写的篇幅会较长,在 标签 间跳来跳去,不像现在那样顺序乖乘地...

最后,理论归理论,实际还是实际,现实还是现实...:D
雪    币: 1593
活跃值: (726)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
luocong 9 2004-12-4 11:58
42
0
最初由 csjwaman 发布
1、我的意思是在OS中调用MSG后,仍然可以激活OD窗口,对OD进行设置。而OM中调用MSG后,就无法激活OD窗口,返回到OD中进行设置了。
2、我用的是0.19的。
压缩包内是图片。附件:a.rar


1、那是因为OllyMachine中的MSG用了模态窗口,我传给MessageBox()的窗口句柄是OllyDbg本身的窗口句柄,所以就不能切换了。

2、请等我到星期一有条件再调试,现在周末我在家中,连个VC都没装……
雪    币: 1593
活跃值: (726)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
luocong 9 2004-12-4 12:01
43
0
to askformore:

你说的两点我都明白了。你的建议总是一些我想不到的、可以引发我思考的东西,非常感谢!:D
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ljy3282393 1 2004-12-4 20:05
44
0
老罗:你答应我的增加“辅助破解”这一个功能,可现在OM的版本更新了n次也没见增加啊!期盼中......
雪    币: 1593
活跃值: (726)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
luocong 9 2004-12-4 22:25
45
0
最初由 ljy3282393 发布
老罗:你答应我的增加“辅助破解”这一个功能,可现在OM的版本更新了n次也没见增加啊!期盼中......


有一个版本中新增了GetProcBegin、GetProcEnd、GetPrevProc和GetNextProc,就是用来完成你上次所说的那个功能的啊……但不知道是否实用。
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ljy3282393 1 2004-12-4 23:00
46
0
最初由 luocong 发布


有一个版本中新增了GetProcBegin、GetProcEnd、GetPrevProc和GetNextProc,就是用来完成你上次所说的那个功能的啊……但不知道是否实用。

能否随便举一个例子来说明应该如何使用?谢谢!
雪    币: 199
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
playar 2004-12-6 00:52
47
0
4.5.9  InputHexLong
把用户输入的数值储存在reg00中。
如果用户按了CANCEL,则reg00的值为value原来的值。

这样的设计不好吧,如果输入值和原来reg00里的值相同,则应该如何判断是否输入数据?
雪    币: 199
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
playar 2004-12-6 01:01
48
0
另外有些东西,我觉得统一一下比较好
譬如mov,参数顺序是 dest, src
而有些函数的参数顺序确实src,dest...
雪    币: 381
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
askformore 18 2004-12-6 11:06
49
0
鉴于 china 的要求 “索要成品”,其实多属于这类情况,原因比较简单,这类人不喜欢劳动或是我后者所述的,出于作者文章所写所贴的关键代码是 以 汇编指令 放出来,而不是机器码串,所以他们不会愿意将 汇编指令 一条一条地 去录回到 调试器上(数量比较多或利害)再保存,那是不现实的事。如果成品很大,上传那也是很不现实的...

其实 我上传也有不便之处。记得,早段日子,我曾经提过 [建议] 一个插件,现在好像到流放到了编辑开发论坛,其目的就是能够让大家,可以在 自己 拥有同样的 对象,假设是 exe 对象,利用 OD [建议的] 插件,就可以将文章放出的 汇编指令代码 进行 一次在目的地址的 批量的 静态汇编 到 对象,从而我们还能够将成功的 批量汇编 的代码 另存为一个副本 机器码文件,永久享用。

    所以,这里我想向 luocong 兄弟建议增加一个 API,批量静态汇编,类似 BatAsmInAddress 或者 BatAsmInMem,原形大概定义为这样:

BatAsmInAddress,address
{
……
}

举例:
BatAsmInAddress,address //假设现在address=643210
{
xor eax,eax
push ebx
push ecx
call 401000
je 402345
push 456780
ret
……
}

功能大概说明:
    插件会 从 BatAsmInAddress API 的 address 参数指定的地址处开始,进行 批量汇编 “{}”所狼括的汇编指令,当然其实它内部是一条一条指令地去汇编,倘若遇到不能汇编的指令,就会返回-1的错误到reg00,并发出一个窗口消息指出是出错于第 n 条指令,终止继续汇编;否则全部成功汇编的,就返回值为 1。

之所以详述一番,希望能够为插件的发展 减少麻烦

    当然,至于处理“挑选汇编代码”的功能,不太合适加到插件中,我正尝试写这个处理的小程序,我可是一点编程也不会的,只能试着去抄 别人的编程例子,看看能不能东抄西凑到成功,正在进行中...不知能否成功!

//playar:

另外有些东西,我觉得统一一下比较好
譬如mov,参数顺序是 dest, src
而有些函数的参数顺序确实src,dest...


是会有的,但不大要紧,何况作者是业余开发的,不过是作者保持 兼容版本脚本的原则,与 OS 的发展是刚好反的...
雪    币: 282
活跃值: (233)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
wangli_com 5 2004-12-6 14:25
50
0
如何修改标志位啊?
游客
登录 | 注册 方可回帖
返回