首页 IDA学习笔记IDA学习笔记20091020

IDA学习笔记IDA学习笔记20091020

举报
开通vip

IDA学习笔记IDA学习笔记20091020做网站不容易啊,真心期待你的支持: 户外用品品牌网:www.883u.com IDA学习笔记 【文章标题】: IDA学习笔记 【文章作者】: GoodGavin 【作者邮箱】: gavin_soung@163.com 【编写语言】: Microsoft Visual C++ 6.0 【使用工具】: IDA5.2, Hex-Rays.Decompiler.v1.0(IDA插件), OD,UltraEidt 【操作平台】: Winxp 【时 间】: 2009年10月 【作者说明】: IDA据说是个好东西,功...

IDA学习笔记IDA学习笔记20091020
做网站不容易啊,真心期待你的支持: 户外用品品牌网:www.883u.com IDA学习笔记 【文章标 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 】: IDA学习笔记 【文章作者】: GoodGavin 【作者邮箱】: gavin_soung@163.com 【编写语言】: Microsoft Visual C++ 6.0 【使用工具】: IDA5.2, Hex-Rays.Decompiler.v1.0(IDA插件), OD,UltraEidt 【操作平台】: Winxp 【时 间】: 2009年10月 【作者说明】: IDA据说是个好东西,功能也很强大。但确实不易上手。学习一下,顺便做点笔记。从零开始吧!希望大家指正。(原来只要找,IDA的资料还是很多的,推广有效!) 【详细过程】 用最简单的CM做实验。 首先帮助里说了: If you are starting to use IDA for the very first time, there are some commands you will find very useful: - convert to instruction(转换成指令) : the hotkey is "C" - convert to data (转换成数据): the hotkey is "D" 在IDA View-A窗口的指令或数据上按上述按键进行指令和数据的转换,算是学习的第一步。 第一次交锋:根据OD的使用情况,查找字符串。(快捷键:shift +F12)。 IDA中的菜单命令位置如下图: 或者菜单上的按钮: 在String窗口中找到关键字符串: 双击,来到IDA View-A代码窗口: 这句: data:00403020 aFail db 'fail!',0 ; DATA XREF: .text:004016A6 o 双击后面的004016A6地址,来到使用fail数据的代码处(这样就是方便哦!) 鼠标单击loc_4016A2:标签,所有的都会高亮显示。(这个功能very good!) 第二次交锋:更改代码,爆破 有两处地方跳到了注册失败。OK,改掉他就算爆破了! 可是怎么改了?用OD,Ultraedit,WinHex都可以改。但是强大的IDA不会没有这个功能吧?不知道怎么办?学习第一招:查帮助或者手册(Help->Help Index),如果E文不好,看雪有中文版的。 更改指令的菜单位置为:Main Menu Bar -> Edit -> Patch Program功能。高兴啊! 结果发现我的IDA中没有这个子菜单。无语。 学习第二招:搜索引擎 百度搜索:“IDA 没有 patch program 菜单”,看到这篇: http://bbs.blueshow.net/thread-303604-1-1.html 原来要设置IDA的配置文件。 修改IDA的cfg目录下的idagui.cfg文件: DISPLAY_PATCH_SUBMENU = NO 改为 DISPLAY_PATCH_SUBMENU = YES 更改配置文件之后,选中要更改的那行指令,然后选择Main Menu Bar -> Edit -> Patch Program ->change byte 弹出对话框: 把74 15改为 90 90,这条指令是两个字节的, 通过如下方法可以在IDA中看到: 当然经过如下设置,可以和OD一样看到指令的机器码: Options -> general -> number of opcode bytes  设定一个数(显示几个字节的机器码) 但是个人觉得,显示上之后没有原来的样子好看了。(*^__^*) 嘻嘻…… (这里有个功能,记忆之前改的数据,个人反而觉得不好用。第二次敲90 直接把第一次改的那串数据放进去了,这样还得把整行的数据都敲一遍。) 如何保存更改后的程序? 据说 File -> Product file -> Create EXE file是这个功能,可惜: 帮助: IDA produces executable files only for: - MS DOS .exe - MS DOS .com - MS DOS .drv - MS DOS .sys - general binary - Intel Hex Object Format - MOS Technology Hex Object Format For other file formats please create a difference file. 难道PE文件不是general binary?不明白。 File -> Product file -> Create Diff file有效。 生成的dif文件的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 如下: This difference file is created by The Interactive Disassembler myEasyCM.exe 00001675: 75 90 00001676: 2B 90 0000168B: 74 90 0000168C: 15 90 直接用UltraEidt安照如上内容更改数据程序就告破。但是IDA中为啥就找不到这个功能呢? Baidu上没有找到解决的办法,到Google上用E文搜索: 发现相关的说法都是下面的意思(IDA只是对内存中数据的修改,没有写入硬盘。如果需要更改请用HEX Editer。)暂时先放弃用IDA更改了。(留下个问题:1是如何用IDA更改代码) http://www.woodmann.com/forum/showthread.php?t=11146&highlight=ida+patch when you use the patch feature during a debug session it simply patches the processes memory only and also only the database disassembly, no information is written back to disk, so when you relaunch the process the orignal bytes are once again in memory. You really need to also patch the executable with a hex editor, at worse perhapes the IDA write exe might work. If you do patch with a hex editor you can choose from the ida file menu to simply reload the input file, i think this "shouldnt" destroy your database and notes. DataRescue aims the product at the analysis market and this is the simple reason why features such as code modification are actively developed upon. /yates. 第三次交锋: 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 代码 IDA分析代码的能力很强。现在知道的方法有: 1、IDA的Text View 2、IDA 的Graph view 3、Hex-Rays.Decompiler插件的反编译功能,可以生成类C的代码,大大增加易读性 安装这个插件之后,光标定位在函数上,按F5,即会生成源代码。 其他的高级功能我不知道了,另外还有一个教程专门说的他的数据功能的,也学习一下,看看能有什么收获。 好了,MFC生成的代码不仔细看了(水平有限),只针对自己写个判断序列号的函数看一下。比较比较。 看5种代码: 1、OD生成的汇编代码(字符串查找下断或者F12中断法都可以定位关键代码) 2、IDA生成的汇编代码(Text View) IDA有两个有点,一是循环和跳转比较明确,用了不同的箭头表示(粗箭头表示的是循环);二是进行了代码的分析,生成了一些变量,如arg_4,这样可以便于分析。 3、IDA生成的图形代码(Graph View) 当光标定位在函数上时,和Text View-A通过右键菜单切换或者空格键切换。 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 看上去更直观。 4、IDA的Hex-Rays.Decompiler插件生成的类C语言源代码 对于一般人(习惯高级语言的),这个源代码要容易读懂。当然对于习惯于看汇编代码的高手就另当别论了。仅对于本程序而言,第一次看这样生成的代码有些别扭,有些地方不理解,和自己写的方式也有出入。但如果了解了这种代码的特点,对理解代码应该是有帮助的。 这段代码里有些地方不明白:(似乎好好看看编译原理会明白些) 一是*(_BYTE *)v3是什么意思?应该是取a1[v3],但是对这句不理解。 二是strlen(a1) == 1的时候就表示成功,为什么不是零? 更改*(_BYTE *)v3为a1[v3];strlen(a1) 为 strlen(a1)+1和原始的代码结果相同。函数用如下方式调用。 sub_401590(serial, (name - serial) ) \\参看汇编代码,可以更清楚的理解为什么会这样 5、我自己写的代码(供参考) 第四次交锋:用IDA运行程序 据说IDA动态调试程序的功能还不强大(不然OD就该下岗了)。 但他还是有动态调试功能的,尝试一下。 首先说明一下之前在IDA View-A窗口中更改的代码对调试状态的代码没有影响(最初尝试运行更改后的程序,希望可以看到效果,结果发现无效。或许是我不会设置吧)。需要在调试器运行的状态下更改代码(F1键说:如果在调试器处于活动状态引用这条命令[patch program],IDA会修改内存和数据库。如果数据库不包含修改的字节,那么进程内存将会被修改。) 打开调试器窗口,运行代码。这时候会有几个新窗口。IDA View-EIP,IDA View-ESP,Thread等,在IDA View-EIP中找到关键跳,改掉。单击sign(注册),输入任意用户名和序列号都提示成功了。 F2依然是下断点,依然可以查找字符串和函数,基本的调试还是没有问题的。 点击黑色的箭头窗口会显示相应的地址或堆栈的内容,当然选择EIP后的黑色箭头回到代码位置。 有个问题是如果我关闭了IDA View-EIP和IDA View-ESP窗口,不知道如何再次打开。尝试Open -> View subviews -> Disassembly,在不停止调试的状态下可以同样使用,但如果重新开始调试之后,再用如上方式打开IDA View-A,则无法显示代码。在IDA View-EIP或ESP窗口右键更改synchronize with选项,依然会导致下次不能正常运行,应该是运行设置的问题,但没找到设置的地方 第五次交锋:不识别的函数 注册按钮单击后的代码如下,IDA没有认出这是一个函数,因此图形视图(Graph View)和F5反编译源码功能都不能用。 Align的作用是指令对齐,应该是伪指令。 .text:004015DC align 10h .text:004015E0 sub esp, 0C8h ……………………………………… .text:00401672 cmp ecx, edx .text:00401674 pop ebx .text:00401675 jnz short loc_4016A2 ;关键跳 .text:00401677 lea eax, [esp+0] .text:0040167B lea ecx, [esp+64h] .text:0040167F push eax .text:00401680 push ecx .text:00401681 call sub_401590 ;调用关键代码 .text:00401686 add esp, 8 .text:00401689 test eax, eax .text:0040168B jz short loc_4016A2 ;关键跳 .text:0040168D push 0 .text:0040168F push 0 .text:00401691 push offset aSuccess ; "success!" .text:00401696 call ?AfxMessageBox@@YGHPBDII@Z ; AfxMessageBox(char const *,uint,uint) .text:0040169B add esp, 0C8h .text:004016A1 retn .text:004016A2 ; --------------------------------------------------------------------------- .text:004016A2 .text:004016A2 loc_4016A2: ; CODE XREF: .text:00401675 j .text:004016A2 ; .text:0040168B j .text:004016A2 push 0 .text:004016A4 push 0 .text:004016A6 push offset aFail ; "fail!" .text:004016AB call ?AfxMessageBox@@YGHPBDII@Z ; AfxMessageBox(char const *,uint,uint) .text:004016B0 add esp, 0C8h .text:004016B6 retn .text:004016B6 ; --------------------------------------------------------------------------- .text:004016B7 align 10h .text:004016C0 mov eax, [ecx] .text:004016C2 jmp dword ptr [eax+0D0h] .text:004016C2 ; --------------------------------------------------------------------------- .text:004016C8 align 10h .text:004016D0 怎么办?在这段代码的开始align 10h指令的后的一条指令上点击右键->Create Function(快捷键P),OK,整段代码被IDA识别伪一个函数了。 如果不在开始的位置Create Function,会导致函数识别错误。如下图: Sp-analysis failed(堆栈分析错误) ——堆栈不平衡了 这个时候,Graph View和F5源代码都有了: 如果想恢复原来不识别这个函数的状态怎么办?在函数开始的标签上(text:004015E0 sub_4015E0 proc near)“右键->Undefine(快捷键u)”这时整段代码变为数据(未定义状态),提示:Do you want to undifine the current function? 选Yes(确认)。 再“右键->Code(快捷键c)”,就恢复了。 第六次交锋:保存更改的的指令。(未完成的战斗) 说到爆破的时候,遇到更改代码,在IDA中没有找到找到相应的功能,据我查到的不完全资料,似乎需要其他工具予以辅助。但同时,IDA生成的dif文件其实已经将所有的更改信息 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 了下来,只要很简单的代码就可以实现保存更改程序的功能。开始想正好可以尝试着写个简单插件,无奈水平很有限,最近也没有太多的时间和精力,就先那C++写个patch程序吧。实践一下,至少算是先把思路记录下来。 读dif文件中的内容(在非调试状态下改动代码之后通过IDA的File->Produce File -> Create DIF File生成);将程序相应的物理地址中的数据改掉(以二进制的方式打开程序并改写程序相应位置就OK了) 物理地址 原始数据 改后数据 00001675: 75 90 00001676: 2B 90 0000168B: 74 90 0000168C: 15 90 用API在IDA中定位关键代码 ? 第一次交锋:根据OD的使用情况,查找字符串。 第二次交锋:更改代码,爆破 第三次交锋:分析代码 第四次交锋:用IDA运行程序 第五次交锋:不识别的函数 第六次交锋:保存更改的的指令。(未完成的战斗)
本文档为【IDA学习笔记IDA学习笔记20091020】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_307571
暂无简介~
格式:doc
大小:929KB
软件:Word
页数:0
分类:互联网
上传时间:2018-09-10
浏览量:43