自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 逆向目录

https://blog.csdn.net/Hello_MyDream/article/details/106505072汇编学习一https://blog.csdn.net/Hello_MyDream/article/details/106515598JCChttps://blog.csdn.net/Hello_MyDream/article/details/106515648汇编学习二https://blog.csdn.net/Hello_MyDream/article/details...

2020-06-05 15:36:00 24434

原创 CSDN写文章离开电脑时一定要记得保存及其他注意事项

1. 写文章离开电脑时一定要记得保存,有些浏览器采用了动态地刷新方式,你博客没有命名,CSDN系统有时就无法自动保存,浏览器一刷新,刚刚写得内容就没有了一. 一。2. 需要慎用Ctrl + z撤销,不仅撤销长度多大,而且至今还未找到反撤销。。。...

2019-02-01 13:23:26 24056

原创 Kali Linux忘记密码怎么办?

1、启动你的Kali Linux,等出现GRUB引导菜单时,按向下方向键选择“恢复模式”,按E键进入编辑模式。2、进入编辑模式后,参照下图进行修改(将ro改为rw,在后面添加init=/bin/bash):3、修改完成后,按F10键或Ctrl+X键继续启动。4、启动完成后,出现如下图的命令行,这时输入passwd root,回车就可以直接设置新密码(修改其他用户,把root改为其他用户名即可)5、回车以后,输入新密码,并再次输入确认,系统提示密码更新成...

2020-07-24 22:22:30 12893

原创 Window10下使用administrator的方法

1、Win键搜索cmd,管理员身份打开;或者win + s可以搜索2、输入命令“net user administrator /active:yes”后回车3、win键点击头像切换用户即可注意:一般在软件安装或使用时需要权限,通过右键以管理员身份打开即可,不必使用administrator用户。...

2020-07-19 23:31:28 12871

原创 窗口操作函数

查找窗口找window窗口句柄可以使用spy++或者大漠这样的工具,但是在程序重启时句柄会有变化,所以需要使用函数。#include "stdafx.h"#include <stdio.h>#include <Windows.h>#include <TlHelp32.h>1、FindWindow + SetWindowText //参数:类名 标题 HWND hwnd = ::FindWindow(TEXT("#32770"), TEXT("飞

2020-07-10 02:18:12 25814

原创 调用约定

调用约定函数的调用约定就是:描述参数是怎么传递和由谁平衡堆栈的。__stdcall __cdecl __fastcall调用约定 参数压栈顺序 平衡堆栈 __cdecl 从右至左入栈 调用者清理栈 __stdcall 从右至左入栈 自身清理堆栈 __fastcall ECX/EDX传送前两个,剩下:从右至左入栈 自身清理堆栈 ...

2020-07-09 22:54:08 25909

原创 项目——PE解析器(MFC)

这个程序写了差不多两天吧,第一次用MFC写界面,还是比较陌生的,所以这里来整理以下。一. 文件对话框CFileDialog dlgFile(TRUE, \ NULL, \ NULL, \ OFN_HIDEREADONLY, \ _T("Data Files (*exe;*.sys;*.dll)|*exe; *.sys; *.dll|All Files (*.*)|*.*||"), \ /*_T("Describe Files (*.exe)|*.exe|Worksheet F

2020-07-06 02:27:32 25517

原创 MFC中关闭窗口的几种方式

一. 关闭主窗口1、ExitProcess(0);2、AfxGetMainWnd()->SendMessage(WM_CLOSE);3、PostQuitMessage(0);//最常用二. 关闭对话框1、DestroyWindow();在使用时有可能出现断错误:程序崩溃是由DestroyWindow函数使用不当造成的。MSDN中DestroyWindow函数中有这样一句话:A thread cannot useDestroyWindowto destroy a w..

2020-07-04 14:49:13 25087

原创 MFC销售系统项目——静态拆分窗口与自定义消息

一. 静态拆分窗口1、自定义两个类:CSelectView和CDispalyView(它的基类必须是视图类);CSelectView继承于CTreeView,CDispalyView继承于CFormView。2、CMainFrame类中,声明CSplitterWnd类型的对象:private: CSplitterWnd m_spliter; // 切分窗口类对象3、重写框架类CMainFrame的OnCreateClient函数:return TRUE; 自己初始化客户..

2020-07-04 01:31:48 25355

原创 关于_CRT_SECURE_NO_WARNINGS

写MFC时无论在预处理器处添加_CRT_SECURE_NO_WARNINGS还是在文件中定义_CRT_SECURE_NO_WARNINGS都还是报错,之后查到添加到stdafx.h文件中就好了,在这里记录一下。

2020-06-28 19:44:44 25760

原创 Windows进程

一. 进程的创建BOOL CreateProcess( LPCTSTR lpApplicationName, // name of executable module LPTSTR lpCommandLine, // command line string 命令行参数 LPSECURITY_ATTRIBUTES lpProcessAttributes, // SD LPSECUR

2020-06-23 21:46:48 25540

原创 Window线程安全与线程控制函数

一. 线程安全问题多线程同时访问全局变量:一个线程取值后失去CPU另一个线程取值后也失去CPU,此时它们保存的就是相同的值。也是是说,比如两个线程再次对全区变量做++操作时变量只会被修改为同样的值。二. 临界区(线程锁)临界区:Critical Section (Critical:临界的、关键的)1、创建CRITICAL_SECTION: CRITICAL_SECTION cs; 2、在使用前进行初始化 ...

2020-06-21 03:17:52 26496

原创 Window线程与线程操作函数

创建线程HANDLE hThread1 = ::CreateThread(NULL, 0, ThreadProc1, &a, 0, NULL);HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全属性 通常为NULL SIZE_T dwStackSize, // 参数用于设定线程可以将多少地址空间用于它自己的堆栈

2020-06-21 02:58:58 26321

原创 Win32窗口相关API反汇编

1、Win32应用程序入口识别/*程序入口*///APIENTRY(API入口) __stdcallint APIENTRY WinMain(HINSTANCE hInstance, //ImageBase HINSTANCE hPrevInstance, //NULL LPSTR lpCmdLine, //命令行参数,可以用Debug版打印,也可以使用Release版使用Dbgview.exe查看 int nCmdShow) //指定程序窗口如何显示 看到KERNEL32.GetVer

2020-06-20 18:28:42 26464

原创 ODbg使用技巧

0x00:Shift + F2可以下条件断点,汉化版od条件断点会被更改,遇到这种情况就要用英文版了。 [esp + 4] !=[esp + 4]或0x xxxxxxxx(这里输入里面的数值或其他值):表示在[esp + 4]里面的数值不为这个值的时候再断。0x01:双击反汇编右侧的位置可以添加注释。0x02:断点停在在函数头部时可以点击follow in disassembly跳到函数调用位置。0x03:Ctrl + g可以直接全局搜索。0x04:F2断点,F7步入,F...

2020-06-20 13:57:42 26525

原创 Windows消息处理机制

一. 消息与事件Windows中的事件是一个“动作”,这个动作可能是用户操作应用程序产生的,也可能是Windows自己产生的。Windows为了能够准确的描述这些信息,提供了一个结构体:MSG,该结构体里面记录的事件的详细信息。二. 消息流程1. 系统 或 用户触发某个动作 //事件2. 系统将这些信息存储到MSG结构体中 //消息3. 系统将该消息存储到相关应用程序的消息队列中MSG Msg;4. while(GetMessage(&Msg,NUL...

2020-06-19 01:13:35 26860

原创 MFC常用控件

ComboBox:下拉框 m_combobox.AddString(TEXT("唐僧")); m_combobox.AddString(TEXT("孙悟空")); m_combobox.AddString(TEXT("八戒")); m_combobox.AddString(TEXT("沙僧")); m_combobox.SetCurSel(0); m_combobox.InsertString(2, TEXT("白龙马")); m_combobox.DeleteString(3); C.

2020-06-18 22:09:22 27262

原创 C语言宽字符

一. 多字节字符1. 基于ASCII的GB2312标准ASCII表 0 ~ 127拓展ASCII表 0 ~ 255GB2312 10000000 ~ 11111111(高位) + 10000000 ~ 11111111(低位) 问题:不同国家的字符集会产生乱码2. 基于UNICODE的UTF-8UNICODE(同一码 / 万国码):unicode是2个字节。 这一标准的2字节形式通常称作UCS-2(UnicodeCharacterSet)(原ASCII也位双字节)。然而,受..

2020-06-17 14:39:59 26578

原创 C++逆向基础与正向比较——Virtual关键字、虚函数表以及动态绑定的实现

添加Virtual后会多出四个字节,位于结构体的首地址。这个指针是虚函数表指针(vptr / 虚表指针),指向了虚函数表的开始位置;对虚函数表头继续寻址,就可以得到虚函数指针了。可以看出,结构体首地址的指针为三级指针。在vptr指向的位置维护了一个数组,即虚函数表,里面保存了当前类内所有虚函数的地址。这里找来一张图可以参考一下:使用指针来调用一下函数:#define _CRT_SECURE_NO_WARNINGS#include <iostream>using name

2020-06-16 16:22:42 29198

原创 PE结构解析

一. DOS头原来为DOS系统使用,现在只需要记住如下两项。1、DOC头: WORD e_magic * "MZ标记" 用于判断是否为可执行文件. DWORD e_lfanew; * PE头相对于文件的偏移,用于定位PE文件 如上图所示,DOS头一共40H个字节,即64个字节。结尾处4个字节指向了标准PE头的位置:D8。在这中间的文字是编译器加入的一些描述信息。这些字.

2020-06-16 00:35:53 28248

原创 C++访问父类私有成员

其实也很简单,因为首地址相同,通过指针访问就可以了。#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;class A { int a = 10;};class B:A { int b;public: B() { *(int *)this = 20; cout << *(int *)this << endl; }};int main(int .

2020-06-16 00:00:45 26166

原创 给软件添加代码

一. 代码节空白区域添加代码1. 根据SizeOfRawData - VirtualAddress的值来判断剩余空间是否足以添加代码2. 根据SizeOfRawData + PointerToRawData来到空余部分3. 将汇编指令转为硬编码:此处添加的代码是MessageBox,可以通过OD(走下角命令 bp MessageBoxA)来查看MessageBox的地址。6a 00 6a 00 6a 00 6a 00 e8 00 00 00 00 e9 00 00 00 00push 6

2020-06-11 16:35:45 26712

原创 C基础反汇编

switchswitch性能高于if语句的原因在于在case值较为连续的时候会生成值连续的大表,用switch的参数减去第一个最小的case值,和最大值进行比较,小于等于的话在表的范围内寻址即可[ecx*4+0F44D04h]。牺牲内存空间,提升效率,以空间换时间。有时间隔较大的还需要生成小表来记录大表的偏移量,省去大表的许多数据。小表记录偏移量的最大值为FF。int main(int argc, char *argv[]){ switch (1) { case 1: printf(.

2020-06-07 20:08:02 27425

原创 C语言参数传递——数据与内存宽度

如下图所示,将参数定义为char类型并不会节省空间,依然会按照4字节压栈传参。最后一行的堆栈平衡也很明显的。

2020-06-05 23:57:52 29195

原创 字符串截取

有一个字符串是这样的:china中国verygood天朝nice,里面既含有中文又含义英文,请编写一个函数,能截取任意长度的字符串n(n<=总长度)例:fn(5) = chinafn(6) = china中fn(8) = china中国v#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <string.h>#include <m

2020-06-05 15:32:29 26839

原创 浮点数存储原理

一. 将一个float型转化为内存存储格式的步骤为:1、先将这个实数的绝对值化为二进制格式2、将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边。3、从小数点右边第一位开始数出二十三位数字放入第22到第0位。4、如果实数是正的,则在第31位放入“0”,否则放入“1”。5、如果n 是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或n=0,则第30位放入“0”。6、如果n是左移得到的,则将n减去1后化为二进制,并在左边加“0”补足七位,.

2020-06-05 14:00:20 26975

原创 根据汇编指令画堆栈图

1. 左键单击界面,Ctrl + g输入地址找到对应位置。2. F2打断点,点三角箭头的开始按钮,使得程序执行到此处时暂停下来。3. 记录此时的堆栈位置,开始画堆栈图。4. 参数入栈,再次记录栈顶位置。5. 函数调用处地址压栈,栈顶 + 4。地址为此行指令执行结束后的地址,通过指令宽度(当前地址加当前指令长度:此处为5字节)计算出来。6. 点击F7进入函数,会显示JMP,单击回车键进入函数,继续画堆栈图。1. 保存栈底2. 建立缓冲区 16 * 4个字节3. 保存现场/寄存器

2020-06-04 19:14:06 29511

原创 汇编学习 (二)

一. 改变EIP的三种方式1. jmp:改变EIP的值。2. call:需要在要跳转的位置点击F12设置断点;会将下一行将要执行指令的地址(计算出来的)压栈,以便返回。最大区别:会改变ESP(栈顶)。3. 与TERN(TER)组合使用:TERN返回要执行的那一行,。POP执行后栈地址会+4,相当于POP EIP,让刚才栈中保存的地址出栈。二. 比较指令1. CMP指令:该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。只..

2020-06-03 16:18:42 27314

转载 汇编 JCC指令表

https://blog.csdn.net/fengshh2301/article/details/53327195

2020-06-03 00:58:18 27017

原创 汇编学习

一. 几个单位 DATA 字节 8位 WORD 字 16位 DWORD 双字 32位二. 八个通用寄存器32位 16位 8位 EAX AX ALECX CX CLEDX DX DLEBX BX BLESP SP AHEBP BP CHESI SI DHEDI DI BH三. 几条汇编指令movaddsub...

2020-06-02 23:12:32 27359

转载 史上最全的程序员常用英语词汇 建议收藏!

目录A B C D E F G H I J K L M N O P Q R S T U V W XA abstract 抽象的 abstract base class (...

2019-10-11 20:12:27 27151

原创 进程与线程的区别

进程与线程的区别主要体现在加载、体量与CPU调度上。让我们分开来讲:1. 加载:程序从磁盘中加载到内存,由启动程序让出执行权限,进程由此产生,它直接挂靠操作系统,由操作系统分配资源;而线程存在于进程之中,执行具体的任务。2. 体量:进程掌握系统分配的内存资源;而线程仅仅具有可以运行的资源,线程不能独立运行,需要依靠进程。3.CPU调度:在多道程序设计中,线程作为CPU直接调度的最小单...

2019-03-28 12:30:18 28143

原创 07-QT文件操作

一. 文件的读取和写入:QByteArray点击读取和写入按钮,弹出对话框,进行读取和写入操作。单行文本框打印文件路径,多行文本框读取文件时显示文件内容。 connect(ui->pushButton, &QPushButton::clicked, [=](){ QString path = QFileDialog::getOpenFileName(th...

2019-03-24 22:31:18 28092

原创 06-QT事件学习

QT中的所有事件都是基于QEvent的。例如:QMouseEvent继承自QInputEvent,QInputEvent继承自QEvent。一. 重写QT事件1. 以Label做示范,在帮助手册中查询QLabel,搜索event,找到Label带有的事件,我们可以自定义Label然后重写这些事件。2. 创建myLabel类,随意继承一个父类,然后在代码中将父类改为QLabel(此时要改三...

2019-03-24 18:05:34 27433

原创 05-QT常用控件介绍

ui中的控件要使用ui来指向:ui->xxx控件名称。ButtonsPush Button:普通按钮Tool Button:可以隐藏文字只显示图片Radio Button:单选框Check Box:复选框。可以有三种状态,对勾选择为2、方块为1(tristate)、不选为0。 connect(ui->checkBox, &QCheckBox::stat...

2019-03-23 21:55:27 32270

原创 04-ui设计器制作登录窗口

一. 布局 1. 使用Horizontal Layout对齐(不推荐使用):可以使用的属性较少。 2. 使用Widget空间进行布局(推荐使用):可以使用的属性较多。二. 窗口大小 最大:minimumSize 最小:maximumSize三. 窗口名称 windowTitle四. 弹簧高度 s...

2019-03-23 19:47:57 28182

原创 03-对话框

对话框一般应用于临时交互的场景。学习QT中的对话框时,应该使用QWidget作为基类,而不是QDialog。因为QDialog在显示的时候只会有一个对话框。一般分为两种: 1. 模态对话框:阻塞。此时要调用exec进入阻塞状态,而不是show方法,因为在栈上创建的对话框在出了匿名函数后会马上析构掉。 this->resize(300, 300); QP...

2019-03-23 14:55:50 28855

原创 02-QMainWindow

QT学习方法:使用手册1. 使用手册查询函数及函数参数:产看addToolBar函数位置参数,可以直接将此函数复制到帮助手册搜索框中,之后点击文档中对应函数参数进行查看。2. 有类名忘记时,可以在帮助手册中输入记住的关键字,例如QTextEdit可以输入edit进行查询。QMainWindow是一个为用户提供主窗口程序的类,包含: 1. 一个菜单栏 2...

2019-03-23 13:31:17 27739

原创 01-QT入门

QT学习方法:1. qt命名非常规范,不同的类中功能类似的函数名称相同。比如show、setParent、move、resize、setFixedSize等。2. 英文名称与中文翻译对应:resize重置窗口大小、setFixedSize固定窗口大小等。一. 新建项目类名:自定义的类名,继承自以下三种基类。QMainWindow:自带工具栏、菜单栏等。QDialog:对话框。Q...

2019-03-22 20:39:57 29100

原创 eclipse快捷键

1. 注释:Ctrl + /2. 代码提示:Alt + /

2019-03-10 21:04:32 28304

提示
确定要删除当前文章?
取消 删除