ollydbg 修改代码如何修改call

OllyDBG简单爆破小记
我的图书馆
OllyDBG简单爆破小记
OllyDBG简单爆破小记
&&& 一假期东逛逛西逛逛……逛荡了好几天。总算是抽空干了点正事,看着教程试着用OllyDBG爆破了一个极简单的TraceMe小程序。东西不难,算是个基础吧。
&模块入口点&&&&&&&&&& PUSH EBP
&&&&程序入口在处。按F9让程序跑起来:
&&&&很清晰的看到这是一个验证用户名和序列号的小程序,那么我们要跟踪的当然是USER32.GetDlgItemText或者类似的API函数。我这里占个便宜,联系程序已经给出是32位ANSI版的,那很自然的我们要锁定USER32.GetDlgItemTextA
&&&&这时,我们可以按Ctrl+N来获取应用程序输入表,很容易我们就能找到我们要的东东~之后按ENTER转入即可。
&&&&当然,也可以用Ctrl+G来跟随这个函数
&&&&总之我们的目的就是找到这个USER32.GetDlgItemTextA的入口,现在我们的目的达到了:
76632AE1 GetDlgItemTextA&&&&&&&&& MOV EDI,EDI
&&&&入口位置在76632AE1。当然这个位置不同系统是不一样的,不必在意。在这里用F2设置一个断点,再用Alt+F9返回TraceMe程序领空。按F9将程序跑起来。用户名和序列号我们随便输入一个即可:
&&&&点击Check之后当然会卡在刚才设置的断点处,再用Alt+F9回到程序领空,我们很容易的就找到了调用USER32.GetDlgItemTextA函数的位置。
&&&&我们用Alt+B打开断点列表,禁用掉76632AE1处的断点,然后在程序调用API函数的地方设置一个新的断点:
004011AE&&& PUSH 51&&&&&&&&&&&&&&&&&&&&&&&& ; /Count = 51 (81.)&&& PUSH EAX&&&&&&&&&&&&&&&&&&&&&&& ; |Buffer&&& PUSH 6E&&&&&&&&&&&&&&&&&&&&&&&& ; |ControlID = 6E (110.)&&& PUSH ESI&&&&&&&&&&&&&&&&&&&&&&& ; |hWnd&&& CALL EDI&&&&&&&&&&&&&&&&&&&&&&& ; \GetDlgItemTextA&&& LEA ECX,DWORD PTR SS:[ESP+9C]004011BD&&& PUSH 65&&&&&&&&&&&&&&&&&&&&&&&& ; /Count = 65 (101.)004011BF&&& PUSH ECX&&&&&&&&&&&&&&&&&&&&&&& ; |Buffer&&& PUSH 3E8&&&&&&&&&&&&&&&&&&&&&&& ; |ControlID = 3E8 (1000.)&&& PUSH ESI&&&&&&&&&&&&&&&&&&&&&&& ; |hWnd&&& MOV EBX,EAX&&&&&&&&&&&&&&&&&&&& ; |&&& CALL EDI&&&&&&&&&&&&&&&&&&&&&&& ; \GetDlgItemTextA
&&&&我们就在这个004011AE处设置一个新的断点,然后再重新来过,把程序再跑一遍。到达这个004011AE处,程序会停住,然后我们就用F8单步执行这个程序。
&&&&在处我们看到命令是PUSH EAX,那么就在旁边的寄存器窗口中右键点击EAX寄存器,选择“数据窗口中跟随”。
&&&&这时下方的数据窗口中就会锁定EAX寄存器指向的位置。我们继续用F8单步跟踪,并注意观察下方的数据窗口。
&&&&运行到时调用API函数,到时,下方的数据窗口显示出我们刚刚输入的用户名:
&&&&同理,运行到004011CA的时候,序列号也会相应的显示出来:
&&&&那么下面就应该是计算用户名和序列号的关键了:
004011CA&&& MOV AL,BYTE PTR SS:[ESP+4C]004011CE&&& TEST AL,AL&&& JE SHORT TraceMe.&&& CMP EBX,5&&& JL SHORT TraceMe.&&& LEA EDX,DWORD PTR SS:[ESP+4C]004011DB&&& PUSH EBX004011DC&&& LEA EAX,DWORD PTR SS:[ESP+A0]&&& PUSH EDX&&& PUSH EAX&&& CALL TraceMe.004011EA&&& MOV EDI,DWORD PTR DS:[&&USER32.GetDlgItem&]&& ;& USER32.GetDlgItem&&& ADD ESP,0C&&& TEST EAX,EAX&&& JE SHORT TraceMe.0040122E
&&&&根据上面的代码可看出,处如果不跳转,则注册成功。
&&&&那么我们可以通过给标志寄存器ZF取反或者直接把处代码修改为控指令来实现我们的爆破。
&&&&后面就是保存文件之类的事情了,不再赘述。而具体的算法分析,就真的是要靠读程序了,这次就不再发了。
&&&&后面小附一个这回常用的OllyDBG快键功能表:
OllyDBG快键
在光标处设置断点/取消断点
OllyDBG结束被调试程序并重新加载
单步步进,遇到CALL跟进
连续步进,遇到CALL跟进
单步步进,遇到CALL路过,不跟进
连续步进,遇到CALL路过,不跟进
直到出现RET指令时中断
若进入系统领空,此命令可瞬间回到应用程序领空
暂停运行程序
查找二进制字串
打开断点窗口
跟随表达式
打开应用程序输入表
TA的最新馆藏
喜欢该文的人也喜欢目录:快速定位vcvs的OnInitDialog;快速定位vcvs的OnInitDialog函数;bpSendMessageWMSG==WM_SE;bpSendMessageAMSG==WM_SE;然后执行代码到返回,整个Call就是OnInit;VB定位按钮;先F9运行,然后查看按钮的窗口句柄;下断点;点击按钮,;bpCallWindowProcA[esp
目录: 快速定位vc vs的OnInitDialog函数 按钮事件定位
VB 定位按钮
VC按钮事件的定位
VC6 Release
VC2003 Release
VS2003 Debug
VS2008 Release
VS2008 Debug
VS2010 Release
VS2010 Debug
更新历史:
更新 VS.15 更新 VS2003
快速定位vc vs的OnInitDialog函数 bp SendMessageW MSG == WM_SETICON 或 bp SendMessageA MSG == WM_SETICON 然后执行代码到返回,整个Call就是OnInitDialog函数了。
VB 定位按钮 先F9运行,然后查看按钮的窗口句柄 下断点
点击按钮,
bp CallWindowProcA [esp+8]==00110BF0 && [esp+0c]==202 Alt + M 查看内存映射,在.text区段下访问断点,F9运行
断在72991F0C
push dword ptr [eax+ebx] VB.004077CD
VB.004077CD按钮的地址。
VC按钮事件的定位 //关于vc搜索二进制确定按钮处理代码的特征,目前都只测试了一个。 vc6 Release版本 动态 就在mfc42.dll中搜索\sub eax, 0a\静态 就在主模块中搜索\sub eax, 0a\
sub eax, 0xA
je XTestBtn. ...
|> \\8B4D 08
mov ecx, dword ptr ss:[ebp+0x8]
Case C of switch 0041661A
call dword ptr ss:[ebp+0x14] call dword ptr ss:[ebp+0x14]
//此函数就是Button的处理函数。
动态 在MFC75D.dll中二进制搜索
75 E3 8B 4D 08 FF 55 FC
在主模块中二进制搜索
75 E3 8B 4D 08 FF 55 FC
VS2003 Release 动态:在mfc71.dll中搜索
5E C2 ?? ?? 8B 4D ?? FF 55 ?? E9
静态 在主模块中搜索 FF 24 85 ?? ?? ?? ?? 8B 4D ?? FF 55 14
VS2003 Debug 共享 MFC71d.dll中搜索 静态 主模块中搜索 85 C0 74 01 CC 8B 4D 08 FF 55 ?? E9
VS2008 Release 共享: 在mfc90u.dll中搜索 FF 24 95 ?? ?? ?? ?? FF D0
静态:在主模块中搜索二进制 FF 24 85 ?? ?? ?? ?? FF 55 14
VS2008 Debug 共享 在MFC90ud.dll中搜索 静态 在主模块中搜索 85 C0 74 01 CC 8B 4D 08 FF 55 ?? E9
VS2010 Release
动态:在mfc100*.dll中搜索二进制 FF 24 95 ?? ?? ?? ?? FF D0
静态:在主模块中搜索二进制 FF 24 85 ?? ?? ?? ?? FF 55 14
VS2010 Debug 动态:在mfc100*.dll中搜索二进制:74 01 CC 8B 4D 08 FF 55 F8 静态:在主模块中搜索二进制:74 01 CC 8B 4D 08 FF 55 F8 在call dword ptr ss:[ebp-0x8] 下断点。
一、查找二进制 740E8BD38B83????????FF93????????
三亿文库包含各类专业文献、中学教育、各类资格考试、文学作品欣赏、专业论文、幼儿教育、小学教育、应用写作文书、14ollydbg中快速定位各种语言关键代码的方法等内容。 
 二、基本调试方法 OllyDBG 有三种方式来载入程序进行...只要在光标定位的位置(上图中灰色条)按 F2 键即可...消息断点及 RUN 跟踪 找了几十个不同语言编写的 ...  二、基本调试方法 OllyDBG 有三种方式来载入程序进行...只要在光标定位的位置 (上图中灰色条) F2 键即可...(五)-消息断点及 RUN 跟踪找了几十个不同语言...  软件逆向分析过程中 基于 OllyDbg 的三种汇编代码定位方法【摘要】 软件逆向分析技术在信息安全领域发挥着至关重要的作 用。软件逆向分析过程中,对汇编代码的定位速度...  ollydbg的使用教程_计算机软件及应用_IT/计算机_专业...下面是我的程序 (没有特指哪种语言): main() {...在首次编写这个程序时, 各种 DLL 中的函数被调用,...  OD各种编程语言查找按钮事件_计算机软件及应用_IT/计算机_专业资料。OD中按钮事件 一、VB 程序 其实,VB 的按纽事件的找法是最为普遍的,也就是大家所谓的万能断点...  窗口:OllyDbg 能够列出关于调试程序中的各种窗口,并且...面向对象的语言(如 C++) ,使用了一种叫做名称修饰...我再用 20 多种 高效的启发方法(最简单的方法,...  二、基本调试方法 OllyDBG 有三种方式来载入程序进行...只要在光标定位的位置(上图中灰色条)按 F2 键即可...t=21532 实验程序: cycle.zip 了几十个不同语言...  析方法,而这些都必须在熟悉OllyDbg使用的情况下才能...提示信息,根据提示信息查找关键Call和关键跳 转指令...显示Cirlce小程序无壳,用的是汇编语言编写,运行相应...编辑-->填充位NOP...保存修改到文件,测试一下,打开再也没有那个提示了,清静~~第二步,修配置文件cfg.ini的名字位MoreMenu.ini,并且位置放在OD根目录下。这是本处女文的分析重点---PE文件格式学习重新用OD1附加调试加载了OllyMoreMenu 1.5+插件的OD2按Alt+E 打开可执行模块视图,在OllyMoreMenu 1.5+插件模块上面点击右键,在CPU中查看代码,来到MoreMenu插件的入口点:CPU Disasm地址& && && &&&十六进制数据& && && && &指令& && && && && && && && && && && && &&&注释& && && && && && && && && && && && && && && && && && && && && && && && && &标签 Oll& &55& && && && &&&PUSH EBP& && & 8BEC& && && && &MOV EBP,ESP& && & 837D 0C 01& && &CMP DWORD PTR SS:[EBP+0C],1& && & 75 09& && && &&&JNE SHORT & && & FF75 08& && && &PUSH DWORD PTR SS:[EBP+8]1000100C& && & 8F05 & &POP DWORD PTR DS:[]& && & B8 & &&&MOV EAX,1& && & C9& && && && &&&LEAVE& && & C2 0C00& && && &RETN 0C1000101B ODB& &55& && && && &&&PUSH EBP1000101C& && & 8BEC& && && && &MOV EBP,ESP1000101E& && & 68 F1410010& &&&PUSH OFFSET & && && && && && &&&UNICODE 'MAIN'& && & FF75 08& && && &PUSH DWORD PTR SS:[EBP+8]& && & FF15 & &CALL DWORD PTR DS:[]1000102C& && & 83C4 08& && && &ADD ESP,81000102F& && & 85C0& && && && &TEST EAX,EAX& && & 75 07& && && &&&JNE SHORT 1000103A& && & B8 A9410010& &&&MOV EAX,OFFSET & && && && && &&&到 PTR UNICODE 'Add Menu'& && & C9& && && && &&&LEAVE& && & C3& && && && &&&RETN1000103A& && & 33C0& && && && &XOR EAX,EAX1000103C& && & C9& && && && &&&LEAVE1000103D& && & C3& && && && &&&RETN1000103E ODB& &55& && && && &&&PUSH EBP1000103F& && & 8BEC& && && && &MOV EBP,ESP& && & 817D 08 C900000 CMP DWORD PTR SS:[EBP+8],0C9& && & 73 04& && && &&&JAE SHORT 1000104E1000104A& && & 33C0& && && && &XOR EAX,EAX1000104C& && & C9& && && && &&&LEAVE1000104D& && & C3& && && && &&&RETN1000104E& && & A1 9C300010& &&&MOV EAX,DWORD PTR DS:[& && & FF30& && && && &PUSH DWORD PTR DS:[EAX]& && & 8F05 C4440010& &POP DWORD PTR DS:[]1000105B& && & 68 & &&&PUSH 104& && & 68 & &&&PUSH OFFSET & && && && && && &&&ASCII 'C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.ini'& && & FF35 & &PUSH DWORD PTR DS:[]<font color='#ff6B& && & E8 A8190000& &&&CALL
跳转至 kernel32.GetModuleFileNameA& && & 68 & &&&PUSH OFFSET & && && && && && &&&ASCII 'C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.ini'& && & E8 401A0000& &&&CALL
跳转至 SHLWAPI.PathRemoveFileSpecA1000107A& && & 68 & &&&PUSH OFFSET & && && && && && &&&ASCII 'C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.ini'1000107F& && & 68 & &&&PUSH OFFSET & && && && && && &&&ASCII 'C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.bak'& && & E8 CB190000& &&&CALL & && && &&&跳转至 kernel32.lstrcpy& && & 68 FB410010& &&&PUSH OFFSET 100041FB& && && && && && &&&ASCII '\cfg.bak'1000108E& && & 68 & &&&PUSH OFFSET & && && && && && &&&ASCII 'C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.bak'& && & E8 B0190000& &&&CALL & && && &&&跳转至 kernel32.lstrcat& && & 68 & &&&PUSH OFFSET & && && && && && &&&ASCII '\cfg.ini'1000109D& && & 68 & &&&PUSH OFFSET & && && && && && &&&ASCII 'C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.ini'& && & E8 A1190000& &&&CALL & && && &&&跳转至 kernel32.lstrcat& && & 6A 4F& && && &&&PUSH 4F& && & 6A 02& && && &&&PUSH 2看到了吧,这个红色标注的CALL就是获得当前模块路径和文件名的,它有三个参数:hModuleLong一个模块的句柄。可以是一个DLL模块,或者是一个应用程序的实例句柄。如果该参数为NULL,该函数返回该应用程序全路径。lpFileNameString指定一个字串缓冲区,要在其中容纳文件的用NULL字符中止的路径名,hModule模块就是从这个文件装载进来的nSizeLong装载到缓冲区lpFileName的最大字符数量原插件里面,参数hModuleLong(CALL之上,最后一个PUSH处)传入的是插件本身的Module句柄,那么获得的就是插件所在的Plugin目录了,如果我们把这里修改位NULL就可以了。。。简单的把PUSH DWORD PTR DS:[] 用NOP填充,然后再改为Push 0么?肯定不能这么简单了,因为在OD窗口可以看到这条指令前面的二进制数下面有下划线,有下划线代表这这里是“重定位”的了。记住重定位的VA地址:<font color='#ff67 (注意,不是,下划线开始的那个字节才是!!!前面是指令二进制字节码,后面是操作数)累死了,搞了半天才引出PE文件格式。。。。。。开始吧:用StudPE打开OllyMoreMenu_1.5+.dll,再点工具-->Hex编辑器,调用WinHex打开它。。。StudPE用来定位,WinHex用来修改找到了Raw---文件中重定位表的起始的地址了吧,在WinHex中定位:重定位表的数据结构如下图所示:所以我们知道这个插件的重定位表有三个块儿组成,每个块儿里面基本都是“ 4字节的RVA起始地址 + 4字节的块儿长度 + Word型重定位项”组成,重定位项里面高4位是重定位类型,一般都是3,后12位(16进制对应的就是3位)是偏移地址。对于上面OD找到的地址位重定位数据,减去模块基址,减去页的起始RVA地址 即是
- 1000000 - 1000 = 67那么重定位项就是 67 30 (小端机,高低字节对调知道吧),WinHex里面的物理地址3616位置能找到它。。。去掉这个重定位(改为00 00),才可以后续再OD里面修改PUSH DWORD PTR DS:[]位PUSH 0直接上图:再用OD打开调试,么有重定位了吧:剩下,就简单了,用NOP填充PUSH DWORD PTR DS:[]再修改为PUSH 0:保存到可执行文件即可然后,把Plugin目录里面的cfg.ini移动到OD2根目录,并重命名为MoreMenu.ini,用WinHex再次打开MoreMenu插件查找搜索cfg.ini文本:对照知道,这是在.data数据段里面的,一般字符串都存在数据段找一个Ascii码查询工具,查询你想修改的配置文件名字MoreMenu.bak MoreMenu.ini的Ascii码:在刚才数据段上面找一块儿全是00 而且在OD内存模块中查看没有被使用的区域,我选择的是2D50起始地址:剩下的,对照这OD里面:<font color='#ff89& && & 68 FB410010& &&&PUSH OFFSET 100041FB& && && && && && &&&ASCII '\cfg.bak'1000108E& && & 68 & &&&PUSH OFFSET & && && && && && &&&ASCII 'C:\Users\3DPEDesign\Desktop\OllyDBG v2.01h\plugin\cfg.bak'& && & E8 B0190000& &&&CALL & && && &&&跳转至 kernel32.lstrcat& && & 68 & &&&PUSH OFFSET & && && && && && &&&ASCII '\cfg.ini'修改物理地址 489 和499的字节码了(物理地址怎么找见下图里面的文字解释):因为上面新加的两个字符串起始地址分别是2D50 和 2D5E,它们在.data数据块儿内,VA地址就是:DLL模块基地址+.data段RVA+(字符串物理地址-.data段的物理起始地址)2D50的VA:0+(2D50-2C00) = 2D5E的VA:0+(2D5E-2C00) = 1000415E所以,把物理地址489处的字节码改为 50 41,499处的字节码改为5E 41 存盘,测试一下把~~下面贴上我学习PE格式的思维导图:我修改好的OllyMoreMenu_1.5+h5.dll 和 MoreMenu.ini配置文件:游客,如果您要查看本帖隐藏内容请申明:本文属于处女贴,不妥之处请大侠们指点,但是不要喷,我也是在学习中。。。
TA的最新馆藏
喜欢该文的人也喜欢2012年10月 其他开发语言大版内专家分月排行榜第二2011年7月 其他开发语言大版内专家分月排行榜第二2010年3月 其他开发语言大版内专家分月排行榜第二2007年10月 其他开发语言大版内专家分月排行榜第二2007年9月 其他开发语言大版内专家分月排行榜第二2005年3月 Windows专区大版内专家分月排行榜第二2005年2月 Windows专区大版内专家分月排行榜第二2005年6月 扩充话题大版内专家分月排行榜第二2006年9月 其他开发语言大版内专家分月排行榜第二2006年5月 其他开发语言大版内专家分月排行榜第二2006年3月 其他开发语言大版内专家分月排行榜第二2006年2月 其他开发语言大版内专家分月排行榜第二2005年12月 其他开发语言大版内专家分月排行榜第二2005年4月 其他开发语言大版内专家分月排行榜第二2004年11月 其他开发语言大版内专家分月排行榜第二2005年3月 硬件使用大版内专家分月排行榜第二
2011年11月 其他开发语言大版内专家分月排行榜第三2011年8月 其他开发语言大版内专家分月排行榜第三2008年10月 其他开发语言大版内专家分月排行榜第三2004年9月 硬件/嵌入开发大版内专家分月排行榜第三
2011年10月 其他开发语言大版内专家分月排行榜第三2010年8月 其他开发语言大版内专家分月排行榜第三2007年5月 其他开发语言大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2011年10月 其他开发语言大版内专家分月排行榜第三2010年8月 其他开发语言大版内专家分月排行榜第三2007年5月 其他开发语言大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。想通过ollydbg对软件进行脱壳【c吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:92,116贴子:
想通过ollydbg对软件进行脱壳收藏
大神们,跪求如何查找OEP入口点。我在网上找见很多方法,都行不懂。公司让我把英文版的软件翻译成中文的,软件有壳得先脱掉。今天是我第二天上班,是我毕业以后第一份工作 我好珍惜这份工作。求解答,解答出来发红包 真的会发 不发者天打五雷轰。今天是我最后一天期限啦 求帮帮忙
ollydbg 不能对软件脱壳吧,你会不会听错了?首先得用PEid查壳,很多软件查不到壳的,你要注意软件会有什么提示信息,比喻说需要注册之类的信息,直接载入OD,查找字符串后,再就看的跳或call,要么修改它的关键跳,要么单步步入call修改,call中修改主要是针对有很多关键跳,否则直接jmp或nop,修改好就可以直接保存文件了
可怜的楼主唉?
我也做了段时间的逆向,不好弄啊?
登录百度帐号推荐应用

我要回帖

更多关于 ollydbg 修改代码 的文章

 

随机推荐