阅读《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. C习题练习

    #define _CRT_SECURE_NO_WARNINGS#include <stdio.h> //比较俩个数的大小 //int max(int a, int b) {// int t ...

  2. 第三章 Goroutine调度策略(16)

    本文是<Go语言调度器源代码情景分析>系列的第16篇,也是第三章<Goroutine调度策略>的第1小节. 在调度器概述一节我们提到过,所谓的goroutine调度,是指程序代 ...

  3. 2010辽宁省赛F(字典树,动态规划)

    #include<bits/stdc++.h>using namespace std;int n,x;char s[10010];char a[31010];int val[100010] ...

  4. 洛谷P3819 松江1843路

    P3819 松江1843路 题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一 ...

  5. VBA学习笔记

    这是一个学习VBA编程的学习笔记. 一. 介绍 二. 使用手册 2.1. 如何在Excel2010中开始使用VBA? 2.2. 如何使用VBA编辑器进行编程? 三. 语法说明 3.1 数据类型 3.2 ...

  6. dorado开发模式下实现动态查询

    使用dorado开发模式,我们可以实现以下开发技巧 开发技巧1.实现动态查询功能: 1. 查询按钮的onClick事件中写入: datasetEmployee.parameters().setValu ...

  7. 洛谷P2574 XOR的艺术

    题目描述 \(AKN\)觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为\(n\)的\(01\)串. 2 ...

  8. SharePoint2016 母版页引用样式和脚本路径无效

    直接引用16目录(/_layouts/16/)会导致页面找不到文件,必须将16目录改为15目录(/_layouts/15/),估计是内部机制还没有更新,这个坑不知道要多久才会填上=,=

  9. mybatis批量处理sql

    转载大神 https://www.cnblogs.com/xujingyang/p/8301130.html

  10. 红黑树(Red-Black Tree),B树,B-树,B+树,B*树

    (一)红黑树(Red-Black Tree) http://www.cnblogs.com/skywang12345/p/3245399.html#a1 它一种特殊的二叉查找树.红黑树的每个节点上都有 ...