首页
社区
课程
招聘
[原创]OllyMachine Script之Dump易格式原体
发表于: 2004-11-29 09:08 7077

[原创]OllyMachine Script之Dump易格式原体

2004-11-29 09:08
7077

///////////////////////////////////////////////////////////////////////////////
//
//  FileName    :   DumpECode.oms(把易格式原体从PE文件中分离出来)
//  Author      :   monkeycz
//  Date        :   2004-11-28 21:36
//  Comment     :   搜索易格式所在的节,然后dump出易格式原体。由于没有经过装载器
//                  重定位,dump出来的原体也不需要修复重定位信息。
//
///////////////////////////////////////////////////////////////////////////////

mov reg04,0x400000                        //ImageBase,需要自行修改
invoke Search, reg04, "2E65636F64"        //查找易格式所在节
cmp reg00,-1
je nofind                                 //没有找到:(
mov reg01,reg00

add reg01,0x0C                            //到VirtualAddress处
invoke ReadMemLong,reg01,0x04             //读取易格式的VirtualAddress
mov reg05,reg00
//invoke PrintNum, reg05, 16
add reg05,reg04                           //当前易格式所在的节内存中的偏移
//invoke PrintNum, reg05, 16

add reg01,0x04                            //到SizeOfRawData处
invoke ReadMemLong,reg01,0x04             //取出易格式的尺寸
mov reg03,reg00
//invoke PrintNum, reg03, 16

invoke InputText,"Please input the filename:"
cmp reg00,0x00
je cancel
invoke DumpMem,reg05,reg03,FreeBufferReg  //dump
je error
invoke msg,"Dump the E code finish!"
halt

nofind:
invoke msg,"No find the E code!"
halt

cancel:
halt

error:
invoke msg,"Write file error!"
halt


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 2199
活跃值: (1975)
能力值: ( LV12,RANK:810 )
在线值:
发帖
回帖
粉丝
2
good!
2004-11-29 09:16
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
3
InputText似乎有问题,按取消后,reg00能置0,但是ZF的置好像没有变化。所以上面架了一句多余的cmp reg00,0x00。

不知道是不是bug。
2004-11-29 09:17
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
估计易语言要请你吃饭了 :D
2004-11-29 09:18
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
5
混饭吃而已。中午饭还没着落呢
2004-11-29 09:21
0
雪    币: 1593
活跃值: (811)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
6
最初由 monkeycz 发布
InputText似乎有问题,按取消后,reg00能置0,但是ZF的置好像没有变化。所以上面架了一句多余的cmp reg00,0x00。

不知道是不是bug。


我认为不能算bug,因为 InputText 的返回值是:

成功:1
失败:0(用户按下CANCEL按钮,或者用户输入的字符串大于 4096 个字节)


cmp reg00, 0 这句是非常符合代码规范的啊,并不是多余的,类似于用高级语言:

int ret = InputText();
if (0 == ret) goto cancel;


在我的虚拟机设计中,标志位zf和cf是用来给算术运算指令服务的。
2004-11-29 10:06
0
雪    币: 1593
活跃值: (811)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
7
另外,你的代码很工整,赞一个。:D
2004-11-29 10:08
0
雪    币: 1223
活跃值: (469)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
8
我以为标志寄存器在调用虚拟机的API后会被重置的。

不好意思,搞错了:)
2004-11-29 10:10
0
雪    币: 1593
活跃值: (811)
能力值: ( LV13,RANK:370 )
在线值:
发帖
回帖
粉丝
9
最初由 monkeycz 发布
我以为标志寄存器在调用虚拟机的API后会被重置的。

不好意思,搞错了:)


是我没有把概念解释清楚,sorry。等版本固定下来并且我有空的时候,我会写一些文章来介绍OM的实现原理,以及一些基本概念。
2004-11-29 10:12
0
雪    币: 97697
活跃值: (200824)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
10
支持!!!
2004-11-29 23:05
0
游客
登录 | 注册 方可回帖
返回
//