IDA学习笔记文档格式.docx
- 文档编号:15309696
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:13
- 大小:621.04KB
IDA学习笔记文档格式.docx
《IDA学习笔记文档格式.docx》由会员分享,可在线阅读,更多相关《IDA学习笔记文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
学习一下,顺便做点笔记。
从零开始吧!
希望大家指正。
(原来只要找,IDA的资料还是很多的,推广有效!
)
【详细过程】
用最简单的CM做实验。
首先帮助里说了:
IfyouarestartingtouseIDAfortheveryfirsttime,therearesomecommandsyouwillfindveryuseful:
-converttoinstruction(转换成指令):
热键是"
C"
-converttodata(转换成数据):
热键是"
D"
在IDAView-A窗口的指令或数据上按上述按键进行指令和数据的转换,算是学习的第一步。
第一次交锋:
根据OD的使用情况,查找字符串。
(快捷键:
shift+F12)。
IDA中的菜单命令位置如下图:
或者菜单上的按钮:
在String窗口中找到关键字符串:
双击,来到IDAView-A代码窗口:
这句:
data:
00403020aFaildb'
fail!
'
0;
DATAXREF:
.text:
004016A6_o
双击后面的004016A6地址,来到使用fail数据的代码处(这样就是方便哦!
鼠标单击loc_4016A2:
标签,所有的都会高亮显示。
(这个功能verygood!
第二次交锋:
更改代码,爆破
有两处地方跳到了注册失败。
OK,改掉他就算爆破了!
可是怎么改了?
用OD,Ultraedit,WinHex都可以改。
但是强大的IDA不会没有这个功能吧?
不知道怎么办?
学习第一招:
查帮助或者手册(Help->
HelpIndex),如果E文不好,看雪有中文版的。
更改指令的菜单位置为:
MainMenuBar->
Edit->
PatchProgram功能。
高兴啊!
结果发现我的IDA中没有这个子菜单。
无语。
学习第二招:
搜索引擎
XX搜索:
“IDA没有patchprogram菜单”,看到这篇:
原来要设置IDA的配置文件。
修改IDA的cfg目录下的idagui.cfg文件:
DISPLAY_PATCH_SUBMENU=NO
改为
DISPLAY_PATCH_SUBMENU=YES
更改配置文件之后,选中要更改的那行指令,然后选择MainMenuBar->
PatchProgram->
changebyte
弹出对话框:
把7415改为9090,这条指令是两个字节的,
通过如下方法可以在IDA中看到:
当然经过如下设置,可以和OD一样看到指令的机器码:
Options->
general->
number
of
opcode
bytes
设定一个数(显示几个字节的机器码)
但是个人觉得,显示上之后没有原来的样子好看了。
(*^__^*)嘻嘻……
(这里有个功能,记忆之前改的数据,个人反而觉得不好用。
第二次敲90直接把第一次改的那串数据放进去了,这样还得把整行的数据都敲一遍。
如何保存更改后的程序?
据说File->
Productfile->
CreateEXEfile是这个功能,可惜:
帮助:
IDAproducesexecutablefilesonlyfor:
-MSDOS.exe
-MSDOS.com
-MSDOS.drv
-MSDOS.sys
-generalbinary
-IntelHexObjectFormat
-MOSTechnologyHexObjectFormat
Forotherfileformatspleasecreateadifferencefile.
难道PE文件不是generalbinary?
不明白。
File->
CreateDifffile有效。
生成的dif文件的内容如下:
ThisdifferencefileiscreatedbyTheInteractiveDisassembler
myEasyCM.exe
00001675:
7590
00001676:
2B90
0000168B:
7490
0000168C:
1590
直接用UltraEidt安照如上内容更改数据程序就告破。
但是IDA中为啥就找不到这个功能呢?
Baidu上没有找到解决的办法,到Google上用E文搜索:
发现相关的说法都是下面的意思(IDA只是对内存中数据的修改,没有写入硬盘。
如果需要更改请用HEXEditer。
)暂时先放弃用IDA更改了。
(留下个问题:
1是如何用IDA更改代码)
whenyouusethepatchfeatureduringadebugsessionitsimplypatches
theprocessesmemoryonlyandalsoonlythedatabasedisassembly,no
informationiswrittenbacktodisk,sowhenyourelaunchtheprocessthe
orignalbytesareonceagaininmemory.
Youreallyneedtoalsopatchtheexecutablewithahexeditor,atworse
perhapestheIDAwriteexemightwork.Ifyoudopatchwithahexeditor
youcanchoosefromtheidafilemenutosimplyreloadtheinputfile,ithink
this"
shouldnt"
destroyyourdatabaseandnotes.
DataRescueaimstheproductattheanalysismarketandthisisthesimple
reasonwhyfeaturessuchascodemodificationareactivelydevelopedupon.
/yates.
第三次交锋:
分析代码
IDA分析代码的能力很强。
现在知道的方法有:
1、IDA的TextView
2、IDA的Graphview
3、Hex-Rays.Decompiler插件的反编译功能,可以生成类C的代码,大大增加易读性
安装这个插件之后,光标定位在函数上,按F5,即会生成源代码。
其他的高级功能我不知道了,另外还有一个教程专门说的他的数据功能的,也学习一下,看看能有什么收获。
好了,MFC生成的代码不仔细看了(水平有限),只针对自己写个判断序列号的函数看一下。
比较比较。
看5种代码:
1、OD生成的汇编代码(字符串查找下断或者F12中断法都可以定位关键代码)
2、IDA生成的汇编代码(TextView)
IDA有两个有点,一是循环和跳转比较明确,用了不同的箭头表示(粗箭头表示的是循环);
二是进行了代码的分析,生成了一些变量,如arg_4,这样可以便于分析。
3、IDA生成的图形代码(GraphView)
当光标定位在函数上时,和TextView-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就该下岗了)。
但他还是有动态调试功能的,尝试一下。
首先说明一下之前在IDAView-A窗口中更改的代码对调试状态的代码没有影响(最初尝试运行更改后的程序,希望可以看到效果,结果发现无效。
或许是我不会设置吧)。
需要在调试器运行的状态下更改代码(F1键说:
如果在调试器处于活动状态引用这条命令[patchprogram],IDA会修改内存和数据库。
如果数据库不包含修改的字节,那么进程内存将会被修改。
打开调试器窗口,运行代码。
这时候会有几个新窗口。
IDAView-EIP,IDAView-ESP,Thread等,在IDAView-EIP中找到关键跳,改掉。
单击sign(注册),输入任意用户名和序列号都提示成功了。
F2依然是下断点,依然可以查找字符串和函数,基本的调试还是没有问题的。
点击黑色的箭头窗口会显示相应的地址或堆栈的内容,当然选择EIP后的黑色箭头回到代码位置。
有个问题是如果我关闭了IDAView-EIP和IDAView-ESP窗口,不知道如何再次打开。
尝试Open->
Viewsubviews->
Disassembly,在不停止调试的状态下可以同样使用,但如果重新开始调试之后,再用如上方式打开IDAView-A,则无法显示代码。
在IDAView-EIP或ESP窗口右键更改synchronizewith选项,依然会导致下次不能正常运行,应该是运行设置的问题,但没找到设置的地方
第五次交锋:
不识别的函数
注册按钮单击后的代码如下,IDA没有认出这是一个函数,因此图形视图(GraphView)和F5反编译源码功能都不能用。
Align的作用是指令对齐,应该是伪指令。
.text:
004015DCalign10h
004015E0subesp,0C8h
………………………………………
00401672cmpecx,edx
00401674popebx
00401675jnzshortloc_4016A2;
关键跳
00401677leaeax,[esp+0]
0040167Bleae
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IDA 学习 笔记