1. #include"CRC32.h"
  2. #include<Windows.h>
  3. #include<iostream>
  4. using namespace std;
  5. void test1()
  6. {
  7. int a = 1;
  8. cout << "1111111111111111111111" << endl;
  9. }
  10. void Crc32Test()
  11. {
  12. char *buffer=(char*)GetModuleHandleA(0);//参数为0就获取当前进程的句柄
  13. PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)buffer;
  14. PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)(pDosHeader->e_lfanew + buffer);
  15. PIMAGE_SECTION_HEADER pSectionHeader = IMAGE_FIRST_SECTION(pNtHeader);
  16. for (int i = 0; i < pNtHeader->FileHeader.NumberOfSections - 1; i++)
  17. {
  18. if (pSectionHeader->Characteristics / 0x10000000 == 6)
  19. {
  20. cout << pSectionHeader->Name << endl;
  21. auto CrcNum = make_crc((unsigned char*)(pSectionHeader->VirtualAddress + buffer), pSectionHeader->Misc.VirtualSize);
  22. cout << CrcNum << endl;
  23. }
  24. pSectionHeader++;
  25. }
  26. }
  27. int main()
  28. {
  29. Crc32Test();
  30. system("pause");
  31. return 0;
  32. }

头文件:

  1. #pragma once
  2. #include<iostream>
  3. uint32_t crc32_table[256];
  4.  
  5. int make_crc32_table()
  6. {
  7. uint32_t c;
  8. int i = 0;
  9. int bit = 0;
  10.  
  11. for (i = 0; i < 256; i++)
  12. {
  13. c = (uint32_t)i;
  14.  
  15. for (bit = 0; bit < 8; bit++)
  16. {
  17. if (c & 1)
  18. {
  19. c = (c >> 1) ^ (0xEDB88320);
  20. }
  21. else
  22. {
  23. c = c >> 1;
  24. }
  25.  
  26. }
  27. crc32_table[i] = c;
  28. }
  29.  
  30. return 1;
  31. }
  32. uint32_t make_crc(unsigned char* string, uint32_t size)
  33. {
  34. uint32_t crc = 0xFFFFFFFF;
  35. make_crc32_table();
  36. while (size--)
  37. crc = (crc >> 8) ^ (crc32_table[(crc ^ *string++) & 0xff]);
  38.  
  39. return crc;
  40. }

反调试--CRC检测的更多相关文章

  1. 反调试——11——检测TF标志寄存器

    反调试--11--检测TF标志寄存器 在intel的x86寄存器中有一种叫标志寄存器: 标志寄存器中的TF(Trap Flag)位,CPU在执行完一条指令后,如果检测到标志寄存器的TF位为1,则会产生 ...

  2. 反调试——7——CRC检测

    反调试--7--CRC检测 CRC32: CRC的全称是循环冗余校验,作用是为了检测数据的完整性. CRC32的检测原理: 程序被编译后,代码段是固定的,因为已经被写死了. 我们在调试程序的时候,打断 ...

  3. APP加固反调试(Anti-debugging)技术点汇总

    0x00 时间相关反调试 通过计算某部分代码的执行时间差来判断是否被调试,在Linux内核下可以通过time.gettimeofday,或者直接通过sys call来获取当前时间.另外,还可以通过自定 ...

  4. 学习:反调试之ZwQueryInformationProcess

    SetUnhandledExceptionFilter触发条件:1.当程序有异常,且没相应的处理 2.没有人进行反调试,满足这两个条件的时候,就会其中传输的参数(实则就是一个异常处理函数) 来进行处理 ...

  5. 修改Android手机内核,绕过反调试

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/57086486 0x1.手机设备环境 Model number: Nexus 5 O ...

  6. 编译Android内核 For nexus 5 以及绕过Android的反调试

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/54880488 前面的博客中已经记录了Nexus 5手机的Android 4.4.4 ...

  7. 反调试技术常用API,用来对付检测od和自动退出程序

    在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破解自己.为了了解如何破解反调试技术 ...

  8. WinDbg调试流程的学习及对TP反调试的探索

    基础知识推荐阅读<软件调试>的第十八章 内核调试引擎 我在里直接总结一下内核调试引擎的几个关键标志位,也是TP进行反调试检测的关键位. KdPitchDebugger : Boolean ...

  9. 基于TLS的反调试技术

    TLS(Thread Local Storage 线程局部存储) 一个进程中的每个线程在访问同一个线程局部存储时,访问到的都是独立的绑定于该线程的数据块.在PEB(进程环境块)中TLS存储槽共64个( ...

随机推荐

  1. javacc在stanfordnlp中的应用

    总结: 这个javacc感觉比较复杂,在于stanfordnlp中 p.p1 { margin: 0; font: 11px Monaco } CoreMapExpressionExtractor这个 ...

  2. 虚拟机--第二章java内存区域与内存溢出异常--(抄书)

    这是本人阅读周志明老师的<深入理解Java虚拟机>第二版抄写的,有很多省略,不适合直接阅读,需要阅读请出门左转淘宝,右转京东,支持周老师(侵权请联系删除) 第二章java内存区域与内存溢出 ...

  3. Git pull and push

    转自:https://blog.csdn.net/qq_41306423/article/details/101701991 关于 git pull 和 git pull origin develop ...

  4. 用Java8把List转为Map

    1 import com.yang.test.User; 2 3 import javax.jws.soap.SOAPBinding; 4 import java.util.*; 5 import j ...

  5. Git配置多账户

    一般情况下,公司代码company_repos/会存放在公司内部的gitlab上,个人代码privacy_repos/会放在github上.因此我们会有两个git账户:公司账号zioyi@campan ...

  6. git 使用代理出现 LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 错误

    删除代理即可. 具体操作如下: 1. git config --global --list     查看git配置 发现其中有 http.https.XXXXXX.proxy 和 https.http ...

  7. 在Excel中怎样才能在某一行前面一次插入多行?

    你在要插入的行以下选中多少行,点插入,就能插入多少行. ​

  8. TCP连接中的状态

    1. 正常状态转换 我们用图 3-13 来显示在正常的 TCP 连接的建立与终止过程中,客户与服务器所经历的不同状态.读者可以对照图 3-12 来阅读,使用图 3-12 的状态图来跟踪图 3-13 的 ...

  9. vue 手写倒计时,样式需要自己调。( 亲测可用,就是没有样式 )

    先写一个 js 文件,这个文件是工具类文件,需要单独开一个js // 计算出时间戳的具体数据:比如将85400转化为 n天n时n分n秒 export function formateTimeStamp ...

  10. 【CSS】模仿迅雷主页的按钮

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...