阅读《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逆向:数组的逆向的更多相关文章

  1. Android逆向-Android基础逆向(5)

    本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...

  2. 20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础

    20145219<网络对抗技术>PC平台逆向破解之逆向与Bof基础 实践目标 实践对象:一个名为pwn1的linux可执行文件. pwn1正常执行流程:main调用foo函数,foo函数会 ...

  3. IDA 对 SO 的逆向

    ApkTool对apk进行解包,在解包后的lib目录中找到so文件 so文件大概有以下几种 armeabi: 第5代.第6代的ARM处理器,早期的手机用的比较多. armeabiv-v7a:第7代及以 ...

  4. 【逆向工具】逆向工具101editor使用-游戏快速通关

    [渡者游戏简介] 船夫小江将运送客人的,羊.狐狸.草等物品过河,如果留下动物被其它种类吃掉任务就失败了.你需要帮助他做出正确的顺序选择.Ferryman是一款根据经典谜题改编的解谜游戏. 一.查看文件 ...

  5. Android逆向-Android基础逆向7(内购干货集合)

    本文作者:MSTLab-EvilChen 0×00 前言 首先,本来想写NDK的,但是还是先把这个流程过一遍吧,这个流程是必不可少的.其次,RMB真的是一个好东西. 导航 由于本人为了节省时间,不想贴 ...

  6. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  7. 来自高维的对抗 - 逆向TinyTool自制

    一.序 无论是逆向分析还是漏洞利用,我所理解的攻防博弈无非是二者在既定的某一阶段,以高维的方式进行对抗,并不断地升级维度.比如,逆向工程人员一般会选择在Root的环境下对App进行调试分析,其是以ro ...

  8. 【逆向知识】GitHub:Awesome-Hacking(黑客技能列表-逆向)

    0 初衷 GitHub这一份黑客技能列表很不错,包含了多个方向的安全.但目前我关注只有逆向工程与恶意代码,所以其他的被暂时略过. 虽然很感谢作者的辛勤付出,但并不打算复制粘贴全套转载.逐条整理是为了从 ...

  9. 【逆向笔记】OD工具使用-逆向TraceMe.exe

    名词注释 System breakpoint:系统断点,OllyDbg用CreateProcessA加载DEBUG_ONLY_THIS_PROCESS参数执行,程序运行之后会触发一个INT13,在系统 ...

随机推荐

  1. 工作随记--div最小高度

    给div添加最小高度 min-height:1000px;//IE7\FF height:100%;//IE6\IE7\FF 这个很重要,IE6定死高度后,需要再加上这条,才能自动延伸. _heigh ...

  2. 转:基础篇|PHP如何解决网站大流量和高并发

    基础篇 高并发架构基础概念和优化思路 高并发架构相关概念 并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程 ...

  3. 洛谷P2828 Switching on the Lights(开关灯)

    P2828 Switching on the Lights(开关灯) 题目背景 来源:usaco-2015-dec Farm John 最近新建了一批巨大的牛棚.这些牛棚构成了一个N*N的矩形网络.( ...

  4. scapy框架

    性能相关 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. import requests def fetch_async(url): ...

  5. [转]AFNetworking 3.0迁移指南

    http://www.jianshu.com/p/047463a7ce9b?utm_campaign=hugo&utm_medium=reader_share&utm_content= ...

  6. java中的String,StringBuffrer,Stringbuilder的区别

    简单描述下 效率:StringBuilder>StringBuffer>String 使用场景: 如果要操作少量的数据用 = String 单线程操作字符串缓冲区 下操作大量数据 = St ...

  7. 原生Ajax实现

    发现一件可怕的事情,前端学不完了,春招要开始了.唉,人生苦短.

  8. HDU 6447 YJJ’s Salesman (树状数组 + DP + 离散)

    题意: 二维平面上N个点,从(0,0)出发到(1e9,1e9),每次只能往右,上,右上三个方向移动, 该N个点只有从它的左下方格点可达,此时可获得收益.求该过程最大收益. 分析:我们很容易就可以想到用 ...

  9. UVALive 7511 L - Multiplication Table 数学模拟题,暴力

    给定一副表,问其是否合法. 思路:当全部是?的时候,是合法的. 如果不是,那么,就找到一个数字,把它拆成若干个a*b的形式,去判断其它点是否合法即可. 拆分数字的时候,只需要枚举到sqrt(n),因为 ...

  10. select 下拉框的复选

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdUAAAFSCAIAAAArbtLAAAAgAElEQVR4nOydd1gUWaK3Z2/YvXd3v7 ...