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,在系统 ...
随机推荐
- 经典DP 嵌套矩形 (南洋理工ACM—16)
本来是个很水的DP,结果被自己的代码习惯给打败了 代码: #include<iostream> #include<stdlib.h> #include<string.h& ...
- VSS配置
http://www.cnblogs.com/FreeDong/articles/2193151.html
- 20170527关于Thingking in Java
由于工作上的需求,要开始学习Android开发,所以先开始看一些Java方面的知识.学习从Thingking in Java开始,看了一下第一张,感觉真的是一本好书,希望自己努力把他看完,加油! 第一 ...
- Unity 点乘与叉乘 计算敌人位置
点乘:表示两个向量夹角 a*b=|a| * |b| * cos(ab),判断敌人在前后方 叉乘:表示两向量的法线
- 微信小程序小结(3) -- 使用wxParse解析html及多数据循环
wxParse-微信小程序富文本解析组件:https://github.com/icindy/wxParse 支持Html及markdown转wxml可视化 使用 1.copy下载好的文件夹wxPar ...
- CodeForces 114B 【STL应用】
思路: 原来string类能sort 和 swap....太强了.... 注意:字典序最小输出,因为某个地方写挫了,sort了n发,代码挫. #include <bits/stdc++.h> ...
- Scrapy框架初探
Scrapy 貌似是 Python 最出名的爬虫框架 0. 文档 中文文档:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.ht ...
- MCP|MZL|Accurate Estimation of Context- Dependent False Discovery Rates in Top- Down Proteomics 在自顶向下蛋白组学中精确设定评估条件估计假阳性
一. 概述: 自顶向下的蛋白质组学技术近年来也发展成为高通量蛋白定性定量手段.该技术可以在一次的实验中定性上千种蛋白,然而缺乏一个可靠的假阳性控制方法阻碍了该技术的发展.在大规模流程化的假阳性控制手段 ...
- Java实现发送邮箱验证码/注册验证链接
本文以163邮箱为例 1.准备(邮箱账号,邮箱必须设置POP3/SMTP/IMAP,设置步骤如下:) >>步骤:1 开启授权码服务 >>步骤:2 手机获取验证码 >> ...
- oracle 重做日志
原创转载请注明出处 重做日志:记录数据库数据的变化(DDL,DML) 重做日志组:由一个或者多个完全一样的重做日志文件组成,如果一个日志组有多个日志文件,后台进程LGWR会把事务变化写到同一个日志组的 ...