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,在系统 ...
随机推荐
- 【maven setting.xml】
<!--声明语句--> <?xml version="1.0" encoding="UTF-8"?> <settings xmln ...
- PHP现阶段发现的不足点
1.php测试单元的实现(参考文档:https://blog.csdn.net/weixin_41282397/article/details/85052015)
- cookie中存取中文字符
1.存入中文: Cookie c = new Cookie("username", java.net.URLEncoder.encode(name,"utf-8" ...
- cf779D(记忆化dp)
题目链接: http://codeforces.com/problemset/problem/799/D 题意: 给出两个矩阵边长 a, b, 和 w, h, 以及一个 c 数组, 可选择 c 数组中 ...
- linux下oracle一些常用命令
dbca 配置数据库netca 配置tnslsnrctl status tns状态lsnrctl stop TNS停止lsnrctl start TNS启动
- mac 终端命令kill掉某个指定端口
用mac电脑开发时,有时候会遇到端口占用的问题,导致我们,不得不去结束这个端口. 第一步在终端命令输入: lsof -i : 端口号(如:lsof -i:8080) 第二步: kill -9 PID ...
- 在 .NET Framework 中使用 StringBuilder 类
在 .NET Framework 中使用 StringBuilder 类 String 对象是不可变的.每次使用 System.String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就 ...
- ByteBuffer flip描述
# 关于flip ByteBuffer 的filp函数, 将缓冲区的终止位置limit设置为当前位置, 缓冲区的游标position(当前位置)重设为0. 比如 我们有初始化一个ByteBuffer ...
- String类、static、Arrays类、Math类
String类.static.Arrays类.Math类 String类.static.Arrays类.Math类 String类.static.Arrays类.Math类 String类.stati ...
- 树的计数 Prufer序列+Cayley公式
先安利一发.让我秒懂.. 第一次讲这个是在寒假...然而当时秦神太巨了导致我这个蒟蒻自闭+颓废...早就忘了这个东西了... 结果今天老师留的题中有两道这种的:Luogu P4981 P4430 然后 ...