首页
社区
课程
招聘
[分享]分享一下OD反汇编引擎。
发表于: 2009-7-29 15:47 66301

[分享]分享一下OD反汇编引擎。

2009-7-29 15:47
66301

这次,分享的引擎我已经封装为类,调用起来会更方便点,而且此次修复了几处问题。

1:修复了像如下几处错误:
void                CMgDisasmBase::DecodeIM(int constsize,int sxt,int type)
{
        int i;
        signed long data;
        ulong l;
        char name[TEXTLEN]={0},comment[TEXTLEN]={0};
//增加了初始化,由于作者是C程序员,而且还有变量不初始化的习惯,所以像这样的溢出比较多点
//发现的已经修复。
}

2:修改了一处循环,使其可以正确识别像如下的指令:
//第一次修复是逐一添加判别,经仔细分析代码,发现是作者疏忽判断,几次修改后,
//这次的是我比较认同的方法,即贴近原代码,又能解决BUG,基本上代码看起来变化
//了那么一点点,但是这一点点让我花了好几个小时,几次修改发现都不如愿,总觉得
//增加的代码太多^^,
0046AB8D  |.  64:A1 00000000        mov     eax, dword ptr fs:[0]

3:修复了REP指令的识别,按OD来确定。
//将REP和MOV分开,不太确定是否妥当.
00417E64  |.  F3:AB                 rep     stos dword ptr es:[edi] //这里为???
00417E66  |.  66:AB                 stos    word ptr es:[edi]

4:估计在符点指令上还有识别问题,没时间测试了,给大家放出来,喜欢的,估计能用到的就拿去用好了,放出来是为了方便需要的人.

如一本版不否,请斑竹移一下贴~~!谢谢~~!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (67)
雪    币: 107
活跃值: (1683)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
2
沙发!支持,感谢分享
2009-7-29 16:50
0
雪    币: 18
活跃值: (2079)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
传说中的反汇编引擎吗?怎么用。,细节说下。。
2009-7-29 18:07
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
4
疑..变成VC++了
请问LZ有没有Delphi版?
2009-7-29 18:13
0
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
5
下来看看   楼主辛苦
2009-7-29 18:21
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
6
楼主辛苦
建议版主把这帖转到资源下载区,以便于会员找资源时查找。
2009-7-29 19:31
0
雪    币: 1407
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
楼主很强大
先收藏
以后应该用得上
2009-7-29 19:56
0
雪    币: 168
活跃值: (152)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
8
支持一下!
感谢LZ的分享。
2009-7-29 20:28
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
跟风,我也分享一个OD反汇编引擎。

跟楼主的没太大区别,vs2008的工程,c。那几个BUG也改掉了——很多指令判断错误的BUG原因在于原作者把很多只需要1字节长度的变量定义为int,导致用vs2008编译后,在指令判断上出现了错误(比如对arg变量赋值0x82,由于arg变量定义成了int,导致赋值后变成了0xffffff82……把定义改为byte就好了。)

也许有人想要这个版本的吧
上传的附件:
2009-7-29 20:51
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
呃,忘了说用法了。
反汇编函数
ulong Disasm(char *src,ulong srcsize,ulong srcip, t_disasm *disasm,int disasmmode)
返回值是指令长度
src指向需要反汇编的机器码指针
srcsize机器码的总长度
srcip机器码在被调试进程的内存中的内存地址
disasm指向t_disasm结构的指针。该结构体用来存放反汇编数据。
disasmmode反汇编模式。

汇编功能:
int Assemble(char *cmd, ulong ip, t_asmmodel *model, int attempt,        int constsize, char *errtext)
返回值是指令长度
cmd指向汇编指令字符串的指针
ip该句汇编指令在远程进程内存中的地址
model指向t_asmmodel结构体的指针,用于存放汇编数据
attempt这个……我想不起来了=。= 一般是NULL
constsize立即数的长度(1、2、4字节)该参数会影响到汇编结果的长度。如果对汇编结果长度有要求,则需要设定对应的值。否则NULL即可。
errtext汇编时的出错信息。
2009-7-29 21:01
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
牛人啊!顶一个!
2009-7-29 21:14
0
雪    币: 264
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
支持一下,虽然看不懂。
2009-7-29 21:48
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
近期有用,都收了,谢
2009-7-29 22:04
0
雪    币: 1657
活跃值: (291)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
14
不完全对的,呵呵,你说的我也修复了,主要那个问题一看就清楚了,作者是C程序员,而且使用变量只定义不初始化,导致崩溃,很多都是char类型,因为,作者大量使用的是char之类的带符号的,只需要把char改 unsigned char就OK了,像这样没字符处理的最好使用unsigned char.
2009-7-31 15:22
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
15
用/J选项编译

OD开源的那个引擎并不是OD 1.10里面的那个
2009-7-31 15:54
0
雪    币: 517
活跃值: (64)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
16
这个一定要顶
2009-7-31 16:39
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
17
作者用的是borland C
与VC有差异是正常的
2009-7-31 20:00
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
18
在ccfer后面膜拜
2009-7-31 22:44
0
雪    币: 222
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
19
关注一下,加油
2009-8-1 16:32
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
20
关注,跟进中。。。
2009-8-1 17:37
0
雪    币: 185
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
下载后就要支持!
2009-8-2 23:46
0
雪    币: 1657
活跃值: (291)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
22
我知道不是,这个引擎是很早的,作者没更新过,所以需要自己手动来更新了。
作者是按BCB写的,转到VC上当然会有很多差异了。。。
2009-8-3 11:26
0
雪    币: 135
活跃值: (76)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
支持,感谢分享
2009-8-3 14:06
0
雪    币: 318
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
谢谢各位的无私奉献
2009-8-27 10:55
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
有一处笔误
m_pCmd[0]++
应该是 m_pCmd++
2009-8-27 12:48
0
游客
登录 | 注册 方可回帖
返回
//