|
12月7日升级――OllyMachine v0.20最终版
感谢askformore提供那么多的改良建议!我来解释一下: 1. 有些API的返回值如果用0来表示错误的话,是不够严谨的。我举个例子: invoke ReadMemLong, eip, 4 有可能读到的数据本身就是0,这时如果用0来表示错误的话,那么就是一个bug了。但诚如你所说的,用0是最方便的,不过既然现在已经用-1了,那就不改了,否则以前别人写过的一些脚本可能就出错了。 2. 这个建议非常好,我会新增一个API来实现这个功能。 3. 对一般的应用来说的确是没用的,但它有个特殊的用处,是用在虚拟机内部的:我在OllyMachine的指令集里面,把NOP指令的opcode设置为0,这意味着如果虚拟机遇到了特殊的情况(比如异常)导致跑“飞”了,而跑飞的地方的数据是0(这是很有可能的),那么虚拟机会认为这个地方是NOP,从而可以继续运行下去,只不过是多浪费一个指令周期而已。 4. Find和Search还是有区别的,区别在于: Search与Find的不同之处在于,Search并不会从一个合法的Opcode的起始地址开始搜寻。 例如: 004010DC 55 PUSH EBP 如果用invoke Find, eip, "EC6AFF",那么不会找到,返回-1; 如果用invoke Search, eip, "EC6AFF",那么会返回004010DE。 5. 1、在0.17版里面,我重写了内嵌汇编的词法和语法分析器,上面所提到的push这条指令没有被检测出来,的确在0.16里面存在,但在0.17里面已经不会出现了。 2、内嵌不支持标签。我会在将来的版本中继续改进内嵌汇编的功能。 最后补充一句:有的时候也许会觉得OllyMachine的一些设计上存在很不可思议的地方,这很可能是历史遗留问题导致的,例如刚刚开始没有考虑到某种情况,然后在使用者的反馈下我决定新增某个功能... |
|
12月7日升级――OllyMachine v0.20最终版
真诚感谢fxyang!我先收藏你的研究结果,回头对比一下代码。 |
|
12月7日升级――OllyMachine v0.20最终版
最初由 loveboom 发布 很遗憾,这两点都无法实现。 其实都是习惯问题了。在TASM里面连invoke宏都没有呢,所有的API都要先一个一个参数进行push,最后才来一个call,大家也还是能接受的。 至于变量的命名,我只能抱歉地说一句:目前我没有时间去做。OllyScript能做到这一点,是因为它用了CArray,不分青红皂白就把所有的变量保存在一个数组里了,不区分类型,由于没有任何语义检查,所以起变量名这个功能它实现起来比较简单,但代价是: 1、不严谨。这是我最无法容忍的。例如对一个字符串进行inc操作居然是允许的。 2、浪费内存,速度慢。 3、维护有一定的困难。 但我必须承认,从使用者的角度来看,越傻瓜化越好,然而作为一个开发者,我还是希望我的源代码是严谨而高效并且易于维护的。如果我要实现起变量名这个功能,我是肯定要去做语义检查的,但我目前没那么多时间。 将来等我没心思再去维护它的时候,按照惯例我会开源的。 |
|
12月7日升级――OllyMachine v0.20最终版
最初由 loveboom 发布 很遗憾,不支持声明变量,暂时来说只能改变一下习惯了。 |
|
|
|
12月7日升级――OllyMachine v0.20最终版
最初由 fxyang 发布 请问如果是正确的话,应该是停在哪里?能不能贴那段反汇编代码出来?刚刚用OllyScript的脚本试了一下,按小键盘返回的第一个地方跟我的是一样的。附ODS的脚本: var aOpenMutexA |
|
|
|
12月7日升级――OllyMachine v0.20最终版
最初由 fxyang 发布 我刚才特意用OllyScript翻译了一次你的脚本,运行结果: 01B20000 60 PUSHAD 在OllyScript里面也是死循环了,停止不了。然后我是用OD的Debug菜单Pause下来的,结果就停在上面的这段地方了。注意它的地址:01B200000,这个地址很高/也可能会很低(根据当时的内存分配来决定),说明了OllyScript很可能每次遇到了内嵌汇编,都会重新申请一块新的内存来运行之,好浪费内存啊……而且会产生大量的内存碎片(因此我没有采用它这种做法)。 你可以试试用小键盘的“-”号返回几次看看能不能返回到正确的地方?由于我对破解不熟,只好麻烦你帮我一起找找bug了,谢谢。:) |
|
12月7日升级――OllyMachine v0.20最终版
最初由 fxyang 发布 没错,这是我实现的方式,我把内嵌汇编写到了当前调试进程的代码最末尾,执行完之后再恢复原来的那些被覆盖的字节;而OllyScript则是用VirtualAllocEx()新开了一段内存。 关于你说的这个现象,可以先在OllyDbg的Debug菜单下按Pause,暂停OD,然后再按一下F8,让脚本的最后一句执行完毕,原来的字节就会被恢复的了。 |
|
12月7日升级――OllyMachine v0.20最终版
OllyMachine 0.17版发布。 地址: http://www.luocong.com/om 更新如下: 1. 修正:内嵌汇编功能,我重写了内嵌汇编的词法和语法分析器,修正了几个bug。(感谢fxyang) 2. 修正:以前的版本中,OllyMachine.ini会保留在OllyDbg的主目录下,现在修正为放在OllyMachine.dll的同一目录下。(感谢stephenteh) 3. 修正:对处理异常的同步错误。(感谢fxyang) 另外新增了monkeycz的两个对易语言的处理脚本到examples里面去。 |
|
12月7日升级――OllyMachine v0.20最终版
最初由 Aaah 发布 invoke Search, eip, "00C3" invoke GetPrevOpAddr, reg00, 1 invoke bp, reg00 |
|
|
|
12月7日升级――OllyMachine v0.20最终版
最初由 Aaah 发布 嗯,这种情况要用 invoke Search, eip, "00C3",试试看? |
|
12月7日升级――OllyMachine v0.20最终版
改了几个小时,重写了内嵌汇编模块,用fxyang的那个脚本测试了一下Armadillo 3.78的主程序,脚本狂跑了一段时间,最后停在了OpenMuteA处: 7C80EC1B > 8BFF MOV EDI,EDI 不知道正不正确? |
|
关于ollymachine的__asm
我刚才研究了一下OllyScript的内嵌汇编的实现原理,发现它好像是用VirtualAllocEx()分配了一块内存,然后剩下的工作就跟我的一模一样了。最大的弊端在于,它的内嵌汇编应该只能在NT内核下执行。刚开始我也是采用这种方法的,但是考虑到兼容性,后来决定不采用,OllyMachine的内嵌汇编理论上应该是支持9x平台的,但我没试过,不知有没有热心人愿意帮忙测试一下? |
|
[原创]OllyMachine Script之易格式代码“直奔主题”
monkeycz辛苦了:D |
|
[原创]OllyMachine Script之Dump易格式原体
最初由 monkeycz 发布 是我没有把概念解释清楚,sorry。等版本固定下来并且我有空的时候,我会写一些文章来介绍OM的实现原理,以及一些基本概念。 |
|
[原创]OllyMachine Script之Dump易格式原体
另外,你的代码很工整,赞一个。:D |
|
[原创]OllyMachine Script之Dump易格式原体
最初由 monkeycz 发布 我认为不能算bug,因为 InputText 的返回值是: 成功:1 cmp reg00, 0 这句是非常符合代码规范的啊,并不是多余的,类似于用高级语言: int ret = InputText(); 在我的虚拟机设计中,标志位zf和cf是用来给算术运算指令服务的。 |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值