首页
论坛
专栏
课程

[其他内容] [分享]分享一下OD反汇编引擎。

2009-7-29 15:47 61210

[其他内容] [分享]分享一下OD反汇编引擎。

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

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

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

[公告][征集寄语] 看雪20周年年会(12.28上海) | 感恩有你,一路同行

上传的附件:
最新回复 (67)
frozenrain 2009-7-29 16:50
2
0
沙发!支持,感谢分享
Troy 1 2009-7-29 18:07
3
0
传说中的反汇编引擎吗?怎么用。,细节说下。。
sessiondiy 4 2009-7-29 18:13
4
0
疑..变成VC++了
请问LZ有没有Delphi版?
wenglingok 26 2009-7-29 18:21
5
0
下来看看   楼主辛苦
轩辕小聪 7 2009-7-29 19:31
6
0
楼主辛苦
建议版主把这帖转到资源下载区,以便于会员找资源时查找。
liangdong 2009-7-29 19:56
7
0
楼主很强大
先收藏
以后应该用得上
besterChen 4 2009-7-29 20:28
8
0
支持一下!
感谢LZ的分享。
bluesand 2009-7-29 20:51
9
0
跟风,我也分享一个OD反汇编引擎。

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

也许有人想要这个版本的吧
上传的附件:
bluesand 2009-7-29 21:01
10
0
呃,忘了说用法了。
反汇编函数
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汇编时的出错信息。
goodlucky 2 2009-7-29 21:14
11
0
牛人啊!顶一个!
playboyjin 2009-7-29 21:48
12
0
支持一下,虽然看不懂。
yingyue 2009-7-29 22:04
13
0
近期有用,都收了,谢
menting 14 2009-7-31 15:22
14
0
不完全对的,呵呵,你说的我也修复了,主要那个问题一看就清楚了,作者是C程序员,而且使用变量只定义不初始化,导致崩溃,很多都是char类型,因为,作者大量使用的是char之类的带符号的,只需要把char改 unsigned char就OK了,像这样没字符处理的最好使用unsigned char.
海风月影 17 2009-7-31 15:54
15
0
用/J选项编译

OD开源的那个引擎并不是OD 1.10里面的那个
红尘岁月 2 2009-7-31 16:39
16
0
这个一定要顶
ccfer 13 2009-7-31 20:00
17
0
作者用的是borland C
与VC有差异是正常的
zhuwg 11 2009-7-31 22:44
18
0
在ccfer后面膜拜
foresee 2 2009-8-1 16:32
19
0
关注一下,加油
cntrump 13 2009-8-1 17:37
20
0
关注,跟进中。。。
第七城市 2009-8-2 23:46
21
0
下载后就要支持!
menting 14 2009-8-3 11:26
22
0
我知道不是,这个引擎是很早的,作者没更新过,所以需要自己手动来更新了。
作者是按BCB写的,转到VC上当然会有很多差异了。。。
wkaka 2009-8-3 14:06
23
0
支持,感谢分享
renwoxiao 1 2009-8-27 10:55
24
0
谢谢各位的无私奉献
loqich 2009-8-27 12:48
25
0
有一处笔误
m_pCmd[0]++
应该是 m_pCmd++
dotNetSafe 2009-8-27 13:20
26
0
有个xde 的反汇编引擎, 大家用过么? 我个人感觉不错!!!
YFLK 2009-8-28 08:20
27
0
这是个好模块!下来收藏!
zjw 2009-9-11 16:55
28
0
好东西,感谢分享。
jerrynpc 2009-9-11 22:34
29
0
看雪里面都是好东西,大牛一串串~
我等菜鸟前来,膜拜~
amour 2009-9-11 23:04
30
0
太强了
上网鱼 2009-9-12 11:57
31
0
3:修复了REP指令的识别,按OD来确定。
//将REP和MOV分开,不太确定是否妥当.
00417E64  |.  F3:AB                 rep     stos dword ptr es:[edi] //这里为???
00417E66  |.  66:AB                 stos    word ptr es:[edi]

测试了下  还是有这个分行的问题 。。

另外一个地方估计楼主笔误。。

                // If opcode is 2-byte, adjust command.
                if(pd->len==2)
                {
                        if(m_ulSize==0){ m_pDisasm->error=DAE_CROSS; }
                        else {
                                if(m_nMode>=DISASM_FILE){ m_nDump += sprintf(m_pDisasm->dump+m_nDump,_T("%02X"),*m_pCmd); }
                                m_pCmd[0]++; srcip++; m_ulSize--;
                        }
                }
m_pCmd[0]++;     应该是  m_pCmd++
上网鱼 2009-9-12 11:59
32
0
没注意 #25.。。 \xF3\xAB 这样的指令还是会分行。。OD 1.10版本 则是当一行处理
triones 6 2009-9-12 12:08
33
0
美得很,前一向就想改造OD的BC版反汇编引擎了,一看代码那么多,全局变量又一大堆,封装起来有点难度。一直没怎么去动。没想到还是牛人多。好好好!
楼主menting与9楼bluesand都牛!
PS:搞成动态库更方便,还有——改unicode版本就更帅了,嘿嘿
aceivy 2009-9-12 12:34
34
0
9楼的那个也不错
Crack 2009-9-12 13:51
35
0
谢谢分享。好文章!!
smartqiu 1 2009-9-12 20:01
36
0
反汇编我已经改得很完美了,就和OD出来的一样,就是汇编引擎弄不好,老是用了长指令的格式

81 05 E0 5A 47 00 01 00 00 00 11 22 33 44 55 66    Size of command = 10 bytes

==========================================
                          0xff,0xE0,0x55,0x8B,0xEC,0x51,0x51,0x53,0x56,0x57,
                          0x64,0x8B,0x35,0x00,0x00,0x00,0x00,0x89,0x75,0xFC,
                          0xC7,0x45,0xF8,0xF4,0x25,0x42,0x00,0x6A,0x00,0xFF,
                          0x75,0x0C,0xFF,0x75,0xF8,0xFF,0x75,0x08,0xE8,0x76,
                          0x1F,0x01,0x00,0x8B,0x45,0x0C,0x8B,0x40,0x04,0x83,
                          0xE0,0xFD,0x8B,0x4D,0x0C,0x89,0x41,0x04,0x64,0x8B,
                          0x3D,0x00,0x00,0x00,0x00
下面是上面的数据的反汇编:
00410000  FFE0                  jmp      eax                          ;2  byte
00410002  55                    push     ebp                          ;1  byte
00410003  8BEC                  mov      ebp,esp                      ;2  byte
00410005  51                    push     ecx                          ;1  byte
00410006  51                    push     ecx                          ;1  byte
00410007  53                    push     ebx                          ;1  byte
00410008  56                    push     esi                          ;1  byte
00410009  57                    push     edi                          ;1  byte
0041000a  64:8B35 00000000      mov      esi,fs:[0]                   ;7  byte
00410011  8975 FC               mov      [ebp-4],esi                  ;3  byte
00410014  C745 F8 F425D200      mov      dword ptr [ebp-8],0xD225F4   ;7  byte
0041001b  6A 00                 push     0                            ;2  byte
0041001d  FF75 0C               push     dword ptr [ebp+0xC]          ;3  byte
00410020  FF75 F8               push     dword ptr [ebp-8]            ;3  byte
00410023  FF75 08               push     dword ptr [ebp+8]            ;3  byte
00410026  E8 761F0100           call     0x421FA1                     ;5  byte
0041002b  8B45 0C               mov      eax,[ebp+0xC]                ;3  byte
0041002e  8B40 04               mov      eax,[eax+4]                  ;3  byte
00410031  83E0 FD               and      eax,-3                       ;3  byte
00410034  8B4D 0C               mov      ecx,[ebp+0xC]                ;3  byte
00410037  8941 04               mov      [ecx+4],eax                  ;3  byte
0041003a  64:8B3D 00000000      mov      edi,fs:[0]                   ;7  byte
=========================================
  5  E8 1F140000             call     0x45187C              jmpconst=45187C
==========================================
  2  75 72                   jnz      short 0xD504A374      jmpconst=D504A374
==========================================
Assembler:
汇编:ADD [DWORD 475AE0],1:
32位立即数: 10  81 05 E0 5A 47 00 01 00 00 00
==========================================
8位立即数:  7  83 05 E0 5A 47 00 01
==========================================
汇编 push 7f;
  2  6A 7F
mov eax,dword ptr [40E000];这一句本来汇编出来的是 A1 00 E0 04 00
  6  8B 05 00 E0 40 00
请按任意键继续. . .
上传的附件:
ziyawp 2009-9-13 03:27
37
0
多看源码 有利身心健康.感谢分享
上网鱼 2009-9-26 11:38
38
0
"这一句本来汇编出来的是 A1 00 E0 04 00" <----------------  这句是错的

“8B 05 00 E0 40 00” <-------------  这正确,smartqiu可以在OD里试试看
enjoyjob 2009-9-26 23:46
39
0
先下了收藏了,期待楼主能做个简要的会用说明,谢谢了
YwdxY 2009-10-27 12:02
40
0
全部收藏了,谢谢大牛们的分享
慢慢研究
seesth 2009-10-28 13:05
41
0
收藏了!谢谢楼主和9楼以及36楼3位牛人的分享!
Ditans 2009-10-28 13:46
42
0
收藏,好帖子,不能不收藏
kawar 2009-10-29 00:36
43
0
收藏了。谢谢分享。
注定飞翔 2009-12-16 08:55
44
0
这么好,受用了。
lacoucou 12 2009-12-16 11:21
45
0
支持,收藏一个
浅离 2009-12-16 11:34
46
0
顶一下,支持,下来,看看
lbzyd 2010-4-8 15:04
47
0
看源码很受益,谢谢
hsdund 2010-5-19 18:21
48
0
好东西,先收了
李小小 2010-5-19 22:00
49
0
学学,很好的资料
jokersky 1 2010-9-1 23:54
50
0
大牛们别停哟。。。我在后面追呢。。。
游客
登录 | 注册 方可回帖
返回