dword

学习机器视觉必须掌握的Visual C++数字图像处理基础

試著忘記壹切 提交于 2020-01-20 04:47:54
文章目录 导读 BMP文件结构 基于MFC对话框编程实例 1. 基于MFC对话框新建项目 2. 添加BmpCenter类 3. 结果展示 导读 机器视觉是当前最火热的人工智能分支之一,借助Halcon、Opencv等视觉处理库可以快速开发出适应不同场合的算法。其中Opencv是一款开源的视觉库,源码是用C++编写,目前已更新到4.0以上版本。其丰富的库函数和开源性吸引着众多视觉开发人员,可以说,没有编程基础和图像处理理论知识的人,也可以在短时间内掌握其用法,只要根据库函数帮助文档调整参数,调用即可。但如果没有图像处理基础,很难真正理解opencv的原理,更别说实现自己设计的图像处理算法。于是,我们必须掌握图像在计算机中的数据存储方式,下面就以BMP文件格式分析其存储结构。 BMP文件结构 BMP文件是Windows存储图像的数据格式,其结构由BITMAPFILEHEADER、BITMAPINFOHEADER、RGBQUAD、位图数据四部分组成。前三种是结构体数据类型,均包含在Windows.h中。位图数据是真正的图像灰度数据。下面借助于MSDN剖析前三种结构体数据。 BITMAPFILEHEADER typedef struct tagBITMAPFILEHEADER { WORD bfType ; DWORD bfSize ; WORD bfReserved1 ; WORD

主机漏洞-SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)【原理扫描】-RC4密码套件

Deadly 提交于 2020-01-20 03:28:11
一、漏洞分析 事件起因 2015年3月26日,国外数据安全公司Imperva的研究员Itsik Mantin在BLACK HAT ASIA 2015发表论文《Attacking SSL when using RC4》阐述了利用存在了13年之久的RC4漏洞——不变性弱密钥(《Weakness in the Key Scheduling Algorithm of RC4》,FMS 发表于2001年)进行的攻击,并命名为“受戒礼”攻击(Bar Mitzvah Attack)。 直到2015年3月,还有约30%的网络通信是由RC4进行保护的。通过“受戒礼”攻击,攻击者可以在特定环境下只通过嗅探监听就可以还原采用RC4保护的加密信息中的纯文本,导致账户、密码、信用卡信息等重要敏感信息暴露,并且可以通过中间人(Man-in-the-middle)进行会话劫持。 攻击方法和模式 攻击者嗅探监听大量的SSL链接,可以判断第一个加密消息包含SSL的完成消息和HTTP请求,都是具有可预测的信息的。然后等待一个不变性弱密钥的链接到来,当获取到一个弱密钥链接时候就可以提取出LBS。当弱密钥使用的时候,明文和密钥会进行异或,攻击者可以看到生成的密文模式。 攻击者同样也进行DNS投毒,将所有的链接链接到一个恶意的主机,主机进行中间人攻击,能够有效地进行大量用户的嗅探监听和会话劫持。 漏洞原理和细节 根据

CrackMe160 学习笔记 之 002

五迷三道 提交于 2020-01-18 19:20:52
前言 打开程序,是一个很简单的界面。看来是要我们根据 用户名 写出对应的 序列号 。 如图。 分析 输入任意字符,搜索字符串 "You get Wrong" "Try Again" , 找到 判断关键跳转 的地方。 00402579 . 66:85F6 test si, si 0040258B . 74 58 je short 004025E5 0040258D . 68 801B4000 push 00401B80 ; UNICODE "You Get It" 00402592 . 68 9C1B4000 push 00401B9C ; UNICODE CR,LF 00402597 . FFD7 call edi 00402599 . 8BD0 mov edx, eax 0040259B . 8D4D E8 lea ecx, dword ptr [ebp-18] 0040259E . FFD3 call ebx 004025A0 . 50 push eax 004025A1 . 68 A81B4000 push 00401BA8 ; UNICODE "KeyGen It Now" 004025E5 > 68 C81B4000 push 00401BC8 ; UNICODE "You Get Wrong" 004025EA . 68 9C1B4000 push 00401B9C ;

PE之RVA转FOA

我与影子孤独终老i 提交于 2020-01-18 00:05:23
公式 RVA = 内存地址-ImageBase 判断RVA在哪一个节上: RVA>=节n.VirtualAddress RVA<=节n+1.VirtualAddress 偏移=RVA-节n.VirtualAddress FOV=节n.PointerToRawData+偏移 实验-对齐大小一样 #include <stdio.h> char str[] = "ABC"; int main() { printf("Address: %p\n", &str); printf("V: %s\n", str); return 0; } 执行后输出: Address: 00424D8C V: ABC 获取ImageBase ImageBase 在扩展PE头上的第十个属性,基于扩展PE头偏移地址28个字节,大小为DWORD。 00004000,小端存储转十六进制为0x00400000,所以ImageBase的地址为0x00400000。 计算RVA RVA=内存地址-ImageBase=0x00024D8C 获取内存对齐和文件对齐 SectionAlignment 内存对齐 在扩展PE头上的第十一个属性,大小为DWORD。 FileAlignment 文件对齐 在扩展PE头上的第十二个属性,大小为DWORD。 发现内存对齐和文件对齐都是1000h,实验完再找一个对齐不一样的试试。 判断在哪一个节

Windows Ring3层注入——修改PE输入表(导入表)注入(一)

谁说我不能喝 提交于 2020-01-17 03:59:29
Windows Ring3层注入——修改PE输入表(导入表)注入(一) PE文件简单介绍 PE文件相关名词解释 PE文件磁盘与内存映像结构图 输入表介绍 输入表结构 输入表注入原理 PE输入表注入的两种方法 静态修改PE文件法: 进程创建期修改PE输入表法: 输入表注入核心代码示例 PE文件简单介绍 PE(Portable Execute)文件 是Windows下可执行文件的总称,常见的有 DLL,EXE,OCX,SYS 等,事实上,一个文件是否是PE文件与其扩展名无关, PE文件可以是任何扩展名 。 PE文件的结构一般来说如下图所示:从起始位置开始依次是 DOS头,PE文件头,块表(节表)以及具体的块(节) 。 PE文件相关名词解释 虚拟空间 :PE文件被系统加载器映射到 内存中 ,每个程序都有自己的虚拟空间。 虚拟地址(VA) :虚拟空间的 内存地址 。 相对虚拟地址(RVA) :内存中相对于PE文件载入地址的偏移相对地址(也称 偏移量 )。 模块(Module) :PE文件映射到内存中的版本被称为 模块(Module) 。(GetModuleHandle) 模块句柄 :映射文件的 起始地址 。 基地址(ImageBase) :初始内存起始地址,跟模块句柄一样(Windows CE不成立)。 区块间隙 :PE文件头中,FileAlignment定义了 磁盘区块 的 对齐值

160crack之032 crackme.2

夙愿已清 提交于 2020-01-17 02:06:29
程序带UPX的壳,直接用UPX工具脱壳,也可采用OEP定律,但是不是很完美(不影响分析和调试)。 通过IDA分析,其中form1:主界面;form2:注册框;form3:about页 由于form2的OK按钮灰选,主要的功能由下图可知位于edidchange函数内,也就是更改下方四个的编辑框 启动时判断当前目录下是否存在reg.dat的文件,没有弹出警告 004383DC > $ 55 push ebp 004383DD . 8BEC mov ebp,esp 004383DF . 83C4 F4 add esp,-0xC 004383E2 . B8 E4824300 mov eax,crackme_.004382E4 ; 004383E7 . E8 4CCFFCFF call crackme_.00405338 004383EC . BA 98844300 mov edx,crackme_.00438498 ; Reg.dat 004383F1 . B8 60A74300 mov eax,crackme_.0043A760 004383F6 . E8 67C6FCFF call crackme_.00404A62 004383FB . BA 80000000 mov edx,0x80 00438400 . B8 60A74300 mov eax,crackme_.0043A760

WinForm WebBrowser 设置IE版本

≡放荡痞女 提交于 2020-01-15 13:04:02
public enum IeVersion { IE7 = 7, IE8 = 8, IE9 = 9, IE10 = 10, IE11 = 11 };  /// <summary> /// 修改注册表信息来兼容当前程序 /// </summary> public static void SetWebBrowserFeatures(IeVersion ieVersion) { if (LicenseManager.UsageMode != LicenseUsageMode.Runtime) return; //获取程序及名称 string AppName = System.IO.Path.GetFileName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); //得到浏览器的模式的值 UInt32 ieMode = GeoEmulationModee((int)ieVersion); string featureControlRegKey = @"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\"; //设置浏览器对应用程序(appName)以什么模式(ieMode)运行 Registry

c++ 反汇编 虚函数

自作多情 提交于 2020-01-13 20:53:29
  虚函数是面向对象程序设计的关键组成部分。对于具有虚函数的类而言,构造函数和析构函数的识别流程更加简单。而且,在类中定义了虚函数之后,如果没有提供默认的构造函数,编译器必须提供默认的构造函数。   对象的多态性需要通过虚表和虚表指针来完成,虚表指针被定义在对象首地址的前4字节处,因此虚函数必须作为成员函数使用。由于非成员函数没有this指针,因此无法获得虚表指针,进而无法获取虚表,也就无法访问虚函数。 class CVirtual { public: ~CVirtual() { printf("~CVirtual"); } CVirtual() { } CVirtual(int nNumber) { m_nNumber = nNumber; } virtual int GetNumber() { return m_nNumber; } virtual void SetNumber(int nNumber) { m_nNumber = nNumber; } private: int m_nNumber; }; 类中只定义一个int类型的数据成员,类大小却为8。当类中含有虚函数时,对象空间中第一项存放虚表指针。 35: // 获取含有虚函数表的类大小 36: int nSize = sizeof(CVirtual); 0007739D C7 45 EC 08 00 00 00 mov

文件打开对话框

空扰寡人 提交于 2020-01-12 20:33:44
  CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。    1 要使用CFileDialog,先用CFileDialog 构造函数 构造一个对象,CFileDialog的构造函数如下: CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL ); 参数意义如下: bOpenFileDialog 为TRUE则显示 打开对话框 ,为FALSE则显示 保存文件对话框 。 lpszDefExt 指定默认的 文件扩展名 。 lpszFileName 指定默认的文件名。 dwFlags 指明一些特定风格。 lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:    "Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data

为什么Fun函数能够执行

假如想象 提交于 2020-01-11 23:45:01
#include<stdio.h> #include<windows.h> void Fun() { printf("Kali-Team\n"); } int check() { int arr[4] = {0,1,2,3}; arr[5] = (int)&Fun; return 0; } void main() { _asm{ mov eax,eax; mov eax,eax; } check(); getchar(); return; } 调用check函数前先把004010F1(call下一条要执行的地址)压入堆栈中,当前的ESP为0012FF30,EBP为0012FF80,check函数的地址为00401005。F11单步跟进函数。 因为压入了call下一步的返回地址,所以ESP减4变为0012FF2C,到下面的push原ebp到堆栈中,esp减4,mov将当前ebp改为esp后提升堆栈50h(十进制的80),再保存ebx,esi,edi三个寄存器的值到栈中,esp减12,最后四行为填充CC到缓冲区。 00401070 55 push ebp 00401071 8B EC mov ebp,esp 00401073 83 EC 50 sub esp,50h 00401076 53 push ebx 00401077 56 push esi 00401078 57 push