首页
社区
课程
招聘
[原创]打造自己喜欢的 Ollydbg
发表于: 2004-12-3 22:34 13440

[原创]打造自己喜欢的 Ollydbg

2004-12-3 22:34
13440

Written by askformore :D

上次上传了个英文版 OD1.10 的 DIY,感觉很粗糙,当时由于打包压缩时误删了笔记,所以只能上传成品附件,也没空重写。近来,有些时间就重来一次,把功能稍作完善一下,本想使菜单能看见工具的图标的,美化一下的,可是脑子里没门,现在也够用,就算了。

DIY 过程如下(下面的内容多数不是为新手准备的):

首先,我们用LordPE加载 OD1.10 中文版,翻到 区段 和目录 部分,将重定位表偏移地址记住,然后擦除重定位表的所有相关信息,用16进制工具裁掉那个section的内容,因为我们要加入资源,而资源表又不是在最后的 section,或者你可以独立将重定位表保存起来,等 DIY 成功了再补回来也是可以的。另外,对于截获OD1.10的 消息流 的位置的方法,可参阅 pll621 老大的文章

在菜单资源上 添加需要的菜单“工具(&T)”,如下:
……
POPUP "帮助(&H)"
{
        MENUITEM "版本信息(&A)",  2501
        MENUITEM "帮助内容(&C)",  2502
        MENUITEM SEPARATOR
        MENUITEM "选择 API 帮助文件(&P)",  2503
        MENUITEM "打开 API 帮助文件(&H)",  2504
}
POPUP "工具(&T)"
{
        MENUITEM "自定义工具",  2509
        MENUITEM SEPARATOR
        MENUITEM "计算器",  2510
}
}

下面是我自己取名的对话窗口资源脚本: DIA_CFG_TOOLMENU

DIA_CFG_TOOLMENU DIALOG 80, 30, 271, 225
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "配置工具菜单"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
FONT 9, "宋体"
{
   CONTROL "选择工具", 9099, BUTTON, BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 8, 9, 258, 191
   CONTROL "", 9041, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 20, 160, 12
   CONTROL "", 9042, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 38, 160, 12
   CONTROL "", 9043, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 56, 160, 12
   CONTROL "", 9044, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 74, 160, 12
   CONTROL "", 9045, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 92, 160, 12
   CONTROL "", 9046, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 110, 160, 12
   CONTROL "", 9047, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 128, 160, 12
   CONTROL "", 9048, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 146, 160, 12
   CONTROL "", 9049, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 164, 160, 12
   CONTROL "", 9050, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 45, 182, 160, 12
   CONTROL "Tool01:", 9021, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 13, 21, 30, 9
   CONTROL "Tool02:", 9022, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 13, 39, 30, 9
   CONTROL "Tool03:", 9023, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 13, 57, 30, 9
   CONTROL "Tool04:", 9024, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 13, 75, 30, 9
   CONTROL "Tool05:", 9025, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 13, 94, 30, 9
   CONTROL "Tool06:", 9026, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 14, 112, 30, 9
   CONTROL "Tool07:", 9027, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 13, 129, 30, 9
   CONTROL "Tool08:", 9028, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 13, 147, 30, 9
   CONTROL "Tool09:", 9029, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 13, 165, 30, 9
   CONTROL "Tool10:", 9030, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 13, 183, 30, 9
   CONTROL "更改", 9001, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 17, 50, 14
   CONTROL "更改", 9002, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 36, 50, 14
   CONTROL "更改", 9003, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 55, 50, 14
   CONTROL "更改", 9004, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 72, 50, 14
   CONTROL "更改", 9005, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 90, 50, 14
   CONTROL "更改", 9006, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 108, 50, 14
   CONTROL "更改", 9007, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 126, 50, 14
   CONTROL "更改", 9008, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 144, 50, 14
   CONTROL "更改", 9009, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 162, 50, 14
   CONTROL "更改", 9010, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 209, 180, 50, 14
   CONTROL "确定(&O)", 8888, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 205, 50, 14
   CONTROL "取消(&C)", 2, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 154, 205, 50, 14
}

上面是一个我盗取一个游戏模拟器配置菜单的对话窗口模块,各控件名称和 ID(最好不存在冲突) 全改了,位置也微调好了,反正调整到自己满意就可以!
你自己可以在 ResHacker 上测试,可是用它进补成功的!

浏览资源得知,“确定”和“取消”的 ID 分别是 2 和 1 ,我这里确定改为 8888,希望它发落去!

我找了这对话窗口(消息流较少的进行“盗版”)--> “版本信息”菜单

00440C3C   push ebp
00440C3D   mov ebp,esp
00440C3F   add esp,-480
00440C45   mov eax,dword ptr ss:[ebp+10]
00440C48   mov edx,dword ptr ss:[ebp+C]
00440C4B   sub edx,110                     ;  Switch (cases 110..112)
00440C51   je short 00440C62               ;  NEWHAND.00440C62
00440C53   dec edx
00440C54   je short 00440CB2               ;  NEWHAND.00440CB2
00440C56   dec edx
00440C57   je 00440CF7                     ;  NEWHAND.00440CF7
00440C5D   jmp 00440D0E                    ;  NEWHAND.00440D0E
00440C62   mov byte ptr ss:[ebp-480],0     ;  Case 110 (WM_INITDIALOG) of switch 00440C4B
00440C69   mov byte ptr ss:[ebp-440],0
00440C70   lea eax,dword ptr ss:[ebp-440]
00440C76   lea ecx,dword ptr ss:[ebp-480]
00440C7C   push eax                        ; /Arg6
00440C7D   push ecx                        ; |Arg5
00440C7E   push 0A                         ; |Arg4 = 0000000A
00440C80   push 1                          ; |Arg3 = 00000001
00440C82   lea eax,dword ptr ss:[ebp-400]  ; |
00440C88   push 4B9073                     ; |Arg2 = 004B9073 ASCII 0A,"NewHand v%"
00440C8D   push eax                        ; |Arg1
00440C8E   call 004A6C2C                   ; \NEWHAND.004A6C2C
00440C93   add esp,18
00440C96   lea edx,dword ptr ss:[ebp-400]
00440C9C   push edx                        ; /Text
00440C9D   push 0E75                       ; |ControlID = E75 (3701.)
00440CA2   mov ecx,dword ptr ss:[ebp+8]    ; |
00440CA5   push ecx                        ; |hWnd
00440CA6   call 004AF58E                   ; \SetDlgItemTextA
00440CAB   call 00546360                   ;  // 原指令 mov eax,1
00440CB0   jmp short 00440D10              ;  NEWHAND.00440D10
00440CB2   mov edx,eax                     ;  Case 111 (WM_COMMAND) of switch 00440C4B
00440CB4   and dx,0FFFF
00440CB9   cmp dx,1
00440CBD   je short 00440CC5               ;  NEWHAND.00440CC5
00440CBF   cmp dx,2
00440CC3   jnz short 00440CD2              ;  NEWHAND.00440CD2
00440CC5   push 0                          ; /Result = 0
00440CC7   mov ecx,dword ptr ss:[ebp+8]    ; |
00440CCA   push ecx                        ; |hWnd
00440CCB   call 004AF3EA                   ; \EndDialog
00440CD0   jmp short 00440D0E              ;  NEWHAND.00440D0E
00440CD2   call 00546206                   ;  // 原指令 cmp dx,0e76
00440CD7   jnz short 00440D0E              ;  NEWHAND.00440D0E
00440CD9   push 0                          ; /IsShown = 0
00440CDB   push 4B91A4                     ; |DefDir = "."
00440CE0   push 0                          ; |Parameters = NULL
00440CE2   push 4B917F                     ; |FileName = "http://home.t-online.de/home/NewHand"
00440CE7   push 4B917A                     ; |Operation = "open"
00440CEC   mov eax,dword ptr ss:[ebp+8]    ; |
00440CEF   push eax                        ; |hWnd
00440CF0   call 004AF342                   ; \ShellExecuteA
00440CF5   jmp short 00440D0E              ;  NEWHAND.00440D0E
00440CF7   and eax,0FFF0                   ;  Case 112 (WM_SYSCOMMAND) of switch 00440C4B
00440CFC   cmp eax,0F060
00440D01   jnz short 00440D0E              ;  NEWHAND.00440D0E
00440D03   push 0                          ; /Result = 0
00440D05   mov edx,dword ptr ss:[ebp+8]    ; |
00440D08   push edx                        ; |hWnd
00440D09   call 004AF3EA                   ; \EndDialog
00440D0E   xor eax,eax                     ;  Default case of switch 00440C4B
00440D10   mov esp,ebp
00440D12   pop ebp
00440D13   retn 10
00440D16   nop
00440D17   nop
00440D18   push 0                          ; /lParam = NULL
00440D1A   mov eax,dword ptr ds:[4D3B80]   ; |
00440D1F   push 440C3C                     ; |DlgProc = NEWHAND.00440C3C //借用一下这里
00440D24   push eax                        ; |hOwner => NULL
00440D25   mov edx,dword ptr ds:[4D3B78]   ; |
00440D2B   push 4B91A6                     ; |pTemplate = "DIA_ABOUT"
00440D30   push edx                        ; |hInst => NULL
00440D31   call 004AF3C6                   ; \DialogBoxParamA
00440D36   retn

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (23)
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我最想看的就是截获OD1.10的 消息流 的位置的方法,可惜楼主没有写出来。

PLL621的也没有写清楚,只是写了sendmessage函数,后面就没有写了。

文章是好文章,就是可惜没有列出DIY主题,写这类DIY文章,我个人感觉能先列出想DIY的内容,这样针对这每个条目去分别制作,条理会清楚很多。

2004-12-3 23:53
0
雪    币: 97697
活跃值: (200824)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
3
先支持一下!!!
2004-12-4 08:47
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
4
最想看的就是截获OD1.10的 消息流 的位置的方法,可惜楼主没有写出来。

PLL621的也没有写清楚,只是写了sendmessage函数,后面就没有写了。

文章是好文章,就是可惜没有列出DIY主题,写这类DIY文章,我个人感觉能先列出想DIY的内容,这样针对这每个条目去分别制作,条理会清楚很多。

先支持一下!!!

是的,最好写出关键一点的技术,让大家学习一下会多好.
2004-12-4 10:46
0
雪    币: 241
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最初由 kyc 发布

是的,最好写出关键一点的技术,让大家学习一下会多好.

9494
2004-12-4 11:26
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
6
楼主辛苦  支持 :D
2004-12-4 13:01
0
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
7
学习~:D
2004-12-4 13:07
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
8
支持,学习:D :D
2004-12-4 13:18
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
9
学习学习学!
2004-12-4 15:29
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
看不懂,不过我还是支持啊,
2004-12-4 15:57
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
11
改变消息流与加的菜单命令相关`~~
楼主扩展了一下OD的功能,支持下~
od调试很强大~如果增加改变调试相关的事件消息流,也好完完~
2004-12-4 16:36
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
12
呵呵,你们怎么“冤枉 pll621精华文章 没有有教你们”,不过,你们可以用用这个方法嘛,用 OD 加载 另一个 OD (妈生兄弟),运行后,点菜单,要了解菜单是干什么的,你才好确定,接下来才好出主意定 “消息流拦截”,我是在 98 下找的,比如:

"帮助(&H)"-> "版本信息(&A)",  2501

会弹出对话框,我在 98 下可以轻松点“暂停”就停在

00440D31   call 004AF3C6                   ; \DialogBoxParamA
00440D36   retn //停在这

然后你可以下个断 440d36,返回程序界面,点确定,就中断成功,然后用 回嗍 的方法就能跟出 “消息流”,你会看见很多 case 110、sub reg,num等,找出想应的 ID 走向就 OK 啦,我是不可能一一细数,没这么多时间,也没这么好的文笔能讲述清楚,我都是从不懂到动手去碰,碰钉碰石头,才碰到现在有点运...
2004-12-4 16:57
0
雪    币: 3685
活跃值: (4237)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
13
要个成品放出来吧。
2004-12-4 17:30
0
雪    币: 212
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
支持...
2004-12-5 15:11
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
15
P哥的文章里面讲过获取消息处理地点的方法.我感觉比较通用,不过也比较麻烦,如果找菜单消息处理,不妨利用API函数,比如利用一般菜单里面都有打开和退出功能,多F12几下,就可以找到消息处理的地方.
2004-12-5 18:23
0
雪    币: 221
活跃值: (2311)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
好,谢谢!学习中。。。。。。。。。。。
2004-12-5 19:11
0
雪    币: 768
活跃值: (530)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
17
有时间试一下,谢谢搂住
2004-12-5 19:41
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
18
最初由 china 发布
要个成品放出来吧。


Sorry,see in addition
附件:diy.rar
2004-12-5 21:35
0
雪    币: 3685
活跃值: (4237)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
19
最初由 askformore 发布


Sorry,see in addition
附件:diy.rar


Thanks!
2004-12-6 08:37
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
真心真意谢谢你
2004-12-6 09:14
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
21
Ok,我准备向 luocong 提意一个 API 看看能不能给大家带来一定的方便!
2004-12-6 10:40
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
22
;) 正想要这方面的资料,楼主兄就来了!
2004-12-6 12:10
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
唉,截取消息流这个问题可能也是会者不难难者不会啊,我记得第一次做时这儿费了老长时间,可是逐渐明白了win32程序的框架后,就有n种方法可以截取了……
想写一些教程吧,又无从下手,因为如果是trw,方法还通用一些,至于od,则是千变万化,完全靠你对win32框架的理解了,基本上一个软件一种最好的方法
2004-12-6 13:14
0
雪    币: 212
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
那雅枫大哥就在AOGO上开个专栏呗~~~~;) ;)
2004-12-6 13:39
0
游客
登录 | 注册 方可回帖
返回
//