IDA逆向:数组的逆向
阅读《IDA Pro权威指南》第八章,整理的一些笔记,作为逆向的基础,可能有很多认识不足。
//全局分配数组
**********************************************************************
源程序:
int global_arrary[];
int main()
{
int idx = ;
global_arrary[] = ;
global_arrary[] = ;
global_arrary[] = ;
global_arrary[idx] = ; return ;
}
逆向分析:
.text:0041136E mov [ebp+var_8], ; var_8为idx
.text: mov dword_417138, 0Ah ;global_arrary[] =
.text:0041137F mov dword_41713C, 14h ;global_arrary[] =
.text: mov dword_417140, 1Eh ;global_arrary[] =
.text: mov eax, [ebp+var_8] ;eax=idx
.text: mov dword_417138[eax*], 28h ;global_arrary[idx] = 由此可见当索引为变量时,易分析出元素大小 这里为4 .text:004113A1 xor eax, eax
.text:004113A3 pop edi
.text:004113A4 pop esi
.text:004113A5 pop ebx
.text:004113A6 mov esp, ebp
.text:004113A8 pop ebp
.text:004113A9 retn
.text:004113A9 sub_411350 endp
//栈分配数组
**********************************************************************
源程序:
int _tmain(int argc, _TCHAR* argv[])
{
int a[];
//int aa,bb,cc,dd,ee;
int idx = ;
//int* p =a;
a[] = ;
a[] = ;
a[] = ;
a[] = ;
a[] = ; a[idx]=; print(a); return ;
}
逆向分析:
var_EC= byte ptr -0ECh
idx= dword ptr -28h
a= dword ptr -1Ch
var_4= dword ptr -
argc= dword ptr
argv= dword ptr 0Ch
mov [ebp+var_4], eax
mov [ebp+idx], ;idx =
mov [ebp+a], 0Ah ;a[] =
mov [ebp+a+], 14h
mov [ebp+a+], 1Eh
mov [ebp+a+0Ch], 28h
mov [ebp+a+10h], 32h
mov eax, [ebp+idx] ;eax = idx
mov [ebp+eax*+a], 64h ;a[idx] =

可以从idx的在栈中的位置 大致判断出数组的大小,可以操纵数组溢出之类的
数组大小 = a+10h - idx = -1ch + 10h - -28h = 28(十进制) = (5*4 + 8(vs2010保护))
//char数组
*************************************************************************
int _tmain(int argc, _TCHAR* argv[])
{
char* p = {"asdfgeg"};
char* q = "qwqre";
char b[]= {"qw"};
printf("%s\r\n",p);
printf("%s\r\n",q);
printf("%s\r\n",b); return ;
}
mov [ebp+p], offset aAsdfgeg ; "asdfgeg" ;将字符串常量地址赋值给 [ebp+p]
mov [ebp+q], offset aQwqre ; "qwqre"
mov ax, word ptr ds:aQw ; "qw" ds是段寄存器,是用来存储段地址的,程序是通过段地址:偏移地址寻找数据地址的。
mov word ptr [ebp+b], ax //b[0]
mov cl, ds:byte_415742
mov [ebp+b+], cl //b[2]
vs2010反汇编:
char* p = {"asdfgeg"};
00E5139E mov dword ptr [p],offset string "asdfgeg" (0E55750h)
char* q = "qwqre";
00E513A5 mov dword ptr [q],offset string "qwqre" (0E55748h)
char b[]= {"qw"};
00E513AC mov ax,word ptr [string "qw" (0E55744h)]
00E513B2 mov word ptr [b],ax
00E513B6 mov cl,byte ptr ds:[0E55746h]
00E513BC mov byte ptr [ebp-1Eh],cl
//堆分配数组
*****************************************************************************************
int main()
{
int* heapArray = (int*)malloc( * sizeof(int));
int idx = ;
heapArray[] = ;
heapArray[] = ;
heapArray[] = ;
heapArray[idx] =; return ;
}
mov esi, esp
push 0Ch ; Size //malloc的参数 即数组大小
call ds:__imp__malloc
add esp,
cmp esi, esp
call j___RTC_CheckEsp
mov [ebp+heapArray], eax
mov [ebp+idx],
mov eax, [ebp+heapArray] //数组起始位置储存在heaparray中 每次要先获得基址再加偏移
mov dword ptr [eax], 0Ah
mov eax, [ebp+heapArray]
mov dword ptr [eax+], 14h
mov eax, [ebp+heapArray]
mov dword ptr [eax+], 1Eh
mov eax, [ebp+idx]
mov ecx, [ebp+heapArray]
mov dword ptr [ecx+eax*], 28h
*************************************************************************************
总结:
只有当变量作为数组的索引时才最容易确定数组的存在
IDA逆向:数组的逆向的更多相关文章
- Android逆向-Android基础逆向(5)
本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...
- 20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础
20145219<网络对抗技术>PC平台逆向破解之逆向与Bof基础 实践目标 实践对象:一个名为pwn1的linux可执行文件. pwn1正常执行流程:main调用foo函数,foo函数会 ...
- IDA 对 SO 的逆向
ApkTool对apk进行解包,在解包后的lib目录中找到so文件 so文件大概有以下几种 armeabi: 第5代.第6代的ARM处理器,早期的手机用的比较多. armeabiv-v7a:第7代及以 ...
- 【逆向工具】逆向工具101editor使用-游戏快速通关
[渡者游戏简介] 船夫小江将运送客人的,羊.狐狸.草等物品过河,如果留下动物被其它种类吃掉任务就失败了.你需要帮助他做出正确的顺序选择.Ferryman是一款根据经典谜题改编的解谜游戏. 一.查看文件 ...
- Android逆向-Android基础逆向7(内购干货集合)
本文作者:MSTLab-EvilChen 0×00 前言 首先,本来想写NDK的,但是还是先把这个流程过一遍吧,这个流程是必不可少的.其次,RMB真的是一个好东西. 导航 由于本人为了节省时间,不想贴 ...
- IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习
相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...
- 来自高维的对抗 - 逆向TinyTool自制
一.序 无论是逆向分析还是漏洞利用,我所理解的攻防博弈无非是二者在既定的某一阶段,以高维的方式进行对抗,并不断地升级维度.比如,逆向工程人员一般会选择在Root的环境下对App进行调试分析,其是以ro ...
- 【逆向知识】GitHub:Awesome-Hacking(黑客技能列表-逆向)
0 初衷 GitHub这一份黑客技能列表很不错,包含了多个方向的安全.但目前我关注只有逆向工程与恶意代码,所以其他的被暂时略过. 虽然很感谢作者的辛勤付出,但并不打算复制粘贴全套转载.逐条整理是为了从 ...
- 【逆向笔记】OD工具使用-逆向TraceMe.exe
名词注释 System breakpoint:系统断点,OllyDbg用CreateProcessA加载DEBUG_ONLY_THIS_PROCESS参数执行,程序运行之后会触发一个INT13,在系统 ...
随机推荐
- 修改TABLE中的Column的属性
删除主键名 这个主键名并不是列名,而是主键约束的名字,如果当时设置主键约束时没有制定约束的名字 设置主键的语句:ALTER TABLE P add constraint pk PRIMARY KEY ...
- TMF大数据分析指南 Unleashing Business Value in Big Data(二)
前言 此文节选自TMF Big Data Analytics Guidebook. TMF文档版权信息 Copyright © TeleManagement Forum 2013. All Righ ...
- 【mysql 统计分组之后统计录数条数】
SELECT count(*) FROM 表名 WHERE 条件 // 这样查出来的是总记录条 SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id //这样统 ...
- Vim7.4 配置项列表
vim所有的配置项如下,可以根据自己的需要进行配置,每个配置项的详细信息 可以在vim里面使用:help option-name # 配置项名称 缩写词 简要说明 'aleph' 'al' Aleph ...
- [Swift]Scanner字符串扫描类
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 小K的农场 差分约束
题目描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述: 农场a比农场b至少多种植了c个单位的作 ...
- MQ 重复消费如何解决?
1. 使用幂等操作 乐观锁:每个数据有一个版本号,和当前版本号相同的时候进行更新 去重表(缓存): 唯一性索引,如果已经存在值了就不行更新 2. 算法 两个链表是否相交? 3.redis 集合相交的 ...
- 关于苹果出现NaN的情况----由Date格式解析方式不同引起的Bug
源于一个工作中遇到的问题:IOS 上时间显示为 NaN,而安卓上时间显示正常. 问题的根源在于 安卓 和 苹果 对于 JS Date 对象的不同解析. 安卓: new Date("2018- ...
- spring boot中ConditionalOnClass为什么没有classNotFound类加载异常
查看原码时有很多飘红的地方, 这些import都失败的地方, 为什么在运行时没有报错? 首先这些@Configuration类没有被程序中的类引用到 其次即使引用到这个类,不一定引用到类中的具体某个方 ...
- 【ACM】括号配对问题 - 栈
括号配对问题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=1 ...