直接上例子
0x1
int arr[][4] =
{1,2,3,4,5,6,7,8,9,10,11,12};
0040B538 mov dword ptr [ebp-30h],1 0040B53F mov dword ptr [ebp-2Ch],2 0040B546 mov dword ptr [ebp-28h],3 0040B54D mov dword ptr [ebp-24h],4 0040B554 mov dword ptr [ebp-20h],5 0040B55B mov dword ptr [ebp-1Ch],6 0040B562 mov dword ptr [ebp-18h],7 0040B569 mov dword ptr [ebp-14h],8 0040B570 mov dword ptr [ebp-10h],9 0040B577 mov dword ptr [ebp-0Ch],0Ah 0040B57E mov dword ptr [ebp-8],0Bh 0040B585 mov dword ptr [ebp-4],0Ch
由此可见,多维数组的分配方式和一维数组没区别
0x2 多维数组的寻址方式
比如说 int a[8][5];
寻址
a[4][3]的时候,寄存器就会用a[4*5+3]来找 例子: int
arr[2][3] ; |
22: arr[1][2]=21; //1*3+2 1*0x12(3*4)
0040B89E mov ecx,1
0040B8A1 imul ecx,ecx,0Ch //1*12=1*3*4 乘4是因为数组元素是int型
0040B8A4 lea edx,[ebp+ecx-18h]
0040B8A8 mov eax,2
0040B8AB mov dword ptr [edx+eax*4],15h //(1*3)*4+2*4
int arr[2][4] ;
22: arr[i][j]=21;
0040B8A4 mov ecx,dword ptr [ebp-24h] // i
0040B8A7 shl ecx,4 ///编译器优化 i*4*4=i左移4位(4*4=16 16=2**4)
0040B8AA lea edx,[ebp+ecx-20h]//行的首地址
0040B8AE mov eax,dword ptr [j]
0040B8B1 mov dword ptr [edx+eax*4],15h ==i*4*4+j*4
0x3
并排序反编译
参数:无
局部变量:larr[8]={3,5,7,9,12,25,34,55}(-20...)
larr1[6]={4,7,9,11,13,16}(-38...-24)
[ebp-3c]:la=0 ,[ebp-40]:lb=0 [ebp-44]:lc=14
larr2[14]={0} {-7c...-48} [ebp-80]:ld=0 [ebp-84]:le
全局变量:
无
返回值:
0
int larr[8]={3,5,7,9,12,25,34,55};
int
larr1[6]={4,7,9,11,13,16};
int
la=0,lb=0,lc=14;
printf("%d**",lc);
int
larr2[14]={0};
int ld=0;
while(la<8||lb<6)
{
if(larr[la]<larr1[lb]
&& (lb<6 && la<8))
{
larr2[ld]=larr[la];
ld++;
la++;
}
else
if(larr[la]>larr1[lb] && (lb<6 && la<8))
{
larr2[ld]=larr1[lb];
ld++;
lb++;
}
else
if(lb<6 && la<8)
{
larr2[ld]=larr[la];
ld++;
la++;
larr2[ld]=larr1[lb];
ld++;
lb++;
}
if(la>=8)
while(lb<6)
{
larr2[ld]=larr1[lb];
ld++;
lb++;
}
else
if(lb>=6)
while(la<8)
{
larr2[ld]=larr[la];
la++;
ld++;
}
}
lb=0;
while(lb<14)
{
int
le=larr2[lb];
lb++;
printf("%d
",le);
} |
逆向步骤:
1,掐头去尾(把保护现场 恢复现场画成红色)
分金:
找到局部变量 全局变量 参数
定穴:
根据每个jmp画流程图
探墓:
从头开始把汇编代码分块
夺宝:
分块后就可以还原C语言了! 住:一块汇编是一个功能(一条C语言)
汇编代码:图一
详细请看excl
[课程]FART 脱壳王!加量不加价!FART作者讲授!
最后于 2021-9-8 15:38
被AMask编辑
,原因: