本次是尝试调用DLL里面的私有函数. 一: 之前先探索一下,首先可以考虑用偏移量来调用,就是如果知道了某个私有函数和某个导出的公共函数的相对便宜的话,直接加载dll获取公共函数地址,然后自己手动去偏移调用就行了.先测试一发,就是根据MessageBoxA的地址来偏移到MessageBoxB的地址,然后去调用. 答案和预期的一样,是可以调用的,但是问题是上面的两个MessageBoxA和B都是导出函数,那如果偏移的是私有函数是否可以调用成功?接下来是实验这个. 二: 我自己写了一个dll代码如下:…
今天要尝试的导出表相关编程内容是:覆盖函数地址部分的指令代码. 这种覆盖技术,是将AddressOfFunctions指向的地址空间指令字节码实施覆盖,这种技术又繁衍出两种: 暴力覆盖,即将所有的代码全部替换为新代码.新代码可能含有原来代码的全部功能,也可能不包含原有代码功能. 完美覆盖,通过构造指令,实施新代码与源代码的共存和无遗漏运行.因为完美覆盖涉及代码的重定位,相对复杂一些,今天尝试暴力覆盖.目标是我自己写了一个dll导出一个加法函数,然后我要用另一个自定义函数替换这个函数,让他直接返回…
本次要做的尝试是通过修改导出表的函数地址,实现程序功能的更改,实现这个最大的限制就是堆栈平衡问题. 先写一个DLL和EXE为了测试. DLL代码如下: 这样的话有两个导出函数(我们假设是一个密码验证之后执行的函数): EXE测试代码如下: 也就是简单模拟下DLL调用,默认情况下因为密码错误,所以执行结果是这样: 然后开始一步一步分析处理问题: 1.确定需要替换函数堆栈平衡 首先IDA看下两个导出函数的调用堆栈,也就是看下参数是否一样,不然直接调换位置会导致函数调用之后堆栈不平衡: 可以确定,这两…
今天做了一个读取PE文件导出表的小程序,用来学习. 参考了<Windows PE权威指南>一书. 首先, PE文件的全称是Portable Executable,可移植的可执行的文件,常见的EXE.DLL.OCX.SYS.COM都是PE文件. 我们知道,一个Windows程序,它所实现的所有功能最终几乎都是调用系统DLL提供的API函数.要使用任何一个DLL所提供的函数,我们需要将它导入,也就是用到了导入表.然而对于那些提供了被导出的函数的DLL程序来说,他们必须使用导出表将函数导出,之后别的…
把通用模板机器码直覆盖目标PE 这个地方真是尝试了好久,遇到很多坑点,Win PE那本书上的东西有点不够,也就直接写书上的例子会发现很多地方不是说的那样,里面提供的信息太少了,就比如里面并没有提被注入的目标PE的随机基址问题,比如说中给了一套模板(模板里面有一些变量定义了没有使用,还有获取Kernel32.dll的地方是错误的,还有通用模板运行的时候内存溢出了...)额...总之不要在意这些细节.我自己摸索着弄吧,这个地方. 今天打算尝试几种姿势手动把自己的模板机器码添加到目标PE某个位置让其加…
导出表编程-1-枚举导出表 开始前先回忆一下导出表: 1.枚举dll函数的导出函数名字: 思路: (1)加载dll到内存里. (2)获取PE头,逐步找到可选头部. (3)然后找到里面的第一个结构(导出表)地址,这个地址指向一个IMAGE_EXPORT_DIRECTORY,然后找到里面的 这个地址是一个数组(DWORD),每个值都指向一个导出函数的名字字符串所在地址,然后根据 确定个数,直接枚举就行了. 代码如下: #include "stdafx.h" #include <win…
PE-导出表 ​ 动态链接库要想给别人用实现加载时或运行时链接就必须提供函数和数据的地址.exe一般不会有这个,大部分是DLL文件的.导出分为名字导出和序号导出. 名字导出先找名字,再通过名字表的索引找到AddressOfNameOrdinals里面的值,此值即为name和函数地址关联处,是AddressOfFunctions的索引 序号导出,序号-base就是AddressOfFunctions索引,直接找就是函数地址. typedef struct _IMAGE_EXPORT_DIRECTO…
PE嵌入模板 编写一段代码,生成一个已经处理过重定位信息,同时所有的内容都在代码段里,并且没有导入表的PE程序,把这个程序嵌入到其他PE的相关位置,能够独立的运行,接下来是整理了2个模板,一个是HelloWorld的,另一个是通用模板LoadLibrary的模板. 开发环境masm32和vs2012,相关环境搭建我之前整理过[ http://blog.csdn.net/u013761036/article/details/52186683 ]; 直接C++的话貌似不行,我用vs2015本地创建了…
PE补丁技术 这章很多东西之前都见过,也单独总结过,比如动态补丁里说的远程代码注入,还有hijack什么的.之前整理过的这里就不细说了,大体说下思路.这里总结一些之前没总结过的东西. 资料中把补丁分为两类,静态补丁和动态补丁.然后有总结了下补丁的基本要素:进程通讯能力.良好的读写其他进程地址能力.正确识别要补丁目标进程.在其他进程地址空间执行代码的能力. 进程通信: 管道通信(有名管道和匿名管道).邮件槽.剪切板.共享内存.消息机制.socket等等具体细节概念请自行百度. (1)动态补丁 读写…
上篇文章 PE文件结构详解(二)可执行文件头 的结尾出现了一个大数组,这个数组中的每一项都是一个特定的结构,通过函数获取数组中的项可以用RtlImageDirectoryEntryToData函数,DataDirectory中的每一项都可以用这个函数获取,函数原型如下: PVOID NTAPI RtlImageDirectoryEntryToData(PVOID Base, BOOLEAN MappedAsImage, USHORT Directory, PULONG Size); Base:模…
本文叫“ 初尝Windows 下批处理编程”是为了延续上一篇“初尝 Perl”,其实对于博主而言批处理以及批处理编程早就接触过了. 本文包括以下内容 1.什么是批处理 2.常用批处理命令 3.简介批处理编程结构 4.一个批处理游戏代码欣赏 5.总结 什么叫批处理 批处理(Batch)通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中,它是由DOS或者Windows系统内嵌的解释器(通常是COMMAND.COM或者CMD.EXE)解释运行.类似于Unix中的Shell脚本.批处理…
 造冰箱的大熊猫@cnblogs 2019/1/27 将Windows下串口编程相关信息进行下简单小结,以备后用. 1.打开串口 打开串口使用CreateFile()函数.以打开COM6为例: HANDLE hComm; hComm = CreateFile( TEXT(, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); 其中: - "COM6",待打开串口的串口名. - GENERIC_READ | GENERIC_WRITE,…
由于工作需要在詹金斯(genkins)集成环境打包,打包避免不了需要修改版本号,写入版本号最简单的方式通过修改windows rc文件 这就意味着,每次构建新版本前需要修改一次源文件 这个在用詹金斯集成环境打包是不太友好的 因为版本号是由詹金斯自动生成拼接传入的,而打包环境意味着代码已经封闭了不在修改了如果去改的话 就会存在一定的风险.这就需要在编译完成后通过其它工具用命令行方式修改版本号,经网上查找资料发现 ResHacker可以修改版本号,但是资料更多的是关于GUI方式,很少有命令行方式的资…
第三章  PE头文件 本章是全书重点,所以要好好理解,概念比较多,但是非常重要. PE头文件记录了PE文件中所有的数据的组织方式,它类似于一本书的目录,通过目录我们可以快速定位到某个具体的章节:通过PE文件头部分对某些数据结构的描述,我们也可以定位到那些不在头文件部的信息,比如导入表数据.导出表数据.资源表数据等. 3.1  PE的数据组织方式 这一节说了很多,举了两个例子,分别是图书馆存书1和图书馆存书2,细节我不介绍了,是基本的数据结构应用,没有难点.最后说PE数据组织方式类似于存书2的例子…
最近需要学习下windows的service编程框架,查了下msdn发现不知所云.于是谷歌之,发现了一个非常不错的文章,重点推荐讲的非常详细,深入,看完之后基本上就能很清楚windows的service机制: http://www.tenouk.com/ModuleDD.html 参照下下面的例子基本上就能搞明白如何去写一个service: http://www.codeproject.com/Articles/499465/Simple-Windows-Service-in-Cplusplus…
前年刚去公司的时候用PE装过好多系统,最近又装一台华硕的,碰到了一个问题,一起记录了下. 华硕X45,Bios已经改为U盘启动了,但就是进不去,因为知道可能还有个选磁盘启动项的键,找了半天原来按Esc就可以了. 使用Windows PE安装Win7系统时,开始我选择大家传说最好用个的老毛桃版,可是进入系统后却看不到硬盘,原因是不能读取sata硬盘,然后我就找了个小马版的wpe,因为宿舍网速不怎么快而且懒,所以下了个精简版的,经过了几番折腾之后,WIN7安装成功. 1.将小马U盘系统使用Ultra…
最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展,2.0之后更是如此).从实现的角度来说,跟c/c++开发一样,windows和Linux就是两大阵营,除了标准c/c++部分外,有着各自大量的扩展特性.这个例子比较有点像是关系型数据库,标准都是ISO SQL,但是实现机制.性能.API等,每个数据库厂家都不同,比如oracle/mysql/post…
在Windows的多线程编程中,创建线程的函数主要有CreateThread和_beginthread(及_beginthreadex). CreateThread 和 ExitThread    使用API函数CreateThread创建线程时,其中的线程函数原型:  DWORD WINAPI ThreadProc(LPVOID lpParameter);在线程函数返回后,其返回值用作调用ExitThread函数的参数(由系统隐式调用).可以使用GetExitCodeThread函数获得该线程…
原文 (C#)Windows Shell 外壳编程系列8 - 同后缀名不同图标? (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单 关于注册 动态库必须注册才能使用.除了使用 regasm 来注册 DLL 以外,还应该在代码中增加 RegisterServer 和 UnregisterServer 方法,以指导 DLL 注册时,在 Windows 注册表中增加什么键.关于…
原文 (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列8 - 同后缀名不同图标? QueryInfo扩展 活动桌面引入一项新特性,当你在某些特定对象上旋停鼠标时,工具提示将显示它们的描述.我们可以使用 QueryInfo 扩展为Shell中的其它对象提供自定义的工具提示.如下图: 事实上,这个功能实现比前两个 Shell 扩展更简单,…
原文 (C#)Windows Shell 外壳编程系列7 - ContextMenu 注册文件右键菜单 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列6 - 执行 从本节起,我所要讲述的是对 Windows 系统的“Shell 扩展”.“Shell 扩展”从字面上分两个部分:Shell 与 Extension.Shell 指 Windows Explorer,而Extension 则指由你编写的当某一预先约定好的事件…
原文(C#)Windows Shell 外壳编程系列6 - 执行 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows Shell 外壳编程系列5 - 获取图标 执行 许多人都知道 ShellExecute ,用于执行一个外部命令.但对于  IShellFoloder 对象来说,它的执行命令,都在它的 ContextMenu 里面了.记得前几节说过如何直接调用 ContextMenu 里的项,因此,执行一个 IShellFoloder,也无非是调用…
<Windows Forms框架编程>节选   第九章 设计模式与原则 软件设计模式(Design pattern)是一套被反复使用的代码设计经验总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性.好的设计,成就好的作品.但在软件设计的过程中,若有一些设计原则(Design Principle)的约束,那我们的软件会重构得更好.设计模式和设计原则博大精深,需要我们长时间的实践和总结才能真正领悟到其真谛,本章首先以“观察者模式”为例,介绍设计模式在Windows Form…
Windows Store 手势编程小结 最近完成了一个Windows Store上面的手势操作的页面.在这里总结了一下经验和心得,希望能和大家一起分享和讨论一下. 首先,要纠正一个误区,在Windows Store里面,手势和鼠标的操作事件是不区分的.比如简单的手指滑动事件,正常的写法还是在PointerPressed, PointerPressed和PointerReleased里面去处理.大家可能认为,手势的事件应该在,ManipulationStarted和ManipulationDel…
注 : 心血来潮,想着把这两年没能记录下来的经历,写一波回忆杀.诚然,有些经历十分复杂繁琐,希望能耐下性子,写出好文章来,可惜一时不能全想起来这两年来的种种,就想起来什么便写什么吧. 时间估摸着是大一下入学后的第一个月吧,当时的C语言应该已经学完了.当时的我还没有接触其他更高级的语言,满怀激情地希望能用代码创造世界,毕竟C已经能创造一切轮子.而那时的我对于网络又是这么的新奇,偶然地接触到了一个名词socket,那天晚上的我竟不觉困意,在网上找了许多资料,将C的socket编程学了个透彻.当时对于…
Windows PE的全名是WindowsPreinstallationEnvironment(WinPE)直接从字面上翻译就 是"Windows预安装环境".微软的本意是:WinPE仅用做系统维护,并设置了各种限制.可以简单的理解为:PE是Windows系统的超级精简版.超级权限版(以系统system账户登录)!对于无法进入系统.修复系统.分区.重装系统等问题都可以进入PE进行操作,因此PE是系统维护强大的武器! 微软原版的PE,只有"命令行"即DOS窗口.网上流…
Oracle中如何导出存储过程.函数.包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? QQ群里有人问:如何导出一个用户下的存储过程?   麦苗答:方法有多种,可以使用DBMS_METADATA.GET_DDL包. 使用PL/SQL DEVELOPER工具 -- 下面的SQL语句,如果报错:ORA-22835: 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小 (实际: 4994, 最大: 4000),那么去掉TO_CAHR SELECT TO_CH…
始出处:http://www.cnblogs.com/Charltsing/p/APIViewer.html QQ:564955427,QQ群:550672198 世面上的API Viewer已经不少了,但给VBA用的几乎没有.我自己写了一个Windows API Viewer,提供VBA语句的导出功能,并可以提供两万多个API的MSDN链接内容的本地查询,数据库超过40M. 环境需求:Windows 7.1 SP1及以上操作系统,安装.Net 4.5.2及以上框架. 下载地址:API View…
(一)Windows API串口通信编程概述 Windows环境下的串口编程与DOS环境下的串口编程有很大不同.Windows环境下的编程的最大特征之一就是设备无关性,它通过设备驱动程序将Windows应用程序同不同的外部设备隔离.Windows封装了Windows的通信机制,这种方式称为通信API,Windows程序可以利用Windows通信API进行编程,不用对硬件直接进行操作.这种体系被称为Windows开放式服务体系(WOSA,Windows Open Services Architec…
XAMPP的安装和使用 一.什么是XAMPP? XAMPP是最流行的PHP开发环境. XAMPP是完全免费且易于安装的Apache发行版,其中包含Apache.MariaDB.PHP和Perl. 类似XAMPP的服务器套件还有很多,我用过的还有UPUPW,它们都极大的简化了开发环境的配置. 十六款免费的服务器套件的介绍介绍了主流的免费服务器开发套件. 二.安装 xampp下载地址:http://www.xampp.cc/ 安装没什么好说的,"下一步"直到安装完成. 三.使用 双击xam…