吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 13342|回复: 100

[原创逆向图文] 手工修改OllyDbg2.0的MoreMenu插件【熟悉PE格式、练习OD】

  [复制链接]
herowuking 发表于 2015-6-10 03:11 | 显示全部楼层 |阅读模式

本帖最后由 herowuking 于 2015-6-10 10:07 编辑

最近在学习PE格式---逆向的基础,不用多说~~
OllyMoreMenu 1.5+来练练手 插件下载地址:https://tuts4you.com/download.php?view.3412
OllyDBG v2.01h官方下载地址:http://www.ollydbg.de/odbg201.zip (找了个中文语言包OllyDbg.lng,然后就可以切换中英文了)
然后准备好工具WinHex和Stud PE、OllyDBG下载下来解压之后复制一份,一个用来调试【下面简称OD1】,一个用来加载MoreMenu插件(被调试)【下面简称OD2】

为啥拿它来练呢?因为它不听话---每次从打开自定义的工具都弹出一个让人讨厌的对话框,而且配置文件cfg.ini默认放在插件目录下不太喜欢

弹出恶心的对话框

弹出恶心的对话框

看着很不爽~~  不知道是不是我配置的问题,如果是请大侠指点,反正不影响我修改它。。。。本来就是为了学习PE格式的
而且配置文件cfg.ini默认在Ollydbg的插件目录Plugin下面我也很不喜欢~ 我想给他改个名字:MoreMenu.ini,放在Ollydbg的根目录下。。。

下面开始,一步一步。。。。首先申明,我是菜鸟 要借助工具分析
用StudPE打开MoreMenu插件:OllyMoreMenu_1.5+.dll
(我配置了WinHex为StudPE的外部Hex编辑工具,StudPE分析PE结构很好,但是缺乏Hex编辑功能,这个选项的配置弥补了这个缺陷)

WinHex for StudPE

WinHex for StudPE


第一步,定位那个讨厌的对话框位置:
【OD2】运行,用【OD1】附加它:
3.jpg
在命令行下断点 bp MessageBoxA、bp MessageBoxW(这里补充一点,需要 CmdBar.rar (13.82 KB, 下载次数: 2) 支持,下面附件里面有,下载后放在OD1的Plugin目录下)
F9运行
在OD2里面点击自己添加的工具菜单里面的工具,OD1断下了它
4.jpg
这个时候,在User32.dll领空,不是我想要的,注意看上图右下角栈窗口里面的最上面一项ESP里面保存的值:ESP [0018D7F4] == 10001CDE
因为函数CALL调用等价于PUSH EIP,JMP xxxx,而EIP又是存储下一条指令的寄存器,因此,我们可以判断CALL MessageBox肯定在10001CDE上面那条,在OD1里面按Ctrl+G 输入VA地址:0x10001CDE,看看:
5.jpg
我们已经找到了这个MessageboxA调用的地方。
往上看CALL调用之前的语句:
CPU Disasm
地址           十六进制数据            指令                                      注释                                                                           标签
10001CBB       68 6C4A0010     PUSH OFFSET 10004A6C                    ASCII "C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\Tools\LordPE\LordPE.EXE"
10001CC0       68 49420010     PUSH OFFSET 10004249                    ASCII "open"
10001CC5       6A 00           PUSH 0
10001CC7       E8 E20D0000     CALL <JMP.&shell32.ShellExecuteA>       跳转至 SHELL32.ShellExecuteA
10001CCC       6A 00           PUSH 0     ;MessageBoxA从右至左第一个参数
10001CCE       6A 00           PUSH 0     ;MessageBoxA从右至左第二个参数
10001CD0       8D85 00EEFFFF   LEA EAX,[EBP-1200]
10001CD6       50              PUSH EAX     ;MessageBoxA从右至左第三个参数
10001CD7       6A 00           PUSH 0      ;MessageBoxA从右至左第四个参数
10001CD9       E8 DA0C0000     CALL <JMP.&user32.MessageBoxA>          跳转至 USER32.MessageBoxA

基本就是执行函数ShellExecuteA打开指定的工具里面的程序之后,没有经过啥判断必定执行MessageboxA,然后那句讨厌的提示就出来了,找到了地方,修改就很方便
在10001CCC~10001CD9这几条条语句上面点击右键-->编辑-->填充位NOP...保存修改到文件,测试一下,打开再也没有那个提示了,清静~~


第二步,修配置文件cfg.ini的名字位MoreMenu.ini,并且位置放在OD根目录下。这是本处女文的分析重点---PE文件格式学习
重新用OD1附加调试加载了OllyMoreMenu 1.5+插件的OD2
按Alt+E 打开可执行模块视图,在OllyMoreMenu 1.5+插件模块上面点击右键,在CPU中查看代码,来到MoreMenu插件的入口点:
6.jpg
CPU Disasm
地址           十六进制数据            指令                                      注释                                                                           标签
10001000 Oll   55              PUSH EBP
10001001       8BEC            MOV EBP,ESP
10001003       837D 0C 01      CMP DWORD PTR SS:[EBP+0C],1
10001007       75 09           JNE SHORT 10001012
10001009       FF75 08         PUSH DWORD PTR SS:[EBP+8]
1000100C       8F05 74420010   POP DWORD PTR DS:[10004274]
10001012       B8 01000000     MOV EAX,1
10001017       C9              LEAVE
10001018       C2 0C00         RETN 0C
1000101B ODB   55              PUSH EBP
1000101C       8BEC            MOV EBP,ESP
1000101E       68 F1410010     PUSH OFFSET 100041F1                    UNICODE "MAIN"
10001023       FF75 08         PUSH DWORD PTR SS:[EBP+8]
10001026       FF15 80300010   CALL DWORD PTR DS:[<&msvcrt.wcscmp>]
1000102C       83C4 08         ADD ESP,8
1000102F       85C0            TEST EAX,EAX
10001031       75 07           JNE SHORT 1000103A
10001033       B8 A9410010     MOV EAX,OFFSET 100041A9                 到 PTR UNICODE "Add Menu"
10001038       C9              LEAVE
10001039       C3              RETN
1000103A       33C0            XOR EAX,EAX
1000103C       C9              LEAVE
1000103D       C3              RETN
1000103E ODB   55              PUSH EBP
1000103F       8BEC            MOV EBP,ESP
10001041       817D 08 C900000 CMP DWORD PTR SS:[EBP+8],0C9
10001048       73 04           JAE SHORT 1000104E
1000104A       33C0            XOR EAX,EAX
1000104C       C9              LEAVE
1000104D       C3              RETN
1000104E       A1 9C300010     MOV EAX,DWORD PTR DS:[<&ollydbg.hwollym UNICODE "&#1362; &#2108;&#1228;"
10001053       FF30            PUSH DWORD PTR DS:[EAX]
10001055       8F05 C4440010   POP DWORD PTR DS:[100044C4]
1000105B       68 04010000     PUSH 104
10001060       68 28460010     PUSH OFFSET 10004628                    ASCII "C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.ini"
10001065       FF35 74420010   PUSH DWORD PTR DS:[10004274]
1000106B       E8 A8190000     CALL <JMP.&kernel32.GetModuleFileNameA> 跳转至 kernel32.GetModuleFileNameA
10001070       68 28460010     PUSH OFFSET 10004628                    ASCII "C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.ini"
10001075       E8 401A0000     CALL <JMP.&shlwapi.PathRemoveFileSpecA> 跳转至 SHLWAPI.PathRemoveFileSpecA
1000107A       68 28460010     PUSH OFFSET 10004628                    ASCII "C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.ini"
1000107F       68 28480010     PUSH OFFSET 10004828                    ASCII "C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.bak"
10001084       E8 CB190000     CALL <JMP.&kernel32.lstrcpyA>           跳转至 kernel32.lstrcpy
10001089       68 FB410010     PUSH OFFSET 100041FB                    ASCII "\cfg.bak"
1000108E       68 28480010     PUSH OFFSET 10004828                    ASCII "C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.bak"
10001093       E8 B0190000     CALL <JMP.&kernel32.lstrcatA>           跳转至 kernel32.lstrcat
10001098       68 04420010     PUSH OFFSET 10004204                    ASCII "\cfg.ini"
1000109D       68 28460010     PUSH OFFSET 10004628                    ASCII "C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.ini"
100010A2       E8 A1190000     CALL <JMP.&kernel32.lstrcatA>           跳转至 kernel32.lstrcat
100010A7       6A 4F           PUSH 4F
100010A9       6A 02           PUSH 2

看到了吧,这个红色标注的CALL就是获得当前模块路径和文件名的,它有三个参数:
hModuleLong
一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄。如果该参数为NULL,该函数返回该应用程序全路径。
lpFileNameString
指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的
nSizeLong
装载到缓冲区lpFileName的最大字符数量

原插件里面,参数hModuleLong(CALL之上,最后一个PUSH处)传入的是插件本身的Module句柄,那么获得的就是插件所在的Plugin目录了,如果我们把这里修改位NULL就可以了。。。
简单的把PUSH DWORD PTR DS:[10004274] 用NOP填充,然后再改为Push 0么?
肯定不能这么简单了,因为在OD窗口可以看到这条指令前面的二进制数下面有下划线,有下划线代表这这里是“重定位”的了。
8.jpg
记住重定位的VA地址:10001067 (注意,不是10001065,下划线开始的那个字节才是!!!前面是指令二进制字节码,后面是操作数)

累死了,搞了半天才引出PE文件格式。。。。。。开始吧:
用StudPE打开OllyMoreMenu_1.5+.dll,再点工具-->Hex编辑器,调用WinHex打开它。。。
StudPE用来定位,WinHex用来修改
9.jpg
10.jpg
找到了Raw---文件中重定位表的起始的地址了吧,在WinHex中定位:
11.jpg
重定位表的数据结构如下图所示:
12.jpg
所以我们知道这个插件的重定位表有三个块儿组成,每个块儿里面基本都是“ 4字节的RVA起始地址 + 4字节的块儿长度 + Word型重定位项”组成,重定位项里面高4位是重定位类型,一般都是3,后12位(16进制对应的就是3位)是偏移地址。
对于上面OD找到的地址位10001067重定位数据,减去模块基址,减去页的起始RVA地址 即是 10001067 - 1000000 - 1000 = 67
那么重定位项就是 67 30 (小端机,高低字节对调知道吧),WinHex里面的物理地址3616位置能找到它。。。
去掉这个重定位(改为00 00),才可以后续再OD里面修改PUSH DWORD PTR DS:[10004274]位PUSH 0
直接上图:
13.jpg
再用OD打开调试,么有重定位了吧:
14.jpg
剩下,就简单了,用NOP填充PUSH DWORD PTR DS:[10004274]
再修改为PUSH 0:
15.jpg
保存到可执行文件即可

然后,把Plugin目录里面的cfg.ini移动到OD2根目录,并重命名为MoreMenu.ini,用WinHex再次打开MoreMenu插件
查找搜索cfg.ini文本:
16.jpg
对照知道,这是在.data数据段里面的,一般字符串都存在数据段
找一个Ascii码查询工具,查询你想修改的配置文件名字MoreMenu.bak MoreMenu.ini的Ascii码:
17.jpg
在刚才数据段上面找一块儿全是00 而且在OD内存模块中查看没有被使用的区域,我选择的是2D50起始地址:
18.jpg
剩下的,对照这OD里面:
10001089       68 FB410010     PUSH OFFSET 100041FB                    ASCII "\cfg.bak"
1000108E       68 28480010     PUSH OFFSET 10004828                    ASCII "C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.bak"
10001093       E8 B0190000     CALL <JMP.&kernel32.lstrcatA>           跳转至 kernel32.lstrcat
10001098       68 04420010     PUSH OFFSET 10004204                    ASCII "\cfg.ini"

修改物理地址 489 和499的字节码了(物理地址怎么找见下图里面的文字解释):
19.jpg
因为上面新加的两个字符串起始地址分别是2D50 和 2D5E,它们在.data数据块儿内,VA地址就是:
DLL模块基地址+.data段RVA+(字符串物理地址-.data段的物理起始地址)
2D50的VA:1000000+4000+(2D50-2C00) = 10004150
2D5E的VA:1000000+4000+(2D5E-2C00) = 1000415E
所以,把物理地址489处的字节码改为 50 41,499处的字节码改为5E 41
存盘,测试一下把~~

下面贴上我学习PE格式的思维导图:
20.jpg

我修改好的OllyMoreMenu_1.5+h5.dll 和 MoreMenu.ini配置文件:
游客,如果您要查看本帖隐藏内容请回复


申明:本文属于处女贴,不妥之处请大侠们指点,但是不要喷,我也是在学习中。。。

评分

参与人数 95威望 +1 HB +137 THX +62 收起 理由
爱编 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
xiaoxixpj + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
longge188 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
scarl + 2 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
sjtkxy + 2 + 1
花盗睡鼠 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
虚心学习 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
bnjzzheng + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
24567 + 1
Soul1999 + 1
太阳神 + 2 + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
冷亦飞 + 1
极速菜 + 1
消逝的过去 + 1
丰明泽 + 1
武清一点点 + 1 + 1
jaunic + 2
temp + 1 + 1
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
逢场作旭 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
笑脸 + 1
hetao8003200 + 2
weizuqiang + 1 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
hnymsh + 2
sm5186 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
brswbx201610 + 1
asforce + 1 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
futinglong + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
741gm + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
小神 + 1
SmallEXpel + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
suhongjie + 1 写的很好
dhway + 1
mengzhisuoliu + 1
6378895 + 1 + 1 [快捷评语]--2021年,我们爱0爱1
谈心123 + 1 [快捷评语]--积极评分,从我做起。感谢分享!
mengzhisuoliu1 + 1
goldmvp + 1 [通知]学破解论坛即将在近期更名为吾爱汇编论坛WWW.52HB.COM
保安 + 1 [快捷评语]--你将受到所有人的崇拜!
lies + 1
小白小白上楼梯 + 1 [快捷评语]--评分=感恩!简单却充满爱!感谢您的作品!
迷途狂狼 + 1
DiskGenius + 2 + 1 [快捷评语]--评分=感恩!简单却充满爱!感谢您的作品!
playboy + 1
大狮子 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
king51999 + 1 [快捷评语]--吃水不忘打井人,给个评分懂感恩!
hotD + 1 + 1
方长 + 1 [快捷评语] - 吃水不忘打井人,给个评分懂感恩!
海天一色001 + 1 [快捷评语] - 分享精神,是最值得尊敬的!
2250372869 + 1 评分=感恩!简单却充满爱!感谢您的作品!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
FraMeQ 发表于 2015-6-10 08:08 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
fywy 发表于 2015-6-10 08:15 | 显示全部楼层

学习了!!!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ningzhonghui 发表于 2015-6-10 08:22 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
redhat008 发表于 2015-6-10 09:19 | 显示全部楼层

这个很详细,楼主厉害
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
fy88 发表于 2015-6-10 09:36 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Mrsin 发表于 2015-6-10 09:43 | 显示全部楼层

  师傅写的好详细!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| herowuking 发表于 2015-6-10 10:08 | 显示全部楼层

Mrsin 发表于 2015-6-10 09:43
师傅写的好详细!

我也是菜鸟,跟大家一起探讨,写详细点是为了像我一样的初入门者也能看懂

点评

Mrsin”点评说:
支持!  发表于 2015-6-10 12:31
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
有何不可 发表于 2015-6-10 10:15 | 显示全部楼层

感谢分享   学习学习
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ysouyno 发表于 2015-6-10 12:29 | 显示全部楼层

谢谢楼主分享,最近正在整这个
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表