第五枪:修身七年——C++与API调用

admin 2023年7月24日11:58:18评论16 views字数 2262阅读7分32秒阅读模式

    关于内存模型与进程已经写了大半,但是自己在读的时候,发现使用了很多代码来举实例,于是觉得把这里先梳理一下C++和Windows API方面的知识可能会新手向一点。



为什么选择C++

    C++兼容C语言,可直接调用Windows API和内核函数,同时拥有面向对象、泛型编程、operator重载等特性,适合编写对性能和逃逸检测要求极高的免杀软件和内核级程序。通俗来讲,就是可以更好地处理底层!我之前写小工具是用python,有一天我突发奇想问GPT——python可不可以写驱动?你猜怎么着,这不一下子就把我们为什么用C++的原因说出来了。

第五枪:修身七年——C++与API调用

    再看我圈出的部分,解释型脚本语言是什么意思?解释型脚本语言是在运行时逐行解释执行的动态语言,具有更好的移植性(比如sqlmap可以在windows上跑也可以在Linux上跑,还可以在Termux里跑!有python解释器就行);而C++是静态类型的编译型语言,编译生成机器码后直接执行,性能更优的同时也限制了它运行平台(从可执行文件格式就可以看出来EXE和ELF)。


C++入门

    这个嘛,打开B站,就会有很多很好的教程。有其他语言编程经验的话,C++还是很好上手的。之所以这么说,不是因为C++简单,而是我们目前要用到的知识还是很浅表的。大概包含这些:


  • 1. 数据类型

  • 包括基本数据类型(整型、浮点型、字符型等)和用户自定义数据类型(类、结构体等)。需要了解类型定义、类型转换等概念。

  • 2. 变量和常量

  • 理解变量的定义和使用,常量的定义等。

  • 3. 运算符

  • 包含算术运算符、逻辑运算符、位运算符等,要理解运算符的优先级和结合性。

  • 4. 流程控制

  • 如if/else语句、循环(for/while)、跳转语句等,控制程序执行流程。

  • 5. 函数

  • 函数的定义、声明、调用,参数传递,返回值等函数相关概念。

  • 6. 数组与字符串

  • 一维、多维数组的定义和使用,字符串表示和处理。

  • 7. 指针

  • 指针和地址的概念,指针操作。

  • 8. 结构体

  • 自定义复合数据类型结构体的定义和使用。

  • 9. 类与对象

  • 面向对象编程的基础,类的定义,对象的创建和使用。

  • 10. 基础算法

  • 如排序、搜索等基础算法。

  • 后者还有析构重载友元、模板、异常、STL等等,但是我们学完上面10点,基本上就可以无障碍的阅读文章了。




Windows API是什么?

    Windows系统也是一个软件,而这个软件呢,是运行在硬件上的(看似废话),我们若是要操作内存,就需要通过Winapi实现。

第五枪:修身七年——C++与API调用

    例如我们要修改某个进程的值,就需要WriteProcessMemory函数,这就牵扯到内存页,虚拟内存,进程结构等等知识了(见内存模型与进程)。WriteProcessMemory将我们的意图转为机器码,放入到底层去执行。而直接去在硬件上执行的,汇编代码形式,如下图

第五枪:修身七年——C++与API调用

    这些指令是在寄存器之间搬东西(见汇编基础),而这个文件编译出来的bin二进制文件,是可以之间在硬件上执行的。

第五枪:修身七年——C++与API调用

    什么?不是0101001,换个进制就是了。那么我们可以将他放到Windows上跑吗?不行。上图的current后就是让他成为一个bios运行在硬件(虚拟机)上。调试就可以看到寄存器被写入(这是后话)。

第五枪:修身七年——C++与API调用

    跑题了,继续说我们的Winapi。现在我们就可以给Winapi下定义了。Winapi是Windows操作系统提供的应用程序接口。供我们通过调用这个API函数来访问Windows系统的内核功能、子系统功能以及其他一些常用功能。那既然我们要在Windows上对抗,就肯定要学习Winapi喽!

    微软有详尽的文档来告诉我们如何使用这个api,而且windows是一个闭源的系统,所以我们在使用这些api时要有严格的规范。来点妙妙技巧!

    微软对各种类型变量名命名很有规范,如P开头的变量定是个指针类型的。

第五枪:修身七年——C++与API调用

    Vs中鼠标点函数名称选择,按下F1来快速转到微软文档介绍

第五枪:修身七年——C++与API调用

    Vs中鼠标点函数名称选择,按下F12来快速转到函数定义,用以快速了解这个函数需要哪些变量才可以调用,结构体也是一样,F12跳转定义。

第五枪:修身七年——C++与API调用


总结——C++与WinAPI

    WinAPI是Windows操作系统提供的应用程序接口,可以在C/C++程序中调用WinAPI函数来实现访问Windows系统功能和服务。

C++与WinAPI结合编程具有以下特点:

  • 1. C++可以直接调用WinAPI函数。WinAPI使用了标准C语言编写,C++完全兼容C语言。
  • 2. C++和WinAPI配合可以发挥两者的优势。C++提供面向对象、RAII、泛型编程等特性,WinAPI提供Windows系统底层访问。
  • 3. 通过使用Windows数据类型(如HANDLE, HWND等)和WinAPI函数,C++可以开发各种Windows应用和服务。
  • 4. C++可以使用智能指针、类封装WinAPI对象,进行C++式的内存和资源管理,避免直接使用WinAPI容易出现的资源泄漏问题。
  • 5. C++的面向对象特性可以帮助组织与分解复杂的Windows程序逻辑。C++类似地封装WinAPI对象提供更好的抽象。
  • 6. 用C++实现Windows程序主体逻辑,用WinAPI完成底层Windows系统交互,可以充分利用两者的优点。
  • 所以,C++和WinAPI可以很好地协同工作。C++程序可以通过直接调用WinAPI来进行Windows编程,利用C++的现代语言特性使代码质量更高。



DONE!


原文始发于微信公众号(HB网络安全探究实验室):第五枪:修身七年——C++与API调用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月24日11:58:18
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   第五枪:修身七年——C++与API调用https://cn-sec.com/archives/1900691.html

发表评论

匿名网友 填写信息