相关资讯

金晨 ai换脸 IDA Pro 使用妙技、动态调式 so、monitor.bat

发布日期:2025-07-04 12:49    点击次数:76

金晨 ai换脸 IDA Pro 使用妙技、动态调式 so、monitor.bat

​From:IDA Pro7.0 使用 妙技 回来:https://www.52pojie.cn/thread-886103-1-1.html IDA Pro 7.7 全插件绿色版:https://www.chinapyg.com/thread-142494-1-1.html hex-ray 官网 ida pro 版块 :https://hex-rays.com/products/ida/news/ hex-ray 官网文档:https://hex-rays.com/documentation/金晨 ai换脸

​安全关连著作 ( 车联网 ):https://zhuanlan.zhihu.com/p/559716931 向分析东说念主员常用 API 列表:https://zhuanlan.zhihu.com/p/465387959 IDA Pro反汇编器具初识及逆向工程解密实战:https://zhuanlan.zhihu.com/p/461862715

俗语说,工欲善其事,必先利其器,在二进制安全的学习中,​使用器具尤为垂危,而 IDA 又是玩二进制的神器。参考《IDA pro巨擘指南》(第二版),纪录一些使用过程。

IDA Pro 装配得胜会后会清醒两个运行标准 “IDA Pro(32bit)” 和 “IDA Pro(64bit)”,分别对应32位和64位标准的分析。idaq.exe讲求反编译32位可实施文献,idap64.exe讲求反编译64位可实施文献。IDA 解救常见的PE款式,DOS、UNIX、Mac、Java、.NET 等平台的文献款式。

:https://bbs.kanxue.com/thread-271124.htm

硬件断点、软件断点

硬件断点:由硬件特质结束(数量有限),是通过监测地址来触发断点的。是以,硬件断点不错树立在职何地点,无论是 FLASH,ROM 照旧 RAM,只消给定地址就不错了。软件断点:是通过监测特定的指示来触发断点的。在某个地址树立软件断点的时候,仿真器会将这个地址的 "数据 / 指示" 替换成一个特殊款式的指示。断点单元通过监测这个特殊款式的指示来触发断点。因为需要实施替换操作,是以软件断点只可树立在RAM里面。软件断 适用于运行于内存中的标准(软件结束)。以x86为例,向某个地址打入断点,践诺上即是往该地址写入断点指示INT 3,即0xCC。洽商标准运行到这条指示之后就会触发SIGTRAP信号,gdb拿获到这个信号,证据洽商标准现时住手位置查询gdb爱戴的断点链表,若发目前该地址如实存在断点,则可判定为断点掷中。

硬件断点是对地址的顺利监测,依赖于CPU寄存器,是以数量有限,软件断点因为是监测替换后指示平素是无穷的。硬件断点比软件断点的功能更强。硬件断点的骨子即是在指定内存下断点,内存不错位于代码段(函数断点)也不错是数据段(数据断点)。不错树立事件有实施、写入、读写时中断。

1、一些 二进制 器具

在《IDA pro巨擘指南》的开篇一两章中,先是先容了几款常用于二进制洽商的器具,我这里简便的记了几个,先容一波:

C++filt:不错用于清醒出c++中复杂的重载后的函数称号PE tools:是一组用于分析Windows系统中正在运行的进度和可实施文献的器具string:不错用于顺利搜索出 elf 文献中的扫数字符串。参数 -a 暗示搜索通盘文献,参数 -t 不错清醒出每一个字符串的偏移,参数-e 不错用于搜索更多的字符编码的字符串,如Unicode编码strip:可用于 elf 去标记,去标记后仍然保持正常功能但加多了逆向的难度,出题恶东说念主必备

开发 IDA 的天才是 Ilfak,他的个东说念主博客有好多 IDA 的教程:https://www.hexblog.com/

linux 下可实施文献分析

:https://zhuanlan.zhihu.com/p/319710983

1. file 可实施文献  可稽查可实施文献是ARM架构照旧X86架构2. nm 可实施文献 可稽查文献中的标记,包括全局变量,全局函数等3. ldd 可实施文献 可稽查文献实施所需要的动态库4. strings 可实施文献 可稽查文献中扫数的标记,包括编译器版块信息5. readelf 可实施文献 可稽查文献的扫数详信服息,包括文献的头信息,动态库信息,段信息等  file 基本信息稽查

linux 下有个最常用的通用大喊,来分析任何文献的基本款式,那即是file 不错看到基本信息,比如是什么类型文献,只是详细,还有些其他选项,不错用-h 稽查。

-b:列出辨识结束时,不清醒文献称号;-c:详确清醒指示实施过程,便于排错或分析标准实施的情形;常与 -m 一说念使用,用来在装配幻数文献之前调试它-f <文献名>:指定一个或多个文献名,让file依序辨识这些文献,款式为每列一个文献称号;-L:顺利清醒标记联接所指向的文献类别;-m <魔法数字文献>:指定魔法数字文献;-v:清醒版块信息;-z:尝试去解读压缩文献的内容。-i:清醒MIME类别 ldd 打印标准依赖的分享库

-v    详信服息模式,打印扫数关连信息 -u    打印未使用的顺利依赖 -d    实施重定位和叙述任何丢失的对象 -r    实施数据对象和函数的重定位,况兼叙述任何丢失的对象和函数 --help    清醒匡助信息

示例:ldd /bin/vim

xxd

xxd大喊不错为给定的圭臬输入或者文献作念一次十六进制的输出,它也不错将十六进制输出更动为底本的二进制款式,行将轻易文献更动为十六进制或二进制状貌

dd

dd大喊用指定大小的块拷贝一个文献,并在拷贝的同期进行指定的更动。

nm 标记稽查

nm大喊是Linux下自带的广大的文分内析器具,是大喊开首于name的简写。该大喊用来列出指定文献中的标记(如常用的函数名、变量等,以及这些标记存储的区域)。它清醒指定文献中的标记信息,文献不错是对象文献、可实施文献或对象文献库。要是文献中莫得包含标记信息,nm叙述该情况,单不把他诠释为出错。nm缺省情况下叙述十进制标记暗示法下的数字值。

关于一些动态库,顺利nm可能查不到信息,不错通过nm -D大喊稽查。

参数说明:

-A / -o / --print-file-name: 在输出时加上文献名; -a / --debug-syms: 输出扫数标记,包含debugger-only symbols; -B / --format=bsd: BSD码清醒,兼容MIPS nm; -C / --demangle: 将初级标记名观念为用户级名字,不错使得C++函数名更具可读性; -D / --dynamic: 清醒动态标记。该选项只对动态洽商(如特定类型的分享库)有道理; -f format / --format=format 使用format款式输出。format不错中式bsd、sysv或posix,该选项在GNU的nm中有用。默许为bsd -g / --extern-only: 只清醒外部标记; -l / --line-numbers: 关于每个标记,使用debug信息找到文献名和行号; -n / -v / --numeric-sort: 按标记对应地址的规章排序,而非按标记名字字符规章排序; -P /--portability: 按照POSIX2.0圭臬款式输出,等同于使用 -f posix; -p / --no-sort: 按照洽商文献中遭遇的标记规章清醒,不排序; -r / --reverse-sort: 回转排序; -s / --print-armap: 当列出库成员标记时,包含索引。索引的内容:模块和其包含名字的映射; -u / --undefined-only: 只清醒未界说标记; --defined-only: 只清醒界说了的标记。

图片金晨 ai换脸

常用选项: -A    每个标记前清醒文献名 -D    清醒动态标记 -g    仅清醒外部标记 -r    反序清醒标记表

strings 稽查二进制文献中的字符串

strings信息不错打印二进制文献中的字符串信息,结合grep进行搜索,用grep大喊其实不错顺利在二进制文献中搜索内容,然则不够直不雅,用strings看起来的更直不雅些

strings 会把任何可打印字符串都清醒出来,比nm的内容更多

-a --all:扫描通盘文献而不是只扫描洽商文献运行化和装载段 -f --print-file-name:在清醒字符串前先清醒文献名 -n --bytes=[number]:找到况兼输出扫数NUL断绝符序列 - :树立清醒的最少的字符数,默许是4个字符 -t --radix={o,d,x} :输出字符的位置,基于八进制,十进制或者十六进制 -o :访佛--radix=o -T --target= :指定二进制文献款式 -e --encoding={s,S,b,l,B,L} :采用字符大小和排列规章:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit @ :读取中选项

查找ls中包含libc的字符串,不辞别大小写:strings /bin/ls | grep -i libc

objdump 将二进制代码转汇编指示

objdump是个值得真切学习的指示,不光不错还原汇编指示,还不错读取二进制中特定段的信息,更可怕的是,要是咱们的标准是以-g -o0等调试不优化的情况下,用objdump -S指示可能尽可能地还原源代码信息(没看错,是还原出源代码信息),其实也不错贯穿这些信息是无缺的在可实施文献中的,要否则gdb调试的时候没主见单步追踪了,

-a, --archive-headers     清醒档案头信息,展示档案每一个成员的文献款式。成果等同于大喊 ar -tv -b, --target=BFDNAME     指定洽商码款式。这不是必须的,objdump 能自动识别许多款式,比如 objdump -b oasys -m vax -h fu.o 清醒 fu.o 的头部选录信息,明确指出该文献是 Vax 系统下用 Oasys 编译器生成的洽商文献。objdump -i 将给出这里不错指定的洽商码款式列表 -C, --demangle[=STYLE]     洽商文献中的标记解码成用户级称号。比如移除标记修饰时在变量与函数名前添加的下划线等。 -d, --disassemble  反汇编洽商文献,将机器指示反汇编成汇编代码 -D, --disassemble-all     与 -d 访佛,但反汇编扫数段(section) -z, --disassemble-zeroes     一般反汇编输出将不详零块,该选项使得这些零块也被反汇编  -EB, -EL,--endian={big | little}     指定洽商文献的字节序,在洽商文献没形色字节序时很有用,举例 S-records。这个选项只影响反汇编 -f, --file-headers     清醒每一个洽商文献的头信息 -F, --file-offsets     反汇编时,打印每一个标记的偏移地址 --file-start-context     清醒源码/汇编代码(假定为 -S)时,将高下文推广到文献的发轫 -g, --debugging     清醒调试信息。企图观念保存在文献中的调试信息并以 C 谈话的语法清醒出来。只是解救某些类型的调试信息。有些其他的款式被readelf -w解救 -e, --debugging-tags     访佛 -g 选项,然则生成的信息是和ctags器具相兼容的款式 -h, --section-headers, --headers     清醒洽商文献各个 section 的头部选录信息 -i, --info     清醒关于 -b 或者 -m 选项可用的架构和洽商款式列表 -j, --section=NAME     仅清醒指定称号的 section 的信息  -l, --line-numbers     用文献名和行号标注相应的洽商代码,只是和 -d、-D 或者 -r 一说念使用 -S,--source     反汇编时尽可能使用源代码暗示。隐含了-d参数 -m, --architecture=MACHINE     指定反汇编洽商文献时使用的架构,当待反汇编文献自己没形色架构信息的时候(比如S-records),这个选项很有用。不错用-i选项列出这里概况指定的架构 -M, --disassembler-options=OPTIONS     给反汇编标准传递参数,不错指定多个,使用逗号分隔 -p, --private-headers     打印洽商文献款式的特定信息。打印的信息取决于洽商文献款式,关于某些洽商文献款式,不打印任何附加信息。 -P, --private=OPTIONS     打印洽商文献款式的特定信息。OPTIONS 是一个逗号分隔的列表。举例关于XCOFF,可用的选项有 header, aout, sections, syms, relocs, lineno, loader, except, typchk, traceback and toc -r, --reloc     清醒文献的重定位进口。要是和-d或者-D一说念使用,重定位部分以反汇编后的款式清醒出来 -R, --dynamic-reloc     清醒文献的动态重定位进口,只是关于动态洽商文献道理,比如某些分享库 -s, --full-contents     清醒section的无缺内容。默许扫数的非空section都会被清醒 -W[lLiaprmfFsoRt],--dwarf=[rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges,=pubtypes,=trace_info,=trace_abbrev,=trace_aranges,=gdb_index]     清醒文献中调试段的内容,要是存在的话 -G, --stabs     清醒肯求的任何 section 的全部内容。清醒段 .stab、.stab.index 和 .stab.excl 的内容 -t, --syms     清醒文献的标记表进口。访佛于nm -s提供的信息 -T, --dynamic-syms     清醒文献的动态标记表进口,只是对动态洽商文献道理,比如某些分享库。它清醒的信息访佛于 nm -D,--dynamic 清醒的信息 -x, --all-headers     清醒所可用的头信息,包括标记表、重定位进口。-x 等价于 -a -f -h -p -r -t 同期指定 -w, --wide     为具有逾越80列的输出拓荒款式化某些行。也不要在清醒符堪称号时截断符堪称号 --start-address=ADDRESS     从指定地址早先清醒数据,该选项影响 -d、-r 和 -s 选项的输出 --stop-address=ADDRESS     清醒数据直到指定地址为止,该项影响-d、-r和-s选项的输出 --prefix-addresses     反汇编的时候,清醒每一滑的无缺地址。这是一种相比老的反汇编款式 --no-show-raw-insn     反汇编时,不清醒汇编指示的机器码。当使用--prefix-addresses时,这是缺省选项 --adjust-vma=OFFSET     当观念信息时,起初给扫数的段添加偏移值offset。当段地址与标记表不符时,这个选项很有用。比如将段甩掉到特殊地址,因为某个款式无法暗示段地址,比如 a.out --special-syms     清醒特殊标记与用户不良善的标记 --prefix=PREFIX     当使用 -S 时,指定前缀添加到都备旅途中 --prefix-strip=LEVEL     指定剥离都备旅途中几许个前缀目次名。此选项只消在使用了选项 --prefix=PREFIX 才有用 --insn-width=WIDTH     指定反汇编后的指示输出的行宽,单元字节 -V, --version     版块信息 -H, --help     匡助信息  

readelf 读取ELF文献款式

要是二进制文献是ELF款式的,通过file文献不错稽查文献款式.使用readelf指示不错便捷分析ELF文献的结构,比如节信息,elf头文献信息,比如咱们在分析文献是否为病毒文献的时候,需要读取elf文献头信息,作念一些特征的判断,或看成特征参与机器学习的判断。

示例:readelf -h xxx

动态稽查文献结构 ltrace

追踪进度调用库函数过程  ltrace ./a.out 这在稽查系统调用耗时很有用。 # -T 是稽查调用时候支出 ltrace -T #-t -tt -ttt 是稽查调用都备时候,t越多越精准 ltrace -t ltrace 稽查系统调用信息  ltrace -S

strace

strace和ltrace的大喊差未几,strace更偏向于系统调用的追踪或信号产生的情况。装配大喊 yum -y install strace

强地面方在于不错指定系统调用的类型:

-e trace=set  只追踪指定的系统 调用.举例:-e trace=open,close,rean,write暗示只追踪这四个系统调用.默许的为set=all.  -e trace=file  只追踪相关文献操作的系统调用.  -e trace=process  只追踪相关进度限定的系统调用.  -e trace=network  追踪与麇集相关的扫数系统调用.  -e strace=signal  追踪扫数与系统信号相关的 系统调用  -e trace=ipc  追踪扫数与进度通信相关的系统调用  -e abbrev=set  设定 strace输出的系统调用的结束集.-v 等与 abbrev=none.默许为abbrev=all.  -e raw=set  将指 定的系统调用的参数以十六进制清醒.  -e signal=set  指定追踪的系统信号.默许为all.如 signal=!SIGIO(或者signal=!io),暗示不追踪SIGIO信号.  -e read=set  输出从指定文献中读出 的数据.举例:  -e read=3,5  -e write=set 

GDB 大喊

gdb大喊其实是咱们最常用的,调试标准的利器,用来稽查二进制文献的结构,颠倒合适,不错把标准运行起来通过gdb -p pid便捷地调试。 也可如下运行:

PEiD、 Exeinfo 检测 PE文献

PEiD只解救检测32位的可实施文献,要是清醒不是有用的PE文献,说明你的可实施文献为64位,不可用 PEiD 检测。不错使用 Exeinfo PE 稽查,Exeinfo 相等于 PEiD 的升级版,可稽查64位的可实施文献

全功能的二进制文献分析器具 Radare2 指南

证据其 https://github.com/radareorg/radare2,Radare2(也称为 r2)是一个“类 Unix 系统上的逆向工程框架和大喊行器具集”。它名字中的 “2” 是因为这个版块从新早先重写的,使其愈加模块化。

:https://linux.cn/article-13074-1.html

IDA Pro 插件

IDA Pro 插件:https://www.52pojie.cn/thread-1016307-1-1.html

:https://github.com/search?q=ida+plugin

图片

2、IDA 目次结构

在 IDA 的装配根目次下有许多文献夹,各个文献夹存储不同的内容

cfg:包含各式配置文献,基本IDA配置文献ida.cfg,GUI配置文献idagui.cfg,文本模式用户界面配置文献idatui.cfg,idc:包含IDA内置剧本谈话IDC所需要的中枢文献ids:包含一些标记文献loaders:包含用于识别妥协析PE或者ELFplugins:附加的插件模块procs:包含处理器模块

图片

图片

3、大开 ida、关闭 ida 大开 ida

大开 IDA 后,IDA 会提供 3 种不同的大开方式:New(新建),Go(运行),Previous(上一个)。

图片

New 选项标明反编译新可实施文献,Go 选项标明顺利参预主界面,Previous 选项标明加载已反编译的文献选项。其中 previous 会给出给出之前逆向过的文献

首次大开的时候采用 GO 就不错了。参预之后,采用左上角的 file 中的 open 大开文献。

图片

ida 能自动识别加载的可实施文献类型。IDA 加载文献后,会生成一个可能的文献类型列表,在顶部清醒,它将清醒最顺应处理文献的加载器。 Binary File(二进制文献) 是列表终末一个选项,会一直清醒,是IDA加载无法识别文献的默许选项,提供领先级的加载方法。需要使用二进制加载器的情形包括:分析从麇集数据包或日记文献中提真金不怕火出来的rom镜像和破解标准负载。 在processor type【处理器类型】下拉菜单中,不错指定在反汇编过程中使用的处理器模块【在ida的procs目次中】。多数情况下,ida将证据可实施文献头中读取信息,采用合适的处理器。

图片

一朝采用“Binary file”方式加载文献,则需要用户手动填入加载段地址和相对偏移,对应上图“Loading segment”和”Loading offset”选项。该种方式主要应用场景为:分析动态保存的二进制代码、ShellCode二进制代码分析等。采用“Binary file”方式加载文献,IDA不会自动分析代码,用户需证据具体需求自行反汇编二进制代码。

Processor Type:不错指定在反汇编过程中使用的处理器模块。多数情况,IDA将从可实施文献的头中读取到信息,采用合适的处理器。

kernel options:配置特定反汇编分析选项,IDA可利用这些选项该进递归下跌过程。平素ida默许的都是最优的。

processor options:采用适用于处理器模块的配置选项。

大开文献以后。IDA主界面:

IDA View 三种反汇编视图:文本视图、图表视图、旅途视图IDA View-A:是反汇编窗口。( 空格键 切换 文本视图 与 图表视图  )HexView-A:十六进制款式清醒的窗口,Imports:  导入表(标准中调用到的外面的函数)。导入函数窗口Exports: 导出函数窗口Functions:标准中扫数函数Structures:结构体窗口。Enums:摆设窗口Strings:字符串窗口(字符串窗口:View --> open subviews --> Strings,或者快捷键 shift+F12)

按下 F5 键不错稽查伪代码。IDA 图形视图会有实施流,

Yes 箭头默许为绿色,No 箭头默许为红色,蓝色  暗示默许下一个实施块。

不错在左侧稽查代码的运行过程,按下 空格键 也不错直不雅地看到标准的图形视图。

关闭 ida

图片

dont pack database【不打包数据库】:仅刷新4个数据库,不创建idb文献 pack database【打包数据库】:将4个数据库组件文献存到idb文献中 pack database 【打包数据库,压缩】:等同于上一个,压缩到idb存档 collect garbage【网罗垃圾】:在关闭数据库之前,删除莫得的内存页面 dont save the database【不保存数据库】:删除四个数据库组件文献,保留现存未经修改idb文献

ida 创建的 数据库

IDA 会创建一个数据库,名为 IDB文献,它由四个文献组成。

id0:二叉树状貌的数据库id1:标准字节记号nam:Named窗口的索引信息til:给定数据库的腹地类型界说的关连信息

图片

当关闭时,不错采用 Don't save database,就不会生成和保存这些文献。

4、IDA 主界面

图片

在 IDA 界面底部有一个交互栏不错实施 Python 大喊,概况匡助咱们快速进行进制更动。

在 Python 交互中输入 0x45,由于发轫的 0x 将会被诠释为十六进制数。顺利按回车可将 0x45 更动为十进制数,输出结束为 69

将十进制更动为十六进制数,不错使用 hex()函数。Bin()函数将其他进制的数字更动为二进制数。输出结束是 1000101,发轫的 0b 代表这是一个二进制数。

图片

菜单栏

File:用于大开、新建、装载、保存、关闭一个文献或是数据库 Edit:用于剪辑反汇编代码 Jump:用于跳转到某个位置、地址或是一个窗口 Search:用于搜索代码段、数据、诞妄等等 View:用于清醒文献内容的清醒方式 Debugger:调试器,集成在IDA中 Lumina:对元数据进行各式操作 Options:不错进行一些个性化的树立 Windows Help 

导航条: 蓝色:       暗示成例的指示函数玄色:       节与节之间的过错银白色:    数据内容粉色:       暗示外部导入标记暗黄色:    暗示 ida 未识别的内容

如图所示,蓝色方框 标注了 神采和对应说明:

以上基于 IDA 默许树立先容各式神采在导航条的含义,IDA 同期提供了神采树立,便捷用户证据需求采用合适的神采,对应 “Options” 菜单的“Colors”选项中

图片

可在“IDA Colors”对话框的采用“Navigation band”Table项,在对应选项中树立各项数据的神采,便捷践诺场景的分析。

跳转 关连有毒吗

图片

常勤快能、快捷键:

空格键:  切换 文本视图 与 图表视图

ESC:      复返上一个操作地址。(只消在反汇编窗口才是这个作用,要是是在其他窗口按下esc,会关闭该窗口)

G:          顺利跳转到某个地址

N:          对标记重定名 Y:          篡改变量的类型

H:          更动16进制

T:           观念结构体偏移 M:          更动为摆设类型常量

冒号键: 成例谛视

分号键:  可重迭谛视。在反汇编后的界面中写下谛视

/ :   在反编译后伪代码的界面中写下谛视

\:    在反编译后伪代码的界面中遁入/清醒变量和函数的类型形色,巧合候变量稀奇多的时候遁入掉类型形色看起来会浮浅好多

Alt+M:    添加 标签

Ctrl+M:   稽查 标签

ctrl+w:        保存 ida 数据库

ctrl+shift+w:拍摄 IDA 快照

Ctrl+S:   稽查 段信息。采用某个数据段,顺利进行跳转

ctrl+鼠标滚轮:概况调治历程视图的大小

shift+f12:不错大开 string 窗口,一键找出扫数的字符串。

X ( ctrl+X ):       对着某个函数、变量按该快捷键,不错稽查它的交叉援用。

F5:     稽查 伪代码,即 一键反汇编

Shift +F5:大开签名窗口

ALT+L:标记(Lable)

ALT+G:更动局部变量为结构体 ALT+Enter:跳转到新的窗口

Alt+T: 搜索 字符串 (文本搜索)

Alt+B: 搜索 十六进制。平素在分析过程中不错用来搜索opcode

伪 C 代码窗口:右键 ---> comment  ---> 谛视伪 C 代码。

copy to assembly : 把 伪C代码 复制到反汇编窗口的汇编代码。

IDA 不错修改 so 的 hex 来修改 so,edit,然后 edit-patchrogram,

其实也不错 使用 winhex 来结束疏导的功能

函数 操作

删除函数:函数窗口中选中函数后,按 Delete 键

P : 创建函数。即界说函数。在反汇编窗口选中对应行后,按P键。即 识别成一个函数修改函数参数:在函数窗口中选中并按 Ctrl+E 组合键,或在反汇编窗口的函数里面按 Alt+P 组合键

数据类型 操作

在自动分析阶段,字节巧合可能被诞妄地归类。数据字节可能被诞妄地归类为代码字节,并被反汇编成指示。而代码字节可能被诞妄地归类为数据字节,并被款式化成数据值。有许多原因会导致这类情况,如一些编译器将数据镶嵌在标准的代码部分,或者一些代码字节从未被看成代码顺利援用,因而IDA采用分歧它们反汇编。磨蹭标准稀奇容易磨蹭代码部分与数据部分之间的区别。

在再行款式化之前起初必须删除其现时的款式(代码或数据。右击你但愿取消界说的样子,在结束高下文菜单中采用Undefine(也可使用Edit Undefie大喊或热键U),即可取消函数、代码或数据的界说。取消某个样子的界说后,其基础字节将看成原始字节值再行款式化。在实施取消界说操作之前,使用“单击并拖动”操作采用一个地址领域,不错取消大领域内的界说。底下以一个简便的函数为例:

C:光标所在地址处的内容观念成代码 D:光标所在地址处的内容观念成数据 A:光标所在地址处的内容观念成ascll码字符串 U:光标所在地址处的内容观念成未界说内容。

U 键:观念成未界说的内容。u:undefine,取消界说函数、代码、数据的界说D 键:让某一个位置变成数据。即 观念成 数据 C 键:让某一个位置变成指示。即 观念成 代码A 键:将采用的信息更动成 ASCII 字符串。* 键:此处界说为一个数组O 键:将此处界说为一个地址偏移   

导航 操作

Esc              后退到上一位置 Ctrl+Enter    前进到下一位置 G                 跳转到某一个特定位置,然后不错输入地址/一经界说的称号 Ctrl+S          跳转到某一区段,然后采用区段即可

类型 操作

IDA 开发了一套类型分析系统,用来处理 C/C++谈话的各式数据类型【函数声明、变量声明、结构体声明等】,况兼允许用户目田指定。选中变量、函数后按 Y 键,弹出 “Please enter the type declaration”对话框,从中输入正确的 C 谈话类型,IDA 就不错观念并自动应用这个类型。

稽查 扫数 子窗口

:点击“View”中“Open subviews”->“Disaassembly”调出来的。

图片

IDA View 窗口

图片

 IDA View 包括两种浏览模式,右键概况相互跳转。也不错通过快捷键 "空格键" 相互切换

一种是Text View,一种是 Graph View,

虚线:条款跳转

实线:无条款跳转

IDA View 主要包括三个区域:

地址区: PE文献加载到内存后的虚地址为准,镜像地址+偏移地址,如 0x00401000OpCode操作区: 该部分默许。因此,需要 Options->General->树立 Number of opcode bytes为8清醒出来,它是16进制数。

图片

反编译代码区: IDA主功能区域,能高亮清醒,双击函数或变量名能跳转对应的地址。

图片

Hex View 窗口

清醒16进制,默许为只读情景,不错用快捷键F2对数据区域(绿色字符区域)在只读和剪辑两种情景切换。

图片

Strings 窗口

IDA 的 View 有几个按钮对定位代码很垂危,如下图所示:

图片

Open exports window 大开导出窗口Open import window 大开导入窗口Open names window 函数和参数的定名列表Open functions window 标准调用的扫数函数窗口Open strings window 大开字符串清醒窗口

点击 Strings 清醒标准中扫数字符串,该窗口有助于你通过标准的运行输出逆向找出对应的代码片段,如下图的字符串及对应的Address。

图片

双击 String 跳转 IAD View 页面,如下图所示的地址,单击会高亮。

图片

strings(快捷键f12):字符串表 包括标准中存储的字符串常量(在逆向分析中关于定位要津函数有很大匡助)。

在逆向分析中,时时咱们不错利用 Ida 中的 "交叉援用" 功能找到援用了指定字符串的函数,从而罢清醒要津函数的定位。比如( 在标准的标记表被 stripped 掉的时候,无法顺利搜索 main 函数) 稽查字符串 "input:flag" 的援用顺利定位到 main 函数

函数 窗口 ( 垂危 )

函数窗口:函数称号,区域,肇端位置,长度,形色函数的标记。用于分析每一个单独的函数。

在逆向分析中时时都是顺利利用 Function windows 查找要津函数对通盘标准进行分析。该窗口提供 ctrl+F 的搜索功能,举例不错顺利 ctrl+f 定位到 main 函数,选中函数后双击,即可在右侧窗口早先分析,关于一般的函数 IDA 提供广大的反汇编功能,(快捷键f5,f5大法好啊)顺利能阅读到c代码,辞退了阅读汇编谈话的灾难。

import (导入表)、export (导出表)

导出窗口列出文献的进口点,导入窗口列出由被分析的二进制文献导入的扫数函数,表中内容为标准需要的外在函数和不错被外部标准调用的函数(触及到动态连续的关连学问)

(1) Exports窗口是导出表(so中能让外部调用的函数)(2) Imports窗口是导入表(so调用到外面的函数) 段 窗口

段表 :包标准的各个段的信息比如.text(代码段).data(数据段)(触及到PE结构的关连学问)

段窗口 segmentation:段的简便列表

结构体 窗口

分析数据结构,双击数据结构称号张开,稽查详确布局。

要是标准正使用某个结构体,而 IDA 并不了解其布局,这时 IDA  不错添加该结构体的布局,并将新界说的结构体包含到反汇编代码清单中。IDA 使用 Structures 窗口来创建新的结构体除非结构体一经在 Structures 窗口中列出,否就无法将结构体包含到反汇编代码清单中。IDA将自动在 Structures 窗口中列出任何它概况识别、并笃定已被个标准使用的结构体。

IDA 之是以在分析阶段无法识别结构体,可动力于两个原因。起初,天然 IDA 了解某个结构体的布局,但它并莫得破坏的信息,概况判断标准如实使用了结构体。其次,标准中的结构体可能是一种 IDA 对其一无所知的准结构体。在这两种情况下,问题都不错得到处分,且起初从Structures窗口下手。

摆设 窗口

enums 可列举,界说摆设类型

5、IDA 常用树立 快照

由于 IDA 不提供肃除的功能,要是你不留神按到某个键,导致ida数据库发生了改变,就得再行来过,是以要谨记在不时操作的时候,加上快照:file --> take database snapshot 加完快照后,会生成一个新的 ida 数据库文献,骨子上是有点像另存的操作

快捷键:ctrl+shift+w

恢复兴始布局 view --> open subviews: 不错复兴你意外中关闭的数据清醒窗口windows --> reset desktop:不错复兴运行 ida 布局。简便复兴GUI树立,即回到默许视图,但不会篡改任何完成的任务或者反汇编职责。Windows-Save desktop :保存这个新的视图,从而变成个东说念主的视图格调option --> font: 不错改变字体的关连属性 在历程视图中添加地址偏移

IDA 中的历程视图不错说短长常的好用,阳春白雪地能看出标准的实施历程,尤其是在看 if 分支代码和轮回代码的时候,概况颠倒直不雅

图片

然则,咱们还不错改得愈加好用,在这个视图中添加地址偏移的话,咱们取地址就颠倒便捷,不再需要按空格切换视图去找,在菜单栏中树立:option --> general

图片

将该选项打钩后就不错看到成果了:

图片

自动添加反汇编谛视

这个功能关于萌新来说颠倒友好,在刚刚入门汇编的时候, 不免遭遇几个不常用的蛇皮汇编指示,就得我方一个个去查,很冗忙,开启了自动谛视的功能后,IDA就不错顺利告诉你汇编指示的风趣

相似是在菜单栏中树立:option --> general

图片

成果如下:

图片

导入 jni.h 分析 jni 库函数

找到 jni.h 文献,单独复制一份并修改复制的文献如下:

图片

导入修改后 jni.h 文献( 快捷方式:Ctrl + F9 ---> 采用 jni.h 头文献 ):

图片

6、IDA 常用操作 创建 数组

在操作IDA的时候,不时会遭遇需要创建数组的情况,尤其是为了能便捷咱们看字符串的时候,创建数组显得颠倒必要,以下我恣意找了个数据来创建数组

起初点击选中你思要更动成数组的一块区域:

图片

接着在菜单栏中采用:edit --> array,就会弹出如下的选项框

图片

底下来诠释一下各个参数的风趣:金晨 ai换脸

Array element size 这个值暗示各数组元素的大小(这里是1个字节),是证据你选中的数据值的大小所决定的Maximum possible size 这个值是由自动揣测得出的,他暗示数组中的元素的可能的最大值Array size 暗示数组元素的数量,一般都证据你遴选的自动产生默许值Items on a line 这个暗示指定每个反汇编行清醒的元素数量,它不错减少清醒数组所需的空间Element print width 这个值用于款式化,当一滑清醒多个样子时,他限定列宽Use “dup” construct :使用重迭结构,这个选项不错使得疏导的数据值合并起来,用一个重迭说明符组合成一项Signed elements 暗示将数据清醒为有标记数照旧无标记数Display indexes 清醒索引,使得数组索引以成例的状貌清醒,要是选了这个选项,还会启动右边的Indexes选项栏,用于采用索引的清醒款式Create as array 创建为数组,这个一般默许选上的

创建好了以后,就变成了这么:

图片

不错看到这些数据一经被当成一个数组折叠到了一说念,其中2 dup(0FFh)这么的,暗示有两个重迭的数据0xff

历程图 折叠历程图中的分支

在历程视图中,分支过多的时候,不错在窗口标题处右击采用group nodes,就能把现时块折叠起来

图片

成果如下:

图片

分支块是不错我方定名的,便捷我方逆向贯穿

函数调用图

菜单栏中:view --> graphs --> Function calls(快捷键Ctrl+F12)

图片

这个图能很昭彰地看到函数之间是怎样相互调用的

函数历程图

菜单栏中:view --> graphs --> flowt chart(快捷键F12)

图片

这个其实跟IDA自带的反汇编历程视图差未几,他不错导出来看成单独的一张图

创建结构体: 手工创建结构体

创建结构体是在 IDA 的 structures 窗口中进行的,这个操作在堆漏洞的pwn题中不时使用

图片

不错看到,这里一经存在了四个结构体,标准自己存在的,不错右击采用hide/unhide,来看具体的结构体的内容

图片

创建结构体的快捷键是:insert

图片

在弹出的窗口中,不错剪辑结构体的名字

这底下有三个复选框,第一个暗示清醒在现时结构体之前(就会排列在第一位,否则排列在你鼠标遴选的位置),第二个暗示是否在窗口中清醒新的结构体,第三个暗示是否创建聚拢体。

需要防卫的是,结构体的大小是它所包含的字段大小的总额,而聚拢体的大小则等于其中最大字段的大小

在单击ok以后,就定好了一个空的结构体:

图片

将鼠标放在 ends这一滑,单击快捷键D即可添加结构体成员,成员的定名默许是以field_x暗示的,x代表了该成员在结构体中的偏移

图片

同期,不错把鼠标放在结构体成员所在的行,按D,就不错切换不同的字节大小

默许情况下可供采用的就只消db,dw,dd(1,2,4字节大小)

要是思添加型的类型,不错在option-->setup data types(快捷键Alt+D),进行树立

图片

如图,勾选了第五个和第九个的话,就会出现 dq 和 xmmword 了(代表了8字节和16字节)

图片

要是要添加数组成员则不错对着成员所在的那一滑,右击采用array

图片

如图,要创建的是16个元素的4字节数组

要是要删除结构体,那么对着结构体按下delete键即可删除

要是要删除成员,则对着成员按下u(undefine)然则需要防卫的是,这里只是删除了成员的名字,而莫得删除它所分拨的空间

如图,咱们删除了中间的field_10的数组成员:

图片

会变成这么:

图片

数组所分拨的20个字节的空间并莫得被删除,这时要是要删震恐这些空间,就需要在底本数组成员所在的第一滑中按下Ctrl+S,删除空间(Edit-->shrink struct types)

就不错真的的删震恐成员

给结构体的成员重定名不错用快捷键N

咱们在IDA中创建好了结构体以后,即是去应用它了

如图,这是一个典型的堆的题目

图片

不错看到v1是一个新建的chunk的地址指针,尔后的操作都是往chunk不同的偏移位置写入内容,为了便捷咱们逆向不雅察,不错将其变成一个结构体,通过v1 v1+4 v1+0x48 这么的偏移,创建好结构体后,将char *v1的类型改成mail *v1,(快捷键Y不错篡改函数、变量的类型和参数)这个mail是咱们创建的结构体的称号,成果如下:

图片

导入C谈话声明的结构体

践诺上,IDA有提供一个更便捷的创建结构体的方法,即是顺利写代码导入

在View-->Open Subviews-->Local Types中不错看到腹地已有的结构体,在该窗口中右击insert

不错添加新的结构体:

图片

这么就导入了新的结构体:

图片

但同期咱们发现structure视图里面,并莫得这个结构体,咱们需要对着my_structure右击,采用 synchronize to idb

这么structure视图就有了,如图

图片

这里你会发现,多出来两个db的undefined的成员,这是因为ida默许是会把结构体救助4字节对都的,容许结构体的大小为0x28

IDA 动态调试 elf:

​这里以一个在Ubuntu虚构机中的 elf 为例子,进行调试。起初把 ida 目次中的 dbgsrv 文献夹 中的linux_server64 拷贝到 Ubuntu 的 elf 的文献夹下,这个 elf 是 64 位的扫数用的是 linux_server64,要是调试的是 32 位的标准,就需要拷贝 linux_server 谨记给他们权限,然后在终局运行,这个标准的作用就像是联接ida和虚构机中elf的桥梁

图片

然后再到ida中进行配置:

在菜单栏中采用:debugger --> process options

图片

防卫,application 和 input file 都是填写在虚构机中的 elf 的旅途,谨记要加文献名 而 directory 填写 elf 所在目次,无谓加文献名 hostname 是虚构机的 ip 地址,port 是默许的联接端口 parameter 和 password 一般都无谓填 树立好了以后点击 ok

接着不错顺利在反汇编视图中下断点,只重心击左边的小蓝点即可

图片

这时按下快捷键 F9,不错顺利早先调试

按下快捷键 F4,则顺利运行到断点处停驻

图片

这个即是基本的各个功能区的先容,上头是我相比心爱的常用布局,和 ida 默许的不太一样,思要自界说添加一些视图的话,不错在 debugger --> quick debug view 中添加

另外不错在 Windows --> save desktop 来保持现时的视图布局,以后就不错顺利加载使用

底下先容一些常用的快捷键

F7 单步步入,遭遇函数,将参预函数代码里面F8 单步步过,实施下一条指示,不参预函数代码里面F4 运行到光标处(断点处)F9 不绝运行CTRL+F2 断绝一个正在运行的调试进度CTRL+F7 运行至复返,直到遭遇RETN(或断点)时才住手.

知说念了这些快捷键后,调试起来就相比容易了,ida 调试有个相比便捷的地点在于能顺利看到函数的真实地址,下断点也颠倒直不雅易操作

IDA-python

IDAPython官方函数文档: https://hex-rays.com/documentation/

IDC函数官方文档查询: IDC函数

在 IDA 的最底下有个不起眼的 Output Window 的界面,其实是一个终局界面,这里有 python 终局和 IDC 终局

图片

在 IDA 的诈欺中,咱们不时需要揣测地址,揣测偏移,就不错顺利在这个终局界面进行操作,颠倒便捷

IDA Python 常见模块先容与剧本使用。在IDA中,有三个垂危的库,分别是: IDC、idautils、idaapi

IDC 他是封装 IDA 与 IDC 函数的兼容性模块.Idautils 这个是 IDA 提供给咱们的一个高档实用的模块.idaapi 他不错允许咱们造访愈加底层的数据.

在 IDA 中咱们要使用剧本有三种方式

第一种 :不错顺利按 shift + F2 快捷键调出界面,也不错顺利在菜单中采用大喊剧本.第二种 :不错是写一个剧本文献顺利进行援用。

第三种:顺利在 IDA 底部写大喊。

天然上头说的只是很简便的 python 用法,真的的IDA-python的用法是这么的:

这里以简便的一说念逆向题来作念个例子

图片

这个标准很简便,一早先来个for轮回,把judge函数的内容全部异或0xc,这么就导致了标准一运行就会顺利羁系掉judge函数

图片

从而使得没法进行背面的flag判断

这里咱们就需要写一个剧本来先把被羁系的内容还原,这里 IDA 提供了两种写剧本操作的方法,一种即是 IDC 剧本,一种即是 python 剧本

这里只简便的先容 IDA-python

而 IDA-python 通过三个 python 模块将 python 代码注入 IDA 中:

idaapi 模块讲求造访中枢IDA APIidc 模块讲求提供IDA中的扫数函数功能idautils 模块讲求提供大宗实用函数,其中许多函数不错生成各式数据库关连对象的python列表

扫数的 IDApython 剧本会自动导入 idc 和 idautils 模块,而 idaapi 模块得我方去导入

这里贴上 IDApython 的官方函数文档 https://www.hex-rays.com/products/ida/support/idapython_docs/,这里包含了扫数函数,值得一看。

针对以上的题目,咱们只需要作念一个剧本,指定 judg 函数的 0-181 领域的字节异或 0xc,即可复兴

judge=0x600B00for i in range(182):    addr=0x600B00+i    byte=get_bytes(addr,1)#获取指定地址的指定字节数    byte=ord(byte)^0xC    patch_byte(addr,byte)#打patch修改字节

在菜单栏中 file --> script file,加载 python 剧本

接着在 judge 函数中 undefined 掉底本的函数,在再行生成函数(快捷键 p),就不错再行 f5 了 剧本中出现的函数都是一经封装在 idc 模块中的,具体可查官方文档

图片

这只是一个简便的 IDApython 的使用例子,践诺上这个功能颠倒广大,能弄出颠倒骚的操作

pycharm 搭建 ida python 环境

在 PyCharm 中写 IDAPython 剧本:https://blog.csdn.net/qq_45323960/article/details/125493588

先添加 诠释器,在添加 自界说旅途。旅途采用 IDA Pro 7.7\python\3 (3 和 2 暗示 Python3 和 Python2 )

图片

之后就不错使用 PyCharm 的智能补全编写 IDAPython 标准了。

这个方法只是在pycharm中编写标准,同期使用pycharm的代码补全,运行是使用ida采用文献运行

用 pycharm 调试 idapython 剧本:

python.exe -m pip install pydevd

pycharm中这么树立

图片

然后树立要调试的标准

图片

这句话相等于插入一个断点

终末先运行pycharm 端的先比及起,然后大开 ida 即可。

IDA 剧本 pythonIDA 的剧本谈话 --- IDC

其中,python谈话就无谓过多的先容了,底下简便先容一下IDC谈话。

在IDA软件的匡助选项中,包含着对IDC谈话的语法和函数的先容(相等于官方说明/API手册),如下图所示。

图片

一些常见的 IDC 函数先容如下(包括但不限于,用到可查询API手册)——

(1)读取和修改数据的函数

图片

(2)用户交互函数

图片

(3)字符串主管函数

图片

(4)代码交叉援用函数

图片

在 IDA 中运行 python、IDC 剧本/大喊 有三种方式,如下图所示。

图片

剧本示例。摆设一个函数的调用方。

图片

IDA 插件

A.基础:插件开发:c++开发的dll文献。具体的学问(如插件的开发、装配、实施等)不错参考《IDA Pro巨擘指南》中第17章的内容。

B.常见插件:IDA 中自带的插件如下图所示。

图片

官方 获奖 插件:https://plugins.hex-rays.com/

(1)静态分析

IDA FLIRT Signature Database——用于识别静态编译的可实施文献中的库函数IDA signsrch——寻找二进制文献所使用的加密、压缩算法IDA scope——自动识别windows函数和压缩、加密算法Ponce—— 障碍分析和标记化实施器具snowman decompiler——C/C++反汇编插件(F3 进行反汇编)keystone—— 二进制文献修改器具,不错顺利修改汇编CodeXplorer——自动类型重建以及对象浏览(C++)(jump to disasm)IDA Ref——汇编指示谛视(解救arm,x86,mips)Hexlight——大括号高亮匹配及跳转(B跳转到匹配括号)auto re——函数自动重定名nao——dead code 捣毁HexRaysPyTools——类/结构体创建和虚函数表检测findcrypt-yara——寻找常用加密算法中的常数

(2)动态调试

IDA sploiter——漏洞利用开发器具,寻找gadgetDIE——动态调试增强器具,保存函数调用高下文信息sk3wldbg——IDA动态调试器,解救多平台idaemu——模拟代码实施(解救X86、ARM平台)

(3)其他

Keypatch --- ida补丁神器IFLFRIEND—— 用于修订反汇编,将将寄存器/指示文档顺利带入IDA视图的IDA插件。x86emu——​​​​​镶嵌式x86模拟器Lighthouse—— IDA Pro 的代码袒护资源治理器AndroidAttacherpython Editor—— 在 ida 中运行剧本文献和应用标准。ret-sync—— ret-sync stands for Reverse-Engineering Tools synchronization.  It’s a set of plugins that help to synchronize a debugging session (WinDbg/GDB/LLDB/OllyDbg/OllyDbg2/x64dbg) with IDA disassembler. The underlying idea is simple: take the best from both worlds (static and dynamic analysis).让调试器(WinDbg / GDB / LLDB / OllyDbg / OllyDbg2 / x64dbg)与IDA同步的一个插件。

IDAPython 剧本编写指南

:https://www.cnblogs.com/TJTO/p/13216673.html:https://www.cnblogs.com/TJTO/p/13284864.html Map 文献从 IDA 到 OD

什么是 MAP 文献?

简便地讲, MAP 文献是标准的全局标记、源文献和代码行号信息的唯独的文本暗示方法,它不错在职何地点、任何时候使用,不需要有额外的标准进行解救。而且,这是唯独能找出标准崩溃的地点的救星。

在逆向分析的时候IDA可疑赢得相比详确的map文献信息,同期结合OD动态调试将IDA均分析出的map文献导入到OD中不错起到一本万利的成果。

IDA与OD导出使用map文献:菜单栏 ---> File ---> Produce file ---> Creat MAP file

使用IDA导出map文献时,在不需要Label信息的情况下,不要选中"dummy names"选项,否则在Ollydbg中使用LoadMapEx(by forever)加载时,会将OD的谛视替换掉

关于 dummy names,IDA匡助中的诠释是这么:

Dummy names are automatically generated by IDA. They are used to denote subroutines, program locations and data.

化名字被艾达自动生成。他们是用来暗示子标准、标准的位置和数据。

Dummy names have various prefixes depending on the item type and value:

假的名字有不同的前缀证据样子类型和值:

sub_ instruction, subroutine start locret_ 'return' instruction loc_ instruction off_ data, contains offset value seg_ data, contains segment address value asc_ data, ascii string byte_ data, byte (or array of bytes) word_ data, 16-bit (or array of words) dword_ data, 32-bit (or array of dwords) qword_ data, 64-bit (or array of qwords) flt_ floating point data, 32-bit (or array of floats) dbl_ floating point data, 64-bit (or array of doubles) tbyte_ floating point data, 80-bit (or array of tbytes) stru_ structure (or array of structures) algn_ alignment directive unk_ unexplored byte

使用OD载入导出的 map 文献

图片

打 PATCH

打 patch,其实即是给标准打补丁,骨子上是修改标准的数据,指示等,这在 CTF 中的 AWD 赛制中不时用到,发现标准漏洞后立时就要用这个功能给标准打好 patch,防患其他军队报复咱们的gamebox

这里,我是用一个叫 keypatch 的插件进行操作的,IDA 自带的 patch 功能不太好用

装配 keypatch

这个很简便,教程在 https://github.com/keystone-engine/keypatch

下载 Keypatch.py 复制到插件目次

IDA 7.0\plugins\Keypatch.py

下载装配 keystone python 模块,64位系统只需要装配这一个就行

https://github.com/keystone-engine/keystone/releases/download/0.9.1/keystone-0.9.1-python-win64.msi

装配好后,你就会发现这里有个 keypatch 的选项

图片

修改标准指示

要是咱们要修改标准自己的指示,何如作念呢

图片

如图,咱们要修改 63h 这个值

将鼠标指向该行,按快捷键 Ctrl+Alt+K

图片

顺利输入汇编语句即可修改,打好 patch 后成果如图:

图片

这里会生成谛视告诉你,这里打过 patch,颠倒东说念主性化

接着还要在菜单栏进行树立才能真的使得 patch 告成

图片

这么一来,底本的标准就一经被修改了

肃除 patch

要是不留神打错了 patch,就不错在这里进行肃除上一次 patch 的操作了

图片

然则要是打了好屡次patch,不好分清该肃除哪一次的patch,那么不错在菜单栏中大开patched bytes界面

图片

看到扫数的patch,要肃除哪一个就右击采用 revert

图片

IDA 导出数据文献

在菜单栏中,这里有个选项不错生成各式不同的输出文献

图片

这里简便的先容前两个文献,背面的宇宙不错我方去生成测试一下用途,我这里就不详确先容了

.map 文献 形色二进制文献的总体结构,包括与组成改二进制文献的节相关的信息,以及每个节中标记的位置。.asm文献,也即是汇编了,顺利能导出ida中反汇编的结束,这个颠倒实用,有的时候在逆向中不时遭遇大宗数据加解密的情况,要是在从IDA中一个个迟缓复制可就太没遵守了,顺利导诞生成asm,在里面复制数据快好多 IDA常见定名道理

IDA 不时会自动生成化名字。他们用于暗示子 "函数,标准地址和数据"。

证据不同的类型和值化名字有不同前缀

sub       指示和子函数启航点 locret    复返指示 loc       指示off 数据,包含偏移量 seg       数据,包含段地址值asc 数据,ASCII字符串 byte      数据,字节(或字节数组)word 数据,16位数据(或字数组) dword     数据,32位数据(或双字数组)qword 数据,64位数据(或4字数组) flt       浮点数据,32位(或浮点数组)dbl 浮点数,64位(或双精度数组) tbyte     浮点数,80位(或推广精度浮点数)stru 结构体(或结构体数组) algn      对都带领unk 未处理字节

IDA 中有常见的说明标记,如 db、dw、dd 分别代表了1个字节、2个字节、4个字节

IDA 反编译报错

目前来说, 我遭遇的反编译报错的情况,一般是两种

一是由于标准存在动态加密,导致标准的某些代码段被修改,从而反编译出错,这种情况,就需要去使用 IDA-python 解密一波,再进行 F5 反汇编

二是由于某些哲学问题,顺利指示了某个地点出错,一般来说,就按照 IDA 的指示,去进行修改。

比如,出现如下报错

图片

那咱们就去找 413238 这个地址的地点,指示是说 sp 指针的值莫得被找到,说明是这里出错了,那么就去修改sp的值,修改方法如下:

图片

也不错使用快捷键 Alt+K

有的时候,遭遇的这种报错

图片

就尝试着把报错的地址的汇编语句改一哈,改成 nop,就不错处分问题

目前来说,我遭遇报错的情况未几,一般都不错通过以上方法处分

配置 IDA

在 ida 的根目次的 cfg 文献夹是挑升用来存储配置文献的

ida 的主配置文献为 ida.cfg,另外的还有 idagui.cfg,idatui.cfg 这两个配置文献对应 IDA 的 GUI 配置和文本模式的版块

一、ida.cfg

该文献包含了option-->general中的扫数选项的配置,不错通过选项中的形色在配置文献总找到相应的选项

这里举几个例子:

SHOW_AUTOCOMMENTS 暗示是否自动生成汇编指示的谛视

GRAPH_SHOW_LINEPREFIXES 暗示是否在历程限定视图中清醒地址

VPAGESIZE 暗示内存调整参数,当处理颠倒大的输入文献时,IDA可能叙述内存不及而无法创建新数据库,在这种情况下增大该参数,再行大开输入文献即可处分问题

OPCODE_BYTES 暗示要清醒的操作码字节数的默许值

INDENTATION 暗示指示缩进的距离

NameChars 暗示IDA解救的变量大喊使用的字符集,默许是数字+字母还有几个特殊标记,要是需要添加就改变该参数

二、idagui.cfg

这个文献主要配置默许的GUI行径,键盘的快捷键等,这个很少需要修改,不作念过多先容。感兴趣的不错我方大开该文献不雅察,并不难解,改改快捷键照旧很容易的

三、idatui.cfg

这个似乎愈加不常用。。。未几说了

需要防卫的是,以上三个文献是默出嫁置,也即是说,每次打草创建新的ida数据库的时候,都会以这三个配置文献的树立进行创建,之前临时在菜单栏的树立就会散失,要弥远树立ida的配置,就改这三个文献

但,但凡都有例外,在option-->font和option-->colors这两个选项是全局选项,修改一次就弥远告成的,无谓在以上三个配置文献中改

x86 汇编指示

在反汇编窗口中大多是 eax, ebx, ecx, edx, esi, edi, ebp, esp 等。这些都是 X86 汇编谈话中 CPU 上的通用寄存器的称号,是32位的寄存器。这些寄存器相等于C谈话中的变量。

EAX 是”累加器”(accumulator), 它是好多加法乘法指示的缺省寄存器。EBX 是”基地址”(base)寄存器, 在内存寻址时存放基地址。ECX 是计数器(counter), 是重迭(REP)前缀指示和LOOP指示的内定计数器。EDX 则老是被用来放整数除法产生的尾数。ESI/EDI 分别叫作念”源/洽商索引寄存器”(source/destination index),因为在好多字符串操作指示中, DS:ESI指向源串,而ES:EDI 指向洽商串。EBP 是”基址指针”(BASE POINTER), 它最不时被用作高档谈话函数调用的”框架指针”(frame pointer)。ESP 挑升用作堆栈指针,被形象地称为栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。在32位平台上,ESP每次减少4字节。还有一些指示,如:mov,jmp等。 数据转化指示 MOV 移动MOVC 程式顾虑体移动MOVX 外部RAM和推广I/O口与累加器A的数据传送指示PUSH 放入堆叠POP 由堆叠取回XCH 8位元交换XCHD 低4位元交换SWAP 陡立4位元交换 算术指示 ADD 两数相加ADDC 两数相加再加CSUBB 两数相减再减CINC 加一指示DEC 减一指示MUL (MUL AB乘法指示仅此一条)相乘指示,所得的16位二进制数低8位存累加器A高8位存BDIV (DIV AB 除法指示仅此一条)相除指示,所得商存A,尾数存BDA (DA A 只此一条指示)调整为十进数 逻辑指示 ANL作念AND(逻辑与)运算ORL作念OR(逻辑或)运算XRL 作念(逻辑异或)运算CLR 捣毁为0CPL 取反指示RL 不带进位左环移RLC 带进位左环移RR 不带进位右环移RRC 带进位右环移 限定转化类指示 JC C=1时跳JNC C=0时跳JB 位元=1时跳JNB 位元=0时跳JBC 位元=1时跳且捣毁此位元LCALL 长调用子标准ACALL 都备调用子标准RET 由副程式复返RETI 由中断副程式复返AJMP 都备转化SJMP 相对转化JMP @A+DPTR 散转,相对DPTR的转折转化JZ A=0时跳JNZA 0时跳CJNE 二数相比,不颠倒时跳DJNZ 减一,不等於0时跳NOP 空操作 位变量指示 SETB 设定为1ORG 标准早先,端正标准的肇端地址END 标准结束EQU 等值指示(先赋值后使用)例:SUM EQU 30HDB 界说字节指示DW 界说字内容DS 界说保留一定的存贮单元数量BIT 位地址标记指示 例:SAM BIT P1.0RET 子标准复返指示RETI 中断子标准复返指示$ 本条指示地址

了解这一些,信赖宇宙不错更快的上手 IDA 这个利器了!

示例:IDA pro 调试 exe

:https://zhuanlan.zhihu.com/p/80751993

通过一个简便的题来了解一下 IDA 的基本操作,题目是 bugku 的一个简便的逆向,Easy_re。

将题面前载下来,发现是一个exe可实施文献,先运行一下望望

图片

有一些字符串指示,让你输入一个字符串,指示输入flag,恣意输入几个字符,看一下有什么指示。

然后早先参预分析阶段,起初通过 Detect It Easy 这个软件稽查一下标准的基本信息。

图片

这一步咱们主要思看一下标准时32位照旧64位的,通过上图不错看到标准属于32位标准。然后咱们通过 IDA 对标准进行分析,IDA 是一个静态反编译软件,用来静态的分析软件,咱们在32位的IDA中大开re1.exe(要是标准时64位的需要用64位的IDA大开),他会弹出弹窗,这里无谓管,一齐点“是(或者ok)”就行了,然后界面如下。

图片

一进来,最大的那片区域为反汇编窗口,左边为函数窗口,在反汇编窗口按空格键,会在图形视图和列表视图之间切换。然后分析标准一般先从字符串动手,大开字符串窗口,View --> open subviews --> Strings,或者快捷键shift+F12。

图片

标准中时时包含好多字符串资源,这些资源存在于 PE 文献的 rdata 段,不错看到运行标准时出现过的 "DUTCTF" 字符串,双击它找到他的位置

图片

图片

图片

不错看到 aDutctf 字符串周围还有好多字符串,咱们把它们都变成可清醒字符,结束如下,由于本题相比简便,是以顺利出现了flag。

图片

天然,本文是为了先容 IDA 的使用,是以咱们不绝往下分析,找到要津的字符串后,在字符串的位置,按快捷键x,稽查标准在那儿援用了它,比如这说念题莫得给出 flag,咱们需要在指示信息处(也即是 aDutctf 的位置)按快捷键x,不错看到只消一处援用了它。

图片

咱们跟进去看一下,找到了援用它的位置,这一步是 为了找到标准的主要逻辑 在哪,因为巧合候IDA 可能分析不出函数名来,你就没主见通过左边的函数窗口定位标准的主要逻辑位置,也有可能标准的主要逻辑不在 main 函数里,在一个其他的函数里。

是以说,先运行标准,找到标准运行时出现的指示字符,然后定位指示字符出现的位置,用这么的方法来找标准的主要逻辑相比靠谱一些。

图片

找到了要津位置后,发现是一堆汇编代码,看不懂何如办?IDA 的广大之处还在于他不错将分析的标准以伪代码的状貌给出,快捷键为F5(不是扫数标准都能以伪代码的状貌清醒,也不是扫数函数都能以伪代码的状貌清醒,要是没主见清醒伪代码,那只可刚汇编了),下一步即是分析标准的逻辑了,至于何如分析,这里就未几赘述了。

图片

在关闭 IDA 的时候他会指示你是否保存 database,你不错采用保存,下次用 IDA 大开这个标准的时候不错加载这个数据库,里面保存了你前次的操作。

底下给出了一些常用的快捷键

图片

参考:IDA Pro 巨擘指南 (第2版)

示例:IDA Pro 动态调试 so

********************* 前提条款 和 运行环境 一定要写昭彰,否则会有好多坑,坑死东说念主。 *********************

雷电、蓝叠的 cpu 是 x86 的,ida不可正常调试,需要用 Android 编译器自带的创建模拟器。 ida 模拟器动态调试,当实施到断点时会出现诞妄。然则不错用 Android studio 创建模拟器会出现底下的选项,采用 Other Images 选项,这时清醒出 armeabi-v7a,采用这个创建模拟器,即是 arm 的模拟器不是 x86,能正常调试。

图片

IDA 动态调试 Android

IDA 静态分析 与 动态分析:https://zhuanlan.zhihu.com/p/38983223

IDA 动态调试:https://zhuanlan.zhihu.com/p/145383282

Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码):https://zhuanlan.zhihu.com/p/23321571

IDA动态调试android的so文献(二):https://blog.csdn.net/binbin594738977/article/details/106070388

在调试 so 库的时候 先实施.init_array 其次 JNI_OnLoad,在调试 so 库的好多时候要双开 IDA 动静太结合的双调,因为 IDA 在编译的过程不可全部展示所要调用的函数,指针还有内存地址

动态调试 总览

:https://blog.csdn.net/AHuqihua/article/details/127269887

1. 将IDA pro下的android_server移动到android手机中, 并运行,得胜后不要关闭该cmd 2, 新确立cmd, 端口转发:         # 前边是电脑的端口,背面是手机的端口         adb forward tcp:23946 tcp:23946                         # 调试模式大开APP, 否则IDA发现不了该APP         adb shell am start -D -n  com.yaotong.crackme/com.yaotong.crackme.MainActivity 3. 参预IDA,采用对应的标准,参预调试窗口。并记好该app对应的PID. 4. adb forward tcp:8700 jdwp:(APP进度号) 5. jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 6. 在IDA中进行调试。

手机端 实施 android_server ,恭候 IDA Pro 的联接

 Android未root环境下使用IDA调试:https://blog.csdn.net/lsg305/article/details/103638118

1. 复制 android_server 文献顺利机的  /data/local/tmp 目次下。          大喊:adb push IDA_Pro\dbgsrv\android_server /data/local/tmp2. 添加权限,并实施 android_server         adb shell su         cd /data/local/tmp         chmod 777 android_server         ./android_server    // 启动 android_server3. 端口转发。大喊:adb forward tcp:23946 tcp:239464. 启动被调试的 APP:大喊:adb shell am start -D -n com.cmxxzwy.mz/com.e4a.runtime.android.mainActivity。加了 -D 参数,此时 Android 拓荒上会给出指示:“Waiting For Debugger”,暗示正在恭候调试器的连续。【防卫:也不错让 APP 正常启动,然后 IDA 依然不错 attach 到一经运行的进度上,然则这么无法调试到 APP 启动阶段的逻辑。】

图片

用 am 启动被调试应用 ( am是activity manager的缩写 )

am启动标准大喊:am start -D -n com.example.testarm/.MainActivity

am start -D -n    调试模式大开应用 com.example.testarm    要调试启动的包名 .MainActivity    要启动的 MainActivity

启动后恭候调试器的连续。

IDA Pro 树立 调试,联接顺利机上的 android_server 并进行调试 1. IDA菜单栏 ---> debugger ---> attach ---> Remote ARM Linux/android debugger2. debug options 一定要选

图片

 3. 树立 host,点击 ok 后,在弹出的进度采用框 采用要调试的 com.cmxxzwy.mz 进度。【启动 IDA Pro。在主菜单采用:Debugger -> Attach -> Remote ArmLinux/Android debugger。在 setup 对话框中,hostname 输入 127.0.0.1,Port 输入 23946,点击 OK 按钮。此时会出现一个列表,罗列了 Android 拓荒上现时运行的扫数进度,找到需要调试的进度点击 OK 按钮。接下来参预了调试器界面:】

图片

树立断点 ( 一定要先下断点再运行,要是有反调试时一运行就崩溃,一切的再行来过 ),然后点击 IDA 的 早先运行 按钮。【 防卫:这里 ida 的运行只是说明 ida 一经早先监测断点,然则此时 app 还莫得复兴运行,需要使用 jdb 将 app 复兴实施】

图片

大开 DDMS,下一步要用

图片

稽查要调试的进度,其中8700代表选中的进度的调试端口,不错是8700也不错是 / 左边的。比如图中的 8677

ddms 一经毁灭 ,使用 monitor 替代。

tools/monitor.bat ( java8 才能运行,高版块不行 ),修改 monitor.ini 指定 jdk 版块

图片

用 jdb 将 app 复兴实施。

大喊:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700

这里的 8700 也不错不写 8700,不错采用要调试的进度端口亦然不错的,否则你采用了哪个进度哪个即是8700那么调试的即是哪个

图片

这一步的作用是使标准复兴运行。(防卫这时候要是ida里还莫得点击运行,标准是不会真的不绝运行的)。这时候就不错正常地在 IDA 里下断调试了。F7参预函数,F8单规范试,F9跳到下一个断点,F2下断点,G调到函数地址

动态、静态 结合调试

动态调试的时候靠近的都是 Arm 汇编,贯穿才智要跟的上调试速率,这有点难。何如办? 那即是动静态结合调试。咱们来看动态调试窗口

图片

1 为这句代码的动态内存地址。

2 为该so文献的动态内存基地址。 

3 为内存段的大小。

静态调试窗口清醒的都是代码的相对偏移地址,是以咱们用  1动态内存地址  - 2内存基地址 = 静态相对偏移地址

图片

是以 F24B4 即是静态代码的偏移地址。是以咱们大开静态调试窗口就不错看到

图片

这么,动态和静态的代码就对上了,用静态的代码来纪录动态调试的位置信息,就不怕调试过程中断带来的冗忙。而且使用 F5 来扶持贯穿代码亦然棒棒哒

动态调试过程时时反反复复,大喊巧合候懒得再行输入。快捷键 ctrl +c 结束现时大喊标准,按高下键输入之前输过的大喊。

跳转到指定地址全是 DCB 数据

图片

这个时候不错按 C 键识别为代码,或者按 P 键识别为函数

动态调试 稽查 内存

动态调试不时即是为了稽查内存。智商如下

图片

一些 反调试、反反调试 反动态分析

起初需要说明的是,一个可实施二进制文献,比如一个 Android native so 库,它自己能作念的事情是有限的,它只可造访 system call,调用系统库函数,造访寄存器、虚构内存、IO 拓荒等等,仅此辛勤。因此,咱们要是在它的第一条实施指示处下断点,它是无法阻滞咱们的。然则它照旧概况使用好多妙技来过问调试器的运行,加多咱们的职责量。

防卫:Android native so 中最早被实施的代码位于 ELF 的 .init_array section 中,比 JNI_OnLoad 函数中的代码实施更早。

关于底下形色的各式反动态分析的妙技,咱们起初需要通过静态分析,来阐发被分析二进制文献的检测点,之后,咱们也许不错修改运行环境;也许不错编写特定的 IDA 推广,在运行时骗取被调试二进制的逻辑;也许不错顺利修改二进制文献,删除或修改它的检测点或检测条款。

检测虚构化

分析坏心软件时,咱们时时在沙盒或虚构化环境中调试它。虚构化环境时时会留住一些思绪,比如使用了某个特定的虚构硬件记号符;启用了某些虚构机特定的机制,比如分享剪贴板;运行了某些扶持器具,比如 VMware Tools。

检测特定器具

比如检测现时环境是否装配了 Wireshark 麇集合手包器具,坏心软件作家可能会觉得正常用户不应该装配 Wireshark。

检测运行环境

比如发现 Android 环境下存在一个名叫 android_server 的进度在运行,或者 23946 TCP 端口处于监听情景,则断绝进度。

检测调试器

Linux / Android 进度在归并工夫只可被 一个 进度调试,因此 so 库不错 fork 一个子进度,然后尝试 ptrace() attach 它的父进度,要是失败,则 so 库可能正在被调试器调试,此时坐窝断绝进度。

so 启动后也不错顺利调用 ptrace(PTRACE_TRACEME, ...),这么后续调试器再调用 ptrace 来 attach 的时候都会失败。

Linux / Android 系统中,要是一个进度正在被调试,则 /proc/self/status 信息中的 TracerPid 项会清醒调试器进度的 PID,要是莫得被调试,则 TracerPid 为 0。so 库不错编写逻辑来按期检测这个值。

检测代码实施的时候间隔

参预调试器后,由于东说念主为的断点和单步操作,代码段实施的间隔一般都会显赫的拉长,so 库不错加入时候检测逻辑,要是发现大于某个阈值,则断绝进度。

终末

通过这一次系统地去学 IDA,发现这个软件真的短长常历害,IDA还有好多高档的开发妙技,致使你还能自界说模块和加载器等,也能我方制作 ida 的插件,在这个过程中,发现看书真的很垂危,我方看书和看网上别东说念主回来的,完全不一样,搞二进制照旧得脚结识地打好基础。

《 二进制分析实战》

图片

本站仅提供存储做事,扫数内容均由用户发布,如发现存害或侵权内容,请点击举报。