- 博客(68)
- 资源 (1)
- 收藏
- 关注
原创 给EXE文件添加一个按钮,并使用DLL文件来实现对应的功能
第一步使用Restorarot打开程序根据需要添加一个按钮,设置该按钮的消息ID,注意不要和其他控件的ID一样,添加完后保存。此时这个程序上已经多出了一个按钮,点击它也会发送消息,但是程序不会对该消息做任何处理,因为我么还没有把对应的功能添加进去。第二步制作一个可以实现功能的DLL。我使用的是vs2019,编程语言为c语言。打开vs2019,创建新项目,选择桌面向导,点击创建,应用程序类型选择动态链接库,选择空项目,点击确定。我们需要创建两个文件,一个.cpp文件,一个.h文件。.c
2022-04-30 18:11:24
3664
1
原创 check the manual that corresponds to your MySQL server version for the right syntax to use near
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Updata users Set password='111' Where username='aaa'' at line 1我的是这个错误在jsp里面用PreparedStatement来执行sql语句的时候出现了这个错误。查百
2020-06-09 19:58:05
311
1
原创 脱壳后的PE文件的优化
资源的重建有些软件脱壳后的资源不可查看,不能编辑或编辑后保存不了,这是因为在脱壳后资源没有完全释放。例如,ICON图标、Group icon(组图标)等在程序没有被执行时仍然会被系统读取,但他们一般是不能压缩的,因此被存放在外壳本身的代码空间中。正常脱壳后,资源段的其他数据都已恢复,但是图标等资源还留在外壳。所谓资源重建,就是把这些资源移回.rsrc区块。首先将实例程序RebPE.exe进行脱壳(该实例程序链接放在文章末尾)。脱壳后我们用Resfixer(该软件以及下main要用的软件的链接都放在文
2020-05-25 23:05:40
977
原创 DLL文件脱壳
博客中用到的例子和某些程序的链接在文章末尾。对DLL文件进行脱壳的原理和对普通PE文件进行脱壳的原理其实是差不多的,就是多了一个构造重定位表的步骤。因为DLL文件都是映射到其他进程的地址空间中,所以基址很有可能不是默认基址。而壳又会破坏原来的重定位表,所以我们脱壳后需要手动构造一个新的重定位表。第一步,也是需要像脱普通PE文件的壳一样,先找到OEP,然后再把镜像文件给Dump下来。但是因为重定位的关系,我们又希望脱壳后的文件尽量和脱壳前的一样,所以我们就需要找到壳中进行重定位的那一段代码,然后将其跳
2020-05-19 23:15:46
9901
3
原创 使用LordPE和Import REC脱壳
本博客用到的资源链接放在博客末尾。LordPE是一款能够抓取内存映像的用来脱壳的软件,它能够把一个进程的内存数据给Dump下来,然后保存为文件。光了解一个软件的用处用起来如果出问题还是会比较头疼,所以这里简单说一下LordPE软件的原理。该软件其实也是调用了系统的API。它首先调用CreateToolhelp32Snapshot函数来获取一个系统中的进程的快照。然后再用Module32...
2020-04-18 17:35:46
4618
原创 很基础的DOS命令
IF 在批处理程序中执行有条件的处理过程。LABEL 创建、更改或删除磁盘的卷标。MD 创建一个目录。MKDIR 创建一个目录。MKLINK 创建符号链接和硬链接MODE 配置系统设备。MORE 逐屏显示输出。MOVE...
2020-04-03 21:52:51
143
原创 基础的nmap常用命令
nmap -sSSYN扫描半链接扫描-sS TCP同步扫描(TCP SYN):因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。你可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(...
2020-04-03 21:52:27
484
1
原创 简单的基本的Linux命令
1.添加执行权限:chmod 777 chmod u+x 文件名(可执行权限)2.创建与删除目录:mkdir 目录名 (只能建一个目录) mkdir -p test1/test2/test3 (-p表示可以建多级目录) mkdir ...
2020-04-03 21:52:04
100
原创 bugku逆向入门100writeup
首先下载admin.exe,然后点击运行:发现无法运行,然后用文本编辑器打开:看到开头 有一个png一个base64,所以猜想可能是base64转换成图片:发现果然是这样,然后扫描二维码:获取flag....
2020-04-03 21:51:11
180
原创 用32位汇编语言写一个窗口程序
用WIN32来写窗口程序需要编写两个文件,一个是资源脚本文件:*.rc,一个是汇编源文件:*.asm。将这两个文件编译链接在一起就可以得到我们的窗口程序。而资源脚本文件中包含了对菜单,加速键,图标,光标,位图等资源的定义,源文件中包含如何使用这些资源的代码。首先我们来看资源脚本文件中菜单和加速键以及图标光标的定义。#include <resource.h>#define...
2020-04-03 21:47:40
2010
原创 win32两种获取进程句柄的方式
获取运行中的进程句柄获取进程句柄的方式有很多种,之前有说到CreateProcess函数,该函数在一个进程中打开另一个进程,并且得到子进程的句柄,不过有时候我们更想获得正在运行的进程的句柄。获取正在运行的进程句柄也有几种方式,下面介绍一下几个函数。FindWindowinvoke FindWindow,lpClassName,lpWindowName该函数返回一个窗口句柄,...
2020-03-28 16:56:16
4287
2
原创 在进程中用CreateProcess函数创建一个子进程
在自己的进程中创建一个子进程有三种方法,一个是使用函数WinExec,还有一个是使用函数ShellExecute。这两个函数里面后者用的多一点,但是这两个函数创建子进程后,子进程就完全和自己的进程脱离开来了,就是说我们创建子进程后就不能控制它了。所以这里介绍第三种办法,使用函数CreateProcessCreateProcessinvoke CreateProcess,lpAppl...
2020-03-27 20:51:06
1589
原创 用事件对象控制线程
之前的一篇博客里面用汇编写了一个多线程计数器,但是这个计数器存在一个缺陷,当我们按下暂停的时候,虽然看起来计数暂停,但是程序在CPU里面的占用几乎没有变,这是因为循环还在继续。所以如果有一种机制,能够让我们按下暂停的时候,线程里面的代码就停住了。这样就不会继续占用CPU资源。这种机制是有的,那就是“事件”。事件也是一个对象,类似于文件,窗口,内存等对象。我们可以把“事件”看成一个标志,一个设置...
2020-03-26 22:49:00
175
原创 用32位汇编语言写一个多线程计数器
进程和线程之间的关系进程就是正在执行中的应用程序,磁盘上的可执行文件只能称之为文件而不能称之为进程。一个进程是一个执行中的文件使用资源的总和。线程是操作系统分配处理器时间的基本单位,一个线程可以看成是一个“执行单元”,它负责执行包含在进程空间中的代码。进程中的代码要运行起来,就必须拥有运行这个代码的“执行单元”,也就是线程。就类似于,一个进程,Windows没有分配时间给它,它里面的代...
2020-03-25 21:23:06
685
原创 自己写一个键盘钩子程序来监视键盘输入
“钩子是Windows的消息监视点,应用程序可以在这里安装一个监视子程序,这样就可以在系统中的消息流到达目的窗口过程前监控它们“上面就是WIN32API手册中对钩子的描述。大概就是说钩子可以用来截获系统的消息。那么,要写一个钩子程序,肯定要先确定钩子的类型,钩子是有很多类型的,不同类型的钩子可以监视不同类型的消息。钩子名称 ...
2020-03-24 23:13:23
2302
2
原创 自己写动态链接库
动态链接库一些基础的概念:动态链接库缩写为DLL。动态链接库提供了许多的通用函数,可以被多个程序调用。动态链接库,顾名思义,它只有在程序执行的时候才会装入到程序的地址空间中,程序不执行时就只保留一些库的信息在文件中。了解过PE文件结构的应该知道,PE文件不执行时,动态链接库的信息在PE文件的导入表中,导入表里面包含了这个PE文件要使用的所有的动态链接库的名称以及要从库中导入的函数的一些信息。...
2020-03-23 19:30:32
626
原创 内存映射文件的基本概念,用32位汇编写一个使用内存映射的程序
内存映射文件概念:通过内存映射文件函数,可以将磁盘上的文件的全部或部分映射到进程的虚拟地址空间的某个位置,一旦完成了映射,就可以通过指针像访问内存一样访问磁盘文件。读取文件和写入文件的操作都是直接对内存进行操作。通过内存映射文件,能够更高效率地读取文件,提高系统性能。内存映射文件的实现原理:实际上映射这个步骤就只有过程一了,映射完成后我们会得到一个地址,这个过程不存在数据拷贝...
2020-03-22 22:42:44
415
1
原创 WIN32内存管理和文件操作
在WIN32中,进程可以使用的整个地址空间就是应该堆。而堆又分为默认堆和私有堆也叫动态堆,一个进程只有一个默认堆,但是可以又多个私有堆,私有堆位于默认堆中。标准内存管理函数总是在默认堆中分配和释放内存。内存映射文件函数相对不同,他是为了文件操作方便而设立的,当堆文件进行操作的时候,先打开文件,然后将文件直接映射到进程的地址空间中,然后我们就可以通过指针像访问内存一样访问文件了。下面就来...
2020-03-21 22:35:22
353
原创 在PE文件中添加可执行代码
原理:将代码添加到目标PE文件中有两种方法,一种是将代码插入到原文件代码的节的空隙中,还有一种办法是在节的末尾新增一个节,当然这两种方法都有局限性,第一个必须得保证节与节之间有足够的空隙插入我们的代码,第二个必须得保证节表末尾有足够的空隙让我们再插入一个节表。 我们既然要插入代码,那肯定就是为了执行。所以我们得让文件先执行我们的代码再去执行原来的代码,因此我们需要将原来的执行入口保存在我们的...
2020-03-19 23:06:39
1331
原创 动态获取API的地址
原理:现在虽然大部分Win32程序都使用ExitProcess函数来终止执行,但是其实用ret指令也是可以的。我们的应用程序的主程序可以被看成是一个被Windows调用的子程序。当父进程要创建一个子进程时,它会调用Kernel32.dll中的CreateProcess函数,CreateProcess函数在完成装载应用程序后,就会把一个返回地址用push压入栈,这个返回地址是子进程用ret来结束...
2020-03-18 21:34:24
1129
原创 PE文件重定位表
要链接PE文件中的重定位表的话,我们首先要知道哪些指令需要重定位,还有重定位的算法是怎样的。汇编中有些指令要用到内存地址,并且在编译的时候这些地址就固定在机器码里面了,如果我们程序的实际装入地址与模块的减一装入地址是相同的,那么这个指令就没问题,但是当实际装入地址与建议装入地址不相同时,如果没有重定位就会出问题了。举个例子,假如我们在程序中写的代码是: mov eax,dword ptr [0...
2020-03-17 21:54:06
367
原创 PE文件资源简介
PE文件中的资源部分占PE文件很大的一个比例,资源包括光标,位图,菜单等等还有十几种标准类型,处理标准类型还有自定义类型。资源的组织方式很像磁盘目录的组织的方式,或者说像数据结构中的树型结构。PE文件中资源的组织方式如下图:从上图可以看到资源块是由很多种结构组成的,第一层目录也就是根目录的第一个结构是一个IMAGE_RESOURCE_DIRECTORY结构,它也就是IMAGE_OPTION...
2020-03-15 23:07:29
391
原创 PE文件导出表简介
导出表一般存在于 .dll 文件中,偶尔也存在于EXE文件中。PE文件被执行时,Windows装载器将文件装入内存并将导入表登记的DLL文件装入,再把需要导入的函数的地址根据DLL文件导出表中的信息对被执行文件导入表中的IAT表进行修正。所以导出表就是存储了一个文件的导出信息的表,通过导出表DLL文件向系统提供导出函数名称,序号和入口地址等信息,以便Windows装载器来完成动态链接的过程。导...
2020-03-13 22:25:38
252
原创 PE文件导入表简介
我们在编写程序的时候经常要导入外部的一些函数,通常我们只需要将包含函数的模块导入进来,然后我们直接用函数的名字就可以调用函数了。那么这具体是怎么做到的呢?当我们使用动态链接库中的函数,只有在程序运行时,库里面的代码才会被调入内存,程序不运行时程序只包含了一些关于要导入的链接库和函数的信息,这些信息就在导入表中。(如果有多个程序使用同一个动态链接库,WIndows在物理内中只留一份库的代码,仅通...
2020-03-12 23:27:03
261
原创 PE文件结构的基础概念,用32位汇编写一个程序读取PE文件头
PE文件由文件头部分,节表部分,还有节区部分组成。其中文件头包括PE文件头还有DOS文件头,节表主要是用来说明每个节的RVA地址(RVA地址就是文件被装载到内存后数据相对于文件起始位置的偏移量)还有节的尺寸的,当然还有一些其他的信息。而节区就是将属性相同的文件数据放在了一起,比如可执行的放一起,只读的放一起等等。这是PE文件头的大概样子:DOS文件头 DOS头部分由MZ格式...
2020-03-11 23:09:52
895
2
原创 计网应用层总结
应用层的几个协议HTTPHTTP协议。中文叫超文本传输协议。 HTTP协议为WEB的应用层协议,它定义了浏览器和服务器之间的报文格式和序列,还定义了WEB客户向WEB服务器请求WEB页面的方式。 HTTP协议使用TCP作为它的支撑运输协议。 HTTP协议为无状态协议,就是说HTTP服务器并不保存客户的任何信息。 HTTP协议的连接方式有两种。1:非持续连接,这种连接方式下,假如客户请...
2020-02-13 18:21:37
268
2
原创 CTF逆向之isDebuggerPresent反调试函数
今天碰到一个题目,用od调试的时候总会莫名奇妙地自己退出,最后查百度才知道原来里面有个反调试函数题目是一个windows下的可执行文件先直接运行程序看一下居然直接出现了一个flag窗口,但是里面的flag却是乱码。这里猜想程序可能对真正的flag进行了加密。拖到peid中发现没有壳先拖入ida静态分析我们可以看到程序的第16行有一个MessageBoxA函...
2019-12-03 23:32:26
1057
原创 两个简单的逆向题目
刚刚注册攻防世界,做了两个新手题目第一个题目:题目打开输入flag错误,拖入OD发现单步调试直接出现flag换一种方法,拖入IDA找到main函数,F5转换为C语言代码形式第18行代码可以看到程序将我们输入的 V9与V5比较,如果我们输入的flag和真正的flag相同,则函数返回0给v3,则两个if 语句都不会执行,会去执行else语句,点进去会发现变量unk_41...
2019-09-21 20:26:48
475
原创 8086汇编总结
寄存器通用寄存器有:AX,BX,CX,DX 。通常用来存放普通数据8086CPU的寄存器为16位寄存器,16位寄存器可分为高位和地位,如AX寄存器可以分为:AH,AL 两个8位寄存器。也完全可以看成两个8位寄存器来使用,但如果看成8位寄存器来使用的话,当进行计算时如果结果超出8位,如在AL中计算时,结果如果为1F8,那么最高位将舍去(准确来说那一位并没有舍去,而是存放在了一个特殊的寄存器...
2019-09-21 19:18:25
676
原创 win32 API 调用方法
invoke 语句我们在MASM中可以用这种方法来调用API函数:invoke 函数名 [参数1],[参数2] ,...... 。这样可以避免我们在写汇编程序中调用函数时少写或漏写了参数,漏写参数会导致堆栈对不齐,但是这样的程序在编译链接时并不会报错,但执行的时候程序会崩溃。而用这种方法就像在c语言中调用函数一样,如果我们漏写了参数,编译器会报错,就可以避免上面的情况发生。编译器报错内容是...
2019-09-21 19:13:29
1500
原创 c++中的类继承,构造函数,析构函数以及复制构造函数等的一些问题
关于继承时用new和不用new动态内存分配的问题派生类中不用动态内存分配派生类还要重新定义析构函数,复制构造函数和复制运算符吗?对于析构函数,当派生类成员不进行其他操作时是不必要的。因为没有使用动态内存分配,所以可以直接调用默认析构函数。 对于复制构造函数,不需要。因为不使用动态内存分配的话就不用我们手动delete,对于基类部分会自动调用基类的复制构造函数(可能是显示的也可能是默认的...
2019-07-28 15:42:38
294
原创 c++ 运算符重载
/*在类中重载运算符只能重载一元的,即只接受一个参数,调用者为对象,而如果要重载二元运算符,则应该在类外定义,并且声明为类的友元函数,这样,这个函数在类外定义时不用使用作用域符,因为它不属于类,但是因为是友元函数,所以和类的公有函数具有同样的权限 *///在类中重载运算符然后在类外使用时的本质:如 两个对象相加 ,c=a+b; 本质是 c=a.operator+(b);也就是说运算符...
2019-07-26 23:27:43
256
原创 ARP局域网断网攻击
局域网断网攻击fping-asg192.168.1.0/24##扫描0网段所有能ping通的ipnmap-Ss192.168.1.141##扫描141主机打开的端口arp攻击arpspoof-i自己的网卡-t目标IP目标网关例如:arpspoof-ieth0-t192.168.1.100192.168.1.1局域网arp欺骗目...
2019-06-13 11:22:30
447
原创 nmap简单入门指令
1.nmap基本操作nmap 192.168.0.1扫描结果显示出了目标主机的信息,host is up 说明主机处于连网状态,然后有一个80端口开放,提供http服务。也可以直接输入域名来扫描nmap www.baidu.com指定范围扫描nmap 192.168.0.1-24说明这个区段只有一个主机。连续范围扫描命令语法:nmap [ip地...
2019-05-27 23:40:15
1165
原创 程序结束和入口,注释换行,调用API
程序结束和程序入口 在WIN32中如果是只编写单个模块,那么可以像8086汇编一样:start : ...... end start如果编写多个模块的话按之前的8086汇编,那么...
2019-05-15 23:28:16
111
原创 WIN32汇编程序的结构及模式定义,段的定义
WIN32汇编程序的结构先放张图:这是之前听小甲鱼的课的时候下下来的一个WIN32汇编源程序,就拿它做例子。 和8086一样,也是分号后面的都是注释,所以分号后面的东西我们可以不用管。然后可以看到开头有三行,我们一行一行分析。首先第一行我们看到是 .386 。这就是WIN32中的模式定义,它的意思就是在后面的代码中可以使用80386汇编中的指令集,比如在8086汇编中只有...
2019-05-12 23:07:01
384
原创 bugku第七个题目love
首先把文件下载下来,是一个可执行文件,但是点击却无法运行:重装之后也还是一样,一开始以为题目就是这样的,但是一直也没找到办法解决,后来看网上的解答发现他们的程序是可以运行的,有点懵,但是拖到 ida 和 od 里面还是可以看代码的,所以就将就着做了。首先将程序拖入 ida :找到主函数然后进入:看到有"please enter the flag"的字样,看到这个应...
2019-05-05 23:03:56
203
原创 crackme_04
下载完程序运行一下:出现一个弹框,但是和以往不同的是它并没有确定按钮,只有输入用户名和密码然后下面一个框框,提示说如果注册成功将会出现一张朱茵的照片。然后随便输入了一些数字,既然没有确定按钮的话,那应该和其他东西有关,但是这里我们不知道注册码的算法是怎样的,所以我们导入OD看一下。同样先搜索字符串:发现有注册成功的字符串,跳转过去:分析发现上面正好有一个跳转把我们最后...
2019-05-03 22:36:17
148
原创 简单的Python_爬虫
REQUESTS库requests库主要的方法有:request,get,put,post,head,patch,delete。其中常用到的有request,get,head.request方法:它有三个参数(method,url,**kwargs),其中method为请求方式,有get,post,put,head,patch,delete,options.其中常用的有:get,post,...
2019-04-28 23:24:36
123
原创 第三个crackme之4c大法
今天做到第三crapeme,发现点开程序后总会弹出一个没用的弹窗,大概七八秒,点也点不掉,很浪费时间,所以打算去掉这个弹窗。一开一开始以为这个弹窗应该就和之前的程序一样,找到函数调用的地方然后nop掉或者跳过就可以了,但后来找来找去硬是找不到,然后在看了视频教程后才知道这个程序是用VB写的,所以和之前的有些不一样。这种烦人的弹窗叫nag,用VB写的我们一般会用4C大法来把它去掉,下面就来介...
2019-04-21 23:00:51
178
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人