首页
社区
课程
招聘
12月7日升级――OllyMachine v0.20最终版
发表于: 2004-11-15 20:37 66781

12月7日升级――OllyMachine v0.20最终版

2004-11-15 20:37
66781
收藏
免费 1
支持
分享
最新回复 (244)
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
151
我刚才跟踪了一下,是一个bug――在编译阶段计算jmp OpenMutexA的长度出错了,sorry!明天、最迟后天请来看看,0.17版里面会对内嵌汇编进行大规模的修正的。:)
2004-11-28 21:45
0
雪    币: 2199
活跃值: (1975)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
152
呵呵,不急。
另外:OM中的esto 没有作用。
2004-11-28 21:56
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
153
最初由 fxyang 发布
呵呵,不急。
另外:OM中的esto 没有作用。


esto不起作用的意思是……?无法运行,还是无法被中断下来?如果是后者的话,能不能上传你的调试程序以及脚本,以方便我进行查错?或者发e-mail给我可以吗?我的e-mail是 admin@luocong.com
2004-11-28 22:05
0
雪    币: 2199
活跃值: (1975)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
154
我调试的程序是Armadillo 3.76版主程序,OM如下:
HideOD

EOE exception1  
invoke GetProcAddress, "OpenMutexA","kernel32.dll"
mov reg01,reg00
invoke bp reg01
eob II2I
run

exception1:  //异常处理
esto         //相当于Shift+F9,应该越过这个异常

II2I:
__asm
{
   PUSHAD
   PUSH EDX
   push 0
   push 0
   CALL CreateMutexA
   POPAD
   jmp OpenMutexA
}
//完成双进程到单进程的转换
invoke bc reg01

但是异常发生后停在异常代码处,并没有和执行了Shift+F9一样越过了这个异常,而是停止了。
请老罗检查看看
2004-11-28 22:30
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
155
奇怪了,我自己找了个aspr的试了一下,esto是可以越过去的。

我用了这个作为试验:
http://www.allerasoft.com/products/systemcleaner

用了你贴在上面的脚本,虽然是被调试的对象是不匹配的,但是遇到了exception之后的确是能够通过esto越过去的。

我现在再去找个Armadillo 3.76试试...
2004-11-28 23:14
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
156
Armadillo 3.76没下到,下了个3.78的...

经过测试,前面两个exception是可以通过esto越过去的,但是从第三个开始就不行了。 :(

不知道fxyang兄遇到的是不是同样的情况?请留个言,以便我进行修正。
2004-11-28 23:18
0
雪    币: 2199
活跃值: (1975)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
157
同样的问题,第三个异常停了。
2004-11-29 08:40
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
158
改了几个小时,重写了内嵌汇编模块,用fxyang的那个脚本测试了一下Armadillo 3.78的主程序,脚本狂跑了一段时间,最后停在了OpenMuteA处:

7C80EC1B > 8BFF MOV EDI,EDI
7C80EC1D 55 PUSH EBP
7C80EC1E 8BEC MOV EBP,ESP
7C80EC20 51 PUSH ECX
7C80EC21 51 PUSH ECX
7C80EC22 837D 10 00 CMP DWORD PTR SS:[EBP+10],0
7C80EC26 56 PUSH ESI
7C80EC27 0F84 7A500300 JE kernel32.7C843CA7
7C80EC2D 64:A1 18000000 MOV EAX,DWORD PTR FS:[18]
7C80EC33 FF75 10 PUSH DWORD PTR SS:[EBP+10]
7C80EC36 8DB0 F80B0000 LEA ESI,DWORD PTR DS:[EAX+BF8]
7C80EC3C 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
7C80EC3F 50 PUSH EAX
7C80EC40 FF15 8C10807C CALL DWORD PTR DS:[<&ntdll.RtlInitAnsiSt>; ntdll.RtlInitAnsiString
7C80EC46 6A 00 PUSH 0
7C80EC48 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
7C80EC4B 50 PUSH EAX
7C80EC4C 56 PUSH ESI
7C80EC4D FF15 8810807C CALL DWORD PTR DS:[<&ntdll.RtlAnsiString>; ntdll.RtlAnsiStringToUnicodeString
7C80EC53 85C0 TEST EAX,EAX
7C80EC55 0F8C 36500300 JL kernel32.7C843C91


不知道正不正确?
2004-11-29 18:04
0
雪    币: 82
活跃值: (321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
159
在OllyScript V0.92中可以
我可以用使用
  findop eip, #00C3#命令
来查找并在0040D3BA处设断
  0040D3BA    68 CC104000         PUSH NOTEPAD.004010CC
  0040D3BF    C3                  RETN
OllyMachine V0.16中的
  invoke FindOpcode, eip, 0x00C3
好像不可以似的?
添加一个OM的CHM帮助文件,查找API是可以用Ctrl+F
附件:OM_Help.zip
2004-11-29 18:04
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
160
最初由 Aaah 发布
在OllyScript V0.92中可以
我可以用使用
findop eip, #00C3#命令
来查找并在0040D3BA处设断
0040D3BA 68 CC104000 PUSH NOTEPAD.004010CC
........


嗯,这种情况要用 invoke Search, eip, "00C3",试试看?
2004-11-29 18:07
0
雪    币: 557
活跃值: (2303)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
161
建议在om中加个kill SetUnhandledExceptionFilter:p
2004-11-29 18:14
0
雪    币: 82
活跃值: (321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
162
最初由 luocong 发布


嗯,这种情况要用 invoke Search, eip, "00C3",试试看?

晕死
谢谢老罗
没有发现那个API,那么近:(
可是他也没有达到我的预期效果:(
他会断在两个指令之间
那样断点就没有生效
而OllyScript会断在之前的命令上
OM中如何作?
add reg00,1
试了好像不行?
2004-11-29 18:46
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
163
最初由 loveboom 发布
建议在om中加个kill SetUnhandledExceptionFilter:p


OK:p
2004-11-29 18:48
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
164
最初由 Aaah 发布

晕死
谢谢老罗
没有发现那个API,那么近:(
可是他也没有达到我的预期效果:(
........


invoke Search, eip, "00C3"
invoke GetPrevOpAddr, reg00, 1
invoke bp, reg00
2004-11-29 18:51
0
雪    币: 228
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
165
老罗,升级好快哦。:) :) :)
2004-11-29 18:59
0
雪    币: 2199
活跃值: (1975)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
166
最初由 luocong 发布
改了几个小时,重写了内嵌汇编模块,用fxyang的那个脚本测试了一下Armadillo 3.78的主程序,脚本狂跑了一段时间,最后停在了OpenMuteA处:



不知道正不正确?


应该是正确的,感谢!
2004-11-29 19:12
0
雪    币: 82
活跃值: (321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
167
最初由 luocong 发布


invoke Search, eip, "00C3"
invoke GetPrevOpAddr, reg00, 1
invoke bp, reg00

谢谢老罗
我还是好好看看帮助吧
2004-11-29 20:15
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
168
OllyMachine 0.17版发布。

地址: http://www.luocong.com/om

更新如下:

1. 修正:内嵌汇编功能,我重写了内嵌汇编的词法和语法分析器,修正了几个bug。(感谢fxyang)
2. 修正:以前的版本中,OllyMachine.ini会保留在OllyDbg的主目录下,现在修正为放在OllyMachine.dll的同一目录下。(感谢stephenteh)
3. 修正:对处理异常的同步错误。(感谢fxyang)

另外新增了monkeycz的两个对易语言的处理脚本到examples里面去。
2004-11-29 20:54
0
雪    币: 2199
活跃值: (1975)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
169
老罗看看,怎么内嵌汇编代码到了kernel32.dll中:
77EB6FE5    52              PUSH EDX
77EB6FE6    68 00000000     PUSH 0
77EB6FEB    68 00000000     PUSH 0
77EB6FF0    E8 2346FAFF     CALL kernel32.CreateMutexA
77EB6FF5    61              POPAD
77EB6FF6  ^ E9 ECB2FAFF     JMP kernel32.OpenMutexA
77EB6FFB  ^ E9 E7B2FAFF     JMP kernel32.OpenMutexA

没有运行成功
2004-11-29 21:27
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
170
最初由 fxyang 发布
老罗看看,怎么内嵌汇编代码到了kernel32.dll中:
77EB6FE5 52 PUSH EDX
77EB6FE6 68 00000000 PUSH 0
77EB6FEB 68 00000000 PUSH 0
77EB6FF0 E8 2346FAFF CALL kernel32.CreateMutexA
........


没错,这是我实现的方式,我把内嵌汇编写到了当前调试进程的代码最末尾,执行完之后再恢复原来的那些被覆盖的字节;而OllyScript则是用VirtualAllocEx()新开了一段内存。

关于你说的这个现象,可以先在OllyDbg的Debug菜单下按Pause,暂停OD,然后再按一下F8,让脚本的最后一句执行完毕,原来的字节就会被恢复的了。
2004-11-29 21:49
0
雪    币: 133
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
171
晕,老罗的网站我怎么打不开?
2004-11-29 22:03
0
雪    币: 2199
活跃值: (1975)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
172
现在的问题是pause后,按一次f8代码就变成了:
77EB6FE5    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FE7    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FE9    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FEB    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FED    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FEF    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FF1    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FF3    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FF5    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FF7    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FF9    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FFB    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FFD    0000            ADD BYTE PTR DS:[EAX],AL
77EB6FFF    00              ???                                      ; 命令交叉到内存块尾部

代码不见了:(
2004-11-29 22:06
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
173
最初由 fxyang 发布
现在的问题是pause后,按一次f8代码就变成了:
77EB6FE5 0000 ADD BYTE PTR DS:[EAX],AL
77EB6FE7 0000 ADD BYTE PTR DS:[EAX],AL
77EB6FE9 0000 ADD BYTE PTR DS:[EAX],AL
77EB6FEB 0000 ADD BYTE PTR DS:[EAX],AL
........


我刚才特意用OllyScript翻译了一次你的脚本,运行结果:

01B20000 60 PUSHAD
01B20001 52 PUSH EDX
01B20002 68 00000000 PUSH 0
01B20007 68 00000000 PUSH 0
01B2000C E8 2EEBCE7A CALL kernel32.CreateMutexA
01B20011 61 POPAD
01B20012 -E9 04ECCE7A JMP kernel32.OpenMutexA
01B20017 -E9 FFEBCE7A JMP kernel32.OpenMutexA


在OllyScript里面也是死循环了,停止不了。然后我是用OD的Debug菜单Pause下来的,结果就停在上面的这段地方了。注意它的地址:01B200000,这个地址很高/也可能会很低(根据当时的内存分配来决定),说明了OllyScript很可能每次遇到了内嵌汇编,都会重新申请一块新的内存来运行之,好浪费内存啊……而且会产生大量的内存碎片(因此我没有采用它这种做法)。

你可以试试用小键盘的“-”号返回几次看看能不能返回到正确的地方?由于我对破解不熟,只好麻烦你帮我一起找找bug了,谢谢。:)
2004-11-29 22:21
0
雪    币: 1583
活跃值: (831)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
174
最初由 Phoenix 发布
晕,老罗的网站我怎么打不开?


那个破空间经常这样...
2004-11-29 22:22
0
雪    币: 133
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
175
晕。。。。。。
2004-11-29 22:25
0
游客
登录 | 注册 方可回帖
返回
//