Windows 逆向 Flashcards
【.NET】
endfinally什么意思
表示finally或fault块的终结,并清空堆栈
【.NET】
ldc什么意思,下面分别什么意思:
ldc. i4
ldc. i4.m1
ldc. i4.1
载入,即入栈
ldc. i4 载入4字节
ldc. i4.m1 载入-1
ldc. i4.1 载入1
【破解】
外挂总是跳网址怎么办
下ShellExecuteA断点
【.NET】
一个方法,如果有返回值,ret执行时栈顶是什么样子的?
如果返回值是void,ret执行时栈顶是什么样子的?
如果有返回值,栈顶应有相应的值
如果返回值为void,ret执行时堆栈应为空
【.NET】
.stloc 6什么意思
从栈顶取值存入第6个寄存器
【破解】
遇到cmp ax,0xffff
意味着什么
85%都是vb用于判断的树枝,基本确定这个就是关键跳
【.NET】
请说出结构中程序头中字段的意思:
.assembly
.assembly extern
.module
.assembly 声明本程序集名称
.assembly extern 声明外部(被引用)程序集名称
.module 声明主模块名称
【.NET】
名称混淆都有哪些形式
乱码
无规律长字符串
无规律短字符串
()[]{}.形式
【.NET】
ldarg 2什么意思
载入第2个参数并入栈
【.NET】
源代码(IL或C#)中会多出某个特殊的属性定义来保护程序,怎么办
源代码(IL或C#)中会多出某个属性定义,把这个属性删除即可 (用round-tripping) 相关保护属性有: DebuggerHiddenAttribute DebuggerNonUserCodeAttribute DebuugerStepThroughAttribute SuppressIldasmAttribute IL里面格式形如[DebuggerHiddenAttribute]或[assembly:DebuggerHiddenAttribute]
【.NET】
windows文件名只支持少数字符,且不支持乱码,某些符号,空字符串作为文件名来保护程序,该如何应对
在源文件中奖资源文件改名为Windows文件系统允许的名称,然后使用ildasm反编译,再次编译回可执行文件时,尽量将名称再修改回去,以保证源代码中对资源的调用正常
stfld 什么意思
从栈中取出待存数据和实例指针,并将数据存储到对应的字段中
【破解】
如何应对退出暗桩
用od的api插件-程序退出断点下断
【破解】
如何给代码区块(.text)赋予写权限(共2种方法)
方法1:dump找4000000,右键指定pe头,找到第一个区块(.text区块),看到charactoristics,把60000020改为E0000020
方法2:lordPE -> PE编辑器 -> 区段 ->编辑,把60000020改为E0000020
说出二次开发的常规流程
找个空白处 做个dll exe中添加倒入函数 exe中添加个菜单选项 进入WndProc中hook这个函数
如何判断是不是网络验证
网络验证有延迟
如何手动分析花指令
用run跟踪(run trace) 在调试选项里把跟踪缓存调到最大 断下后在调试中点击开始跟踪 查看-run 跟踪,右键保存到文件 Ctrl+F12跟踪步过,就记录了走了那些命令 建议使用Imm
【.NET】
.text区块结构有什么
输入表 CLR头 MSIL代码,异常处理表(可选) 强名称的hash数据 元数据: 元数据头 元数据流 托管资源数据(可选) 非托管资源(可选) 运行时启动信息
OD中,如何让程序运行到光标所在位置
如何从制定位置开始运行
程序跑飞怎么办
F4
右键-此处设为新eip
在下面一行f2,去按钮【t】,激活全部线程
【.NET】
not是什么意思
neg是什么意思
二者什么关系
not:取反
neg:求补
补码就是对一个数取反再加1
暗桩的关键字符串有哪些
physicaldrive0: 跟随,00填充 破,破解 ntfs,format,本地磁盘,kill debug,ollydbg 断首retn
【破解】
回想一下push大法绕过登陆
绕过网络验证登录,显示其他窗体: 右键查找二进制字符串,搜索hex,ff 25,易语言特征, 向上看那个过程,在第一个加载的窗体id下断(push xxxxxxxx), 这个窗体id是总窗口,我们需要登录后的窗口,右键查找命令, push 10001,找到需要的窗口id(如果不是需要的窗体,查找下一个10001), 这样两个id都知道了,把第一个push窗口id换成登录成功那个id就可跳过登录。
push法窗体id找不到:
每个push段都有一个call,回车call会去jmp xxx的易语言体,主要在所有jmp处下断,看堆栈就能找到窗体id,如果有没加壳的窗体,可以依照它结合堆栈还原窗体
push法应对暗桩 ,od载入修改后有暗桩的程序:
自动退出暗桩:在api常用断点>程序退出下断,堆栈看下面返回到xxxx,跟随。
易语言一堆push表示创建窗体
特点:
push。。。 push。。。 push。。。 push。。。 mov 。。。 call 。。。 add esp 。。。这就是一个窗体或弹窗段
【.NET】
stind什么意思
stind.ref什么意思
间接存储:从栈顶先后取一个值和一个指针,并将该值存储到指针所指位置
stind.ref 存储一个对象引用
静态分析时怎么才能找到main函数
由于main函数实际要压入三个参数,所以在GetCommandlineA函数下面不远处可以找到有三个push的,就是main函数
【.NET】
starg 2什么意思
从栈顶取值并存到第2个参数
Inter处理器是大端还是小端,小端是什么意思
小端 小端:高地址高位,低地址低位 如0x11223344,内存中就是 低地址------------>高地址 0x44,0x33,0x22,0x11
请画出pe文件格式简图
各种区块 区块表 pe头 dos stab dos头
【.NET】
TypeDef的Extends项错误怎么办
CFF打开,在表中TypeDef的第一项处的Extends项改为0
用Alt+M在内存中搜ctrl+B字符串时,搜到了以后怎么做
在搜到的地址下内存访问断点或硬件断点 或 反汇编窗口搜索:push+搜到的地址 或 在反汇编窗口搜索常量:搜到的地址 或 反汇编窗口中哦过呢ctrl+b搜索:搜到的地址(小端)
【破解】
脱壳后有的文件会自校验大小怎么办
设置api断点,GetfileSize,f9,看堆栈反汇编跟随,用户凌空下断点
【.NET】
ldfld 什么意思
从栈顶取实例指针,然后按照取字段并入栈
【.NET】
ldloca 2什么意思
载入第2个局部变量的引用并入栈
【.NET】
请说出以下各类说明的意思: .namespace .class .method .field .data .custom
.namespace 名称空间声明 .class 类声明 .method 方法声明 .field 字段声明 .data 数据(常量)声明 .custom 自定义属性声明
【.NET】
switch-case在.Net逆向中怎么用的
switch …
写法:
switch(Label1,Label2,Label3,...,LabelN) ...... //Default case Label1: ...... Label2: ......
switch 会建立跳转表,从栈顶取
根据这个的值选择跳转目标,值为0则跳到Label1
(A xor B)xor B = ?
A
异或的异或是本身
【破解】
如果程序检测到正在被调试怎么办?
说出三种方法
方法1:
反复重新载入,直到不出现提示为止,然后shift f9
方法2:
HIDEOD
方法3:
换个OD
【.NET】
localloc什么意思
分配一块局部内存,该指令从栈顶取块的大小,并将分配的内存块的托管指针入栈
IDA PRO快捷键考察:
把机器码变为汇编
从当前地址处解析成函数
解析成数据
解析成ASCII
取消把函数汇编成机器码
交叉引用
变成C伪代码
搜索文本
C 把机器码变为汇编
P 从当前地址处解析成函数
D 解析成数据
A 解析成ASCII
U 取消把函数汇编成机器码
X 交叉引用
F5 变成C伪代码
Alt+t 搜索文本,Ctrl+t查找下一个
【.NET】
下面都是什么意思? manifest: Program: .ctor: Main:
manifest:清单
Program:是一个Program类
.ctor:方法
Main:静态方法
【.NET】
如何反流程混淆
针对{smartassembly}:{smartassassin},{smartkill}
针对Dotfuscator:DeDot
万能反混淆神器De4Dot
如果2层壳,根据他的提示可以将其一层一层的脱掉,如下所示:(顺序不能错,只能先de4dot 文件名 -p mc,再de4dot 文件名 -p df)
【.NET】
请说出round-tripping的步骤
ildasm中dump后(勾选line numbers,其他默认):一个资源文件,一个IL文件
修改后直接将俩文件拖到ilasm图标上
用ilasm再编译回去,运行命令:
在SDK命令行中:
ilasm /resource=hellodump.res hellodump.IL #生成release版
ilasm /debug/resource=hellodump.res hellodump.IL #生成debug版
函数调用大致包括几个步骤?
1、参数入栈
2、返回地址入栈
3、跳转到函数入口
4、栈桢调整:序言+结尾
【破解】
易语言中,非独立编译的按钮事件在哪里?
【E】中的fnr段中
在OD中,发现这个函数名太不好记了,想要更改函数名,怎么办?
去函数地址,右键,编辑标签
cmp bl,2D je 00402D13 ...... cmp bl,2B je 00402D15 看到这段代码,应该想到什么?
就是把字符串转换成对应的整数
如将串“123456”转换成整数123456
【.NET】
什么是流程混淆
目的是让反编译软件无法将IL转换为高级语言
scanid看,程序拖到de4dot,scanid看,再de4dot一次,把生成的cleaned放到univeral fixer,点fix assembly,把fix用reflector打开
OD快捷键考察: 单步步过的快捷键 单步步入的快捷键 运行快捷键 条件断点快捷键 条件记录断点快捷键 暂停快捷键 跳转到地址快捷键
F8 单步步过的快捷键 F7 单步步入的快捷键 F9 运行快捷键 shift+F2 条件断点快捷键 shift+F4 条件记录断点快捷键 F12 暂停快捷键 ctrl+G 跳转到地址快捷键
【.NET】
看结构用什么看
dnspy或cff explorer
IDA PRO快捷键考察: 反汇编窗口切换文本跟图形 退到上一个操作地址 搜索地址或符号 重命名 注释 添加标签 列出所有标签 看见系统所有模块
空格:反汇编窗口切换文本跟图形,右键Group node可折叠 ESC:退到上一个操作地址 G :搜索地址或符号 N :重命名 ; :注释 Alt+M:添加标签 Ctrl+M:列出所有标签 Ctrl+S:看见系统所有模块
【.NET】
如何根据reflector提示信息修改相应PE?
如果提示:Invalid number of data directories in NT header,就去可选头部的最后一项RVA数和大小,值改为0x10
如果提示:Module contains multiple #GUID heaps说明有2个#GUID,则在MetaData Header中的NumberOfStreams改为减少1个
【.NET】
程序被一般编码了怎么办?
以IL形式查看方法可以清楚地看出还原过程
【.NET】
token是干什么用的
token:0x06000001是什么意思
token是元数据项的唯一标识,是一个uint数值AABBBBBBh
前一个字节AA指出了它对应的表,后三个字节BBBBBB指出了它在表中的位置
特殊情况,AA=70时,对应的都是用户字符串,后三个字节对应该字符串在#US流中的偏移
IL不直接和内存打交道,而是采用token的方式
用按钮事件下断点时,请分别说出以下语言的按钮事件怎么找? vb&delphi 易语言 VC++ MFC
vb&delphi:用OD脚本
易语言:FF 55 FC 5F 5E或(edebug)FF25易语言体
VC++:sub eax,0xa
MFC:sub eax,0xa或MFC事件工具
关键call的特点是什么?
95%的关键call是不能被跳过的,如果关键跳上面的call可以跳过,那么基本就不是关键call
有的程序是cmd.exe,OD没法附加,怎么办
任务管理器右键,转到进程看进程名
仍然无法附加的话就exeinfo pe,右下角提取出来
还是没办法附加的花就在pchunter中挂起进程再附加
遇到程序需要创建文件的,应该下什么api断点
createfileA
createfileW
【.NET】
br 8是什么意思
从当前位置移动8个位置
【.NET】
brtrue(或brinst) 8是什么意思?
value不为0,则跳转8个位置
列出od找断点的12中方法?
1) api法
2) 字符串法
3) 使用其他汇编工具,如dede
4) 消息断点
5) 条件断点
6) 条件记录断点
7) 内存断点或硬件断点
8) 万能断点
9) 按钮事件
10) 特征码法
11) F12暂停法
12) Ctrl+N找函数
内存断点如果假死怎么办
先硬件执行断点,再内存断点,鼠标放到程序,断下,F
8
【.NET】
nop
dup
pop
分别什么意思
nop:空指令
dup:复制当前栈顶元素,若栈顶为空则出错
pop:出栈,若栈顶为空则出错
请说出字符串法的9种方法
1、先脱壳 2、F9运行起来再找 3、中文搜索:开启强制搜索 4、从外面打开,od附加 5、去除花指令之后再找 6、Alt+M然后Ctrl+B 7、Alt+E去dll中搜 8、有可能在language文件夹中的ini文件中 9、edebug events调试
有的软件打开后就消失了,程序会先退出,然后删除自身。怎么办
先退出,后删除,exitprocess下断(ff25或搜exitprocess或api),deletefile下断,断不下就搜函数名,deletefile,还断不下,就运行,在打开和删除中间空隙快速暂停,返回到用户,f8跟到结束,看什么时候结束或删除,按-号,找跳过,有时,就算跳过这个,后面还需要跳
【.NET】
元数据是什么
描述数据的数据
1、元数据本身也是数据
2、它的功能是描述其他数据
元数据描述了一个模块声明或引用的所有项
【.NET】
算数运算堆栈有什么变化?
算数运算会从栈顶取两个参数进行相应运算,并将结果入栈。
【.NET】
程序强名称编码了怎么办
用{smartkill}
【.NET】
如何应对名称混淆
反混淆也只是先分析,然后手动把名称改掉
方法1:对反编译代码修改,不改变原文件
Dis#的名称修改功能
dnspy右键也可编辑修改
方法2:
直接修改可执行文件的元数据,将#String流中的数据改为新的名称
OD中向上翻变回去了是什么原因
中间那段根本不是代码也不是花指令,而是字符串!
数据与代码的混合使反汇编出现无意义代码。00其实是字符串的结尾。LoadLibrary的参数是指向字符串的指针,而那个返回值就指向字符串的首地址。所有的都解释得通了。
neg eax
sub eax,eax
是什么意思?
eax=0时,eax=0
eax!=0时,eax=-1
破解时,jxx关键跳上面如果不是call,而是cmp地址常量,和1或0比较,这种该怎么办?
地址常量 和0或1比较这种的,基本上jxx修改也只是自慰,需要查找地址常量参考,原来跟1比较就改成跟0比。
全部下断,留下cmp的,修改对比数(或者修改赋值)
这种方法不好使就数据跟随常量,下word写入硬件断点,断下,看上面会有个call,diy这个call,也可以进call去跟可疑码挨个试验
破解的时候蓝屏怎么办,关机怎么办
蓝屏插件去蓝屏,pchunter防止关机
【.NET】
如何手动去掉强名称
PE文件的元数据头中共有四处与程序集本身强名称相关的标识(dnspy可以看到)
1、CLR头(也叫Cor20Header或.NET目录)中的flags项,去除COMIMAGE_FLAGS_STRONGNAMESIGHNED标志;
2、CLR头中的StrongNameSignatiure RVA和Size都改为0
3、Assembly表中的Flags项,减去0x0001(PublicKey标识)
4、Assembly表中的Publickey项,只想Blob的偏移,用0填充
有关注册表的程序什么思路?
方法1:
注册表也可以下api关闭注册表断点,反复f9堆栈找software。
找不到就运行,regedit,第三项,software看看存什么,注册,再看看存什么,
还是没有就可能要注册成功提示后写入注册表,想办法自慰提示成功,就写进去了。
然后下api regcreatkey断点,两种编码都下。读了假码,就一定会和真码对比
方法2:
直接搜software
方法3:
查看模块间调用,找reg
方法4:
RegQueryValueExA(W)下断
易语言怎么干掉退出
易语言退出call的特点是什么
退出段首retn
特点:55开头,有俩call
【.NET】
unaligned 8什么意思
前缀指令,意思是栈顶的指针数据大小为8字节
【.NET】
如何使用工具取出强名称
方法1(去除): 推荐工具Strong Name Remove 载入程序后点Verify检测, Patch用来清除本身强名称(只清除本身) Patch Reference 用来去除引用信息(选中要去除的dll,只清除选中的dll的)
方法2(替换,通用性更强些):
工具:Re-Sign
sn.exe复制到c盘
cmd中
cd ....\
snk -k new.snk
其中new.snk就是要替换的签名文件用Re-Sign选择程序和snk
方法3:以上两种都不行的话就用{smartkill}
od分析时,发现关键call被多次调用,这个发现有什么启发
直接修改关键call就可以一次性全部破解,进入关键call,mov eax,xxx;retn xx(xx根据原本返回多少就是多少)
【.NET】
什么叫名称混淆
在#string流中做手脚,修改类型和成员名称 名称混淆可达到三个目的: 隐藏原作者编程意图,增加阅读难度 扰乱反编译软件的代码显示功能 增大通过反编译手段修改源程序的难度
【.NET】
cpblk和initblk分别是什么意思?
cpblk:复制一块内存,按顺序从堆栈取三个操作数:
待复制内存块的字节大小
源地址
目标地址
initblk:初始化一块内存,按顺序从堆栈取三个操作数:
待初始化内存块的字节大小
初始化值
块的起始地址
【.NET】
endfiter什么意思?
表示filter块的终结,从栈顶去4个字节整数值,
若该值为1,代表该异常应该被处理
若该值不为1,代表继续搜索合适的异常处理
【.NET】 解释指令: stobj cpobj newobj castclass
stobj
依次从堆栈中获取值类型的值,以及值类型实例的指针,然后将该值存储在指针所指的实例中
cpobj
从栈中获取源和目标实例的指针,并将值类型的值从源复制到目标,源和目标都必须符合所标示的值类型
newobj
分配内存,创建某个类(不是值类型)的新实例,调用所标示的实例构造方法,并将对象引用入栈。若该构造方法需要参数,则从堆栈中取得这些参数
castclass
从栈中取初始类实例的对象引用,将其转换为所标示的类,然后将类实例的对象引用入栈
【.NET】
ldc.i4.1
ldc.i4 10
接下来,写出如果1>10,则跳转8个位置
bge 8
【.NET】
brfalse(brzero,brnull) 8是什么意思
如果value为0,则跳转8个位置
【.NET】
leave 8什么意思
清空堆栈,从当前跳转8个位置
【.NET】
逻辑条件检测cgt是怎样操作堆栈的?
检测是否大于
与比较跳转类似,但不跳转,仅将计算结果入栈(1:真,0:假)
它从栈上取两个数据,为栈顶元素
【.NET】
请说明下面五个元数据流是干什么用的: #~ #String #Blob #GUID #US
#~ 最重要的堆,几乎所有元数据信息都以表的形式存储于此,因此又叫元数据表流 #String 包含各种元数据名称(如类名,方法名,成员名,参数名),首部有一个0,以0结尾 #Blob 二进制数据堆,存储程序的非字符串信息,如常量值,方法的签名,强名称等 #GUID 存储说有全局唯一标识 #US IL代码中使用的用户字符串,如ldstr调用的字符串
【破解】
怎样用cff注入一个自己写的hello.dll
引入添加器,添加,hello.dll,单击引出函数,按名称引入,重建引入表
【.NET】
ldind是什么意思
间接载入
从栈顶取出一个指针,载入该指针所指向的数值,并入栈
【.NET】
解释指令:
ldnull
ldobj
ldstr
ldnull:读取空的对象引用,并入栈
ldobj :从堆栈获取值类型实例的托管指针(通过ldarga,ldloca,ldflda或ldsflda取得该指针),然后读取所标示的值类型的实例,并入栈。
ldstr :读入一个字符串,建立[mscorlib]System.String实例,并入栈
在IL中,可以用字符串表示,也可以用字节队列表示,如:
ldstr “hello”+”world”
ldstr bytearray(A1 00 A2 00 A3 00 A4 00 A5 00 A6 00)
F2断点崩溃怎么办?
改用内存断点或硬件断点
【.NET】
ldftn
ldvirftn
calli
干什么用的?
ldftn : 取得所标示方法的指针并入栈 ldvirftn : 从栈顶取对象引用(实例指针),并从相应的v-table中取得方法的指针并入栈 calli 从栈顶获取方法的指针,并从栈中依次读取方法的参数,按所标示的方式调用方法。
od怎样带壳破解?
api常用断点>取初始断点,意思是在程序已经解码与开始运行程序之间的空当下断,f9,断下了,有时需要多次f9才能到初始点,如何判断:看ctr b,如果不是add byte xxxx形式,说明已经解码
怎样增加输入函数
用LordPE
1、PE编辑器->目录,点击输入表的”…”
2、在任意一个DLL上右键,添加导入表,输入DLL文件和函数名(如USER32.dll和MessageBoxA),点+,点OK,LordPE会新增一个区块存放新增的IID数据
3、之后回到【输入表】窗口,选中刚刚的DLL文件,勾选总是查看FirstThunk。则ThunkRVA的值就是该函数在IAT中的RVA地址,调用的时候代码就写call [基址+ThunkRVA],//此处的基质为当前文件的基址,如exe文件基址通常是400000,如果是代码修改在dll中,则需要重定位
4、之后随便找一个空白地方填上想要的字符串参数
push 0 push title字符串地址 push text字符串地址 push 0 call dword ptr [400000+ThunkRVA]
怎样去掉nag
方法1:
exescope或resource hacker查看函数handle instance例如:100
然后od查找命令 push 0x64 (16进制100)
方法2:
od载入一步步跟到nag出现
方法3:4c法去除vb的nag:
每个vb都是push 地址开头,在数据中搜 (地址+0x4c),存储的是另一个地址2,去地址2上,第24(十进制的36)个字节是顺序标志,将上下两块顺序颠倒
有时候修改mov eax,4由于字节长度关系会覆盖下面的指令,怎么办?
把会覆盖的代码放到下面填充部分,上面加一个mov eax,4,然后在要修改的地方jmp到填充位置,之后再jmp回去
说说山寨网络验证的原理。
自己弄个服务器,修改程序指向自己的服务器
在OD中diy一段汇编代码时,当复制上面的call xxx时,需要注意什么
call xxx中的xxx是会变的,需要手动改成正确的
OD快捷键考察: 载入程序: 自动跑,步过: 重新载入: 分析代码: 复制二进制指令机器码: 复制所在地址: 执行到返回: 跳出程序领空,执行到用户代码:
载入程序:F3 自动跑,步过:Ctrl+F8 重新载入:Ctrl+F2 分析代码:Ctrl+A 复制二进制指令机器码:Shift+X 复制所在地址:Ctrl+X 执行到返回:Ctrl+F9 跳出程序领空,执行到用户代码:Alt+F9
【.NET】
加密软件将元数据流表保存为未优化的#-流,大多数工具不支持解析该格式,怎么办?
需要再次编译程序,让ilasm将程序集的元数据表流恢复成#~
没有401000怎么办
运行时,ctrl g输入recv,下断,回溯到10000000
遇到读取配置文件的程序,有什么思路?
情况1:
API断点>ReadFile
情况2:
针对ini,GetPrivateProfileStringA下断,F9,Alt+F9
GUID堆大小错误了怎么办?
【.NET】
修正方法1:使用ilasm再编译
修正方法2:使用CFF直接修改:
选中MetaData Strams节将#GUID项大小改为16即可
【.NET】
看Module表,发现有一个无关的模块怎么办?
删除多余的模块数据即可
方法1:ildasm反编译导出IL,再次编译回去,就自动将多余的模块删除了,因为ilasm生成的程序是不会包含错误的元数据的
方法2: step1: 修改Module记录数, CFF中表头部看MaskSorted,记下偏移量 在winhex中去到偏移量的地址,MaskSorted是4字节,紧随其后的就是一个双字,就是Module的记录数了,修改这个记录数。 step2: 删除多余Module数据 CFF中看多余的那个Module偏移量,UltraEdit打开,选中要删除的那10个字节,右键cut step3: 增加10字节空数据:在#~流的结尾,#String流开始前补上10字节空数据
程序有次数限制怎么办
修改注册表或者:
第一步,把程序领空跳转全部备注y/n
第二部,运行到次数为0,对比看那个跳转变动
明明已经确定算出的注册码是正确的,输入exe中就是错误,怎么办
试试把用户名和注册码调换一下
【.NET】
什么是强名称,强名称有什么作用
弱名称三要素:程序集名称,版本号,地域信息
强名称 :在弱名称基础上再加一个要素:数字签名
强名称作用 :1、区分不同程序集(包括版本不同)2、标识原作者信息,确保代码不被篡改
【.NET】
ldarga 2什么意思
载入第2个参数的地址
IDA Pro中:
*v1 = 6是什么意思
[v1] = 6
【.NET】
字符串资源保存在哪里?
图片资源保存在哪里?
字符串大多保存在#US流中,被ldstr指令直接引用
图片保存在.resources文件中
怎样在程序上新增一个区块.hijack
CFF explorer:
1、节头部中选中一个区块,右键添加节(空白区),大小随便,如1000h,然后填上节名字.hijack
2、右键,重建映像大小,保存即可
IDA Pro快捷键考察: 搜索16进制: 打开断点列表: 单步步入: 单步步过: 运行到函数返回地址: 运行到光标处:
搜索16进制:Alt+B,查找下一个Ctrl+b 打开断点列表:Ctrl+Alt+B 单步步入:F7 单步步过:F8 运行到函数返回地址:Ctrl+F7 运行到光标处:F4