首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

[前几天都是算法啥的]来个和汇编有关的有关问题吧【欢迎赵老师莅临指导】

2012-09-29 
[前几天都是算法啥的]来个和汇编有关的问题吧【欢迎赵老师莅临指导】void func(void* bytes, int len){char

[前几天都是算法啥的]来个和汇编有关的问题吧【欢迎赵老师莅临指导】

void func(void* bytes, int len)
{
  char a[8] = {};
  memcpy(a, bytes, len);

}

一看就知道了,len如果过长,栈就被溢出了。没关系,这也是个题目。
主要是刚才发现赵老师也活跃在这里,于是就请教一下吧。【刚才有人问中文字符串匹配,赵老师发了一段strstr的汇编实现】

好吧,赵老师,和各位童鞋,哪位能写一段bytes of shellcode, 当函数返回时,弹出个MessageBox即可。

上面随便写点什么,比如说"Hello Teacher Zhao"什么的。

Go Go Go。。。赵老师,你汇编这么好,希望你第一个啊。~

[解决办法]
我们就不凑热闹了,顶起!
[解决办法]
友情围观~~

或许我应该去开个赌局,赌赵教主能否写出来~~
[解决办法]
搬板凳,等赵老师。
[解决办法]
赵老师是LZ尊贵的嘉宾啊,坐等。。。
[解决办法]
以前某人的:

C/C++ code
char hello[] = {    0xE9,  0xC5,  0x00,  0x00,  0x00,  0x5A,  0x33,  0xC9,  0x64,  0x8B,  0x35,         0x30,  0x00,  0x00,  0x00,  0x8B,  0x76,  0x0C,  0x8B,  0x76,  0x1C,  0x8B,         0x46,  0x08,  0x8B,  0x7E,  0x20,  0x8B,  0x36,  0x38,  0x4F,  0x18,  0x75,          0xF3,  0x50,  0x52,  0x6A,  0x0C,  0xE8,  0x2C,  0x00,  0x00,  0x00,  0x5B,          0x83,  0xC3,  0x0D,  0x53,  0xFF,  0xD0,  0x83,  0xC3,  0x07,  0x53,  0x6A,          0x0B,  0xE8,  0x1A,  0x00,  0x00,  0x00,  0x5B,  0x83,  0xC3,  0x18,  0x6A,          0x00,  0x53,  0x53,  0x6A,  0x00,  0xFF,  0xD0,  0x58,  0x83,  0xEB,  0x0C,          0x53,  0x6A,  0x0B,  0xE8,  0x02,  0x00,  0x00,  0x00,  0xFF,  0xD0,  0x8B,          0xD8,  0x83,  0xC0,  0x3C,  0x8B,  0x00,  0x03,  0xC3,  0x81,  0x38,  0x50,          0x45,  0x00,  0x00,  0x75,  0x5B,  0x8B,  0x40,  0x78,  0x03,  0xC3,  0x50,         0x8B,  0xC8,  0x8B,  0x49,  0x14,  0x8B,  0x40,  0x20,  0x03,  0xC3,  0x55,         0x8B,  0xE8,  0x33,  0xD2,  0x51,  0x8B,  0x00,  0x03,  0xC3,  0x8B,  0xF8,         0x8B,  0x74,  0x24,  0x14,  0x8B,  0x4C,  0x24,  0x10,  0xFC,  0xF3,  0xA6,         0x75,  0x29,  0x83,  0xC4,  0x04,  0x8B,  0x44,  0x24,  0x04,  0x8B,  0x40,         0x24,  0x03,  0xC3,  0xD1,  0xE2,  0x03,  0xC2,  0x33,  0xD2,  0x66,  0x8B,          0x10,  0x8B,  0x44,  0x24,  0x04,  0x8B,  0x40,  0x1C,  0x03,  0xC3,  0xC1,         0xE2,  0x02,  0x03,  0xC2,  0x8B,  0x00,  0x03,  0xC3,  0xEB,  0x0B,  0x42,         0x83,  0xC5,  0x04,  0x8B,  0xC5,  0x59,  0xE2,  0xBA,  0x33,  0xC0,  0x5D,         0x59,  0xC2,  0x04,  0x00,  0xE8,  0x36,  0xFF,  0xFF,  0xFF,  0x4C,  0x6F,         0x61,  0x64,  0x4C,  0x69,  0x62,  0x72,  0x61,  0x72,  0x79,  0x41,  0x00,         0x75,  0x73,  0x65,  0x72,  0x33,  0x32,  0x00,  0x4D,  0x65,  0x73,  0x73,         0x61,  0x67,  0x65,  0x42,  0x6F,  0x78,  0x41,  0x00,  0x45,  0x78,  0x69,         0x74,  0x50,  0x72,  0x6F,  0x63,  0x65,  0x73,  0x73,  0x00,  0x48,  0x65,        0x6C,  0x6C,  0x6F,  0x20,  0x57,  0x6F,  0x72,  0x6C,  0x64,   0x00};        int main(int argc, char* argv[])    {        ((void(_stdcall*)())&hello[0])();        return 0;}
[解决办法]
看热闹, 这个要指定编译器,操作系统版本的吧, 最好是提供编译好的binary...
等 linux / win7 x64 版本...
[解决办法]
赵教主又遁了...
[解决办法]
貌似赵教主又露面了,但是他依然假装没看到你的贴~~
[解决办法]
来帮忙顶一下, 坐等赵老师.
[解决办法]
唉,你们就别调侃赵大师了吧,偶现在只盼谁在网上放个答案,好让赵大师马上搜索出来,再来表演复制粘贴大法.........

不过,偶现在算是想通了,其实童鞋们老批判赵大师复制粘贴是不对的!虽然赵大师的复制粘贴似文非文、似屁非屁,看起来总是那么飘渺无垠,但相对于赵大师那些发自肺腑的“真知灼见”,却也算高深莫测了。所谓两权相害取其轻,赵大师的复制粘贴大法倒也成了好事了........


[解决办法]

探讨
引用:

貌似赵教主又露面了,但是他依然假装没看到你的贴~~

无所谓,相信赵老师还是懂些许汇编的。只不过没搞过这些奇怪的东西吧。

[解决办法]
探讨
看热闹, 这个要指定编译器,操作系统版本的吧, 最好是提供编译好的binary...
等 linux / win7 x64 版本...

[解决办法]
不带这么为难赵老师的啊,我想了一个办法,从fs寄存器中找到kernel32.dll的基址,然后从IAT里面导出GetProcAddressA,LoadLibraryA,FreeLibraryA等API的地址,然后载入user32.dll,找到MessageBoxA,在往里面传参数,就像重定位一样,这样在各个编译器上都能编译成功了。
赵老师,我支持你啊。
[解决办法]
C/C++ code
#pragma comment(lib,"user32")#include <windows.h>#include <stdlib.h>char b[]={//将此数组的各字节填写为第14行对应汇编指令内容,然后将第14行注释掉,重新编译。再手动调整细节即可。(^_^)    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    //...};void func(void* bytes, int len) {    char a[8] = {};    MessageBox(NULL,"Hello Teacher Zhao","MsgBox",MB_OKCANCEL|MB_SETFOREGROUND);return;    memcpy(a, bytes, len);}int main() {    func(b,sizeof(b));    return 0;}
[解决办法]
赵老师耍赖,不算
[解决办法]
探讨

C/C++ code
#pragma comment(lib,"user32")
#include <windows.h>
#include <stdlib.h>
char b[]={//将此数组的各字节填写为第14行对应汇编指令内容,然后将第14行注释掉,重新编译。再手动调整细节即可。(^_^)
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
……

热点排行