PE
文章平均质量分 73
编辑PE文件,修改PE指令文件,使现有的功能更完善。
插件开发
熟练开发PS插件、AI插件、AE插件、CDR插件、3DMax插件和其它各类插件。
展开
-
UPX-加壳-脱壳-官方工具-逆向分析
UPX加壳工具能够极大的压缩可执行文件,对于可执行文件的网络传播,确实效果不错。原创 2022-11-30 09:25:25 · 4198 阅读 · 0 评论 -
IDA-逆向分析-反汇编导航-双击导航-跳转地址-调用约定-局部变量-栈视图-搜索-工具教程
。原创 2022-10-25 20:01:29 · 2351 阅读 · 0 评论 -
IDA-函数信息分析-查找引用-导入表-导出表-反向定位-调整基地址
可以双击导入表选项进入,代码位置,再按Ctrl+X查看引用。Edit–>Segments–>Rebase Program改变基址。就可以得到函数参数形式,非常方便。如有疑问,敬请留言。原创 2022-10-13 20:19:53 · 3201 阅读 · 0 评论 -
汇编语言-中括号-mov指令-cmp指令-lea指令
一个比较特别的指令是lea, 意思是"装入有效地址"(Load Effective Address), 它的操作数就是地址,所以lea eax,[edx-02],就是把 edx 中的值减去2再送入eax, 而不是把由[edx-02]指明的内存地址上的值放到eax. 其结果是[eax]和[ebx-02]都表示同一个地址。1、mov [edi], eax ----把eax的值(dword)赋给位于内存地址edi处的值。10、mov cx,[eax]–把位于内存地址eax的word大小的值移入cx寄存器。原创 2022-10-03 09:34:44 · 3487 阅读 · 3 评论 -
PE文件-CPU寄存器-栈-常用汇编语言指令-push-move-sub-lea-rep-xor
当使用平坦(未分段的)存储器模型时,段寄存器加载的段选择符指向重叠的段,在线性地址空间中,每个段的起始地址都是0。如果操作数是 16 位的,ESP 加 2,如果操作数是 32 位的,ESP 加 4。如果需要对恶意软件分析,或者修改现有可执行文件的功能,如果有软件的源代码,固然可以比较好的修改,如果没有,通过汇编指令的修改亦可做到。,一般与ESP配合使用,可以存取某时刻的ESP,这个时刻就是进入一个函数内后,cpu会将ESP的值赋给EBP,此时就可以通过EBP对栈进行操作,比如获取。是cpu机制决定的,...原创 2022-08-12 08:42:21 · 601 阅读 · 0 评论 -
VS2013-调试汇编代码-生成asm文件-结构体内存布局-函数参数压栈-调用约定
参数按照从右至左的方式入栈。对齐数 = 编译器默认的一个对齐数与该成员大小中的较小值,vs中默认值是8,取较小值1,char类型的对齐数是1,所以对齐到1 的整数倍,那就是偏移量为1开始的地址空间。如果写一个汇编函数,给 C/C++ 调用,在 __cdecl 方式下,则汇编函数无需清除堆栈,在 __stdcall 方式下,汇编函数需要在返回(RET)之前恢复堆栈。4.如果嵌套结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(包含嵌套结构体的对齐数)的整数倍。...原创 2022-08-09 10:09:34 · 2444 阅读 · 0 评论 -
PE文件-手工修改重定位表-WinHex-CFF Explorer
如果需要修改exe,dll等的二进制代码,遇到添加绝对地址时,需要将绝对地址的位置添加进重定位表,确保添加代码的正确。接着找到下一个表头位置,地址是3B72,复制整块数据,向后移动两个位置。这样添加一个表项的工作就已经完成。白色部分是可以修改的,灰色部分不能,由此可见,CFF Explorer是可以修改重定位表的,但是不能直接增加一个新的表单元及表项的。然后是增加一个表项,虚拟地址是3000,大小是12,目标地址是3200。先采用CFF Explorer打开目标文件,找到重定位表,如下图所示;...原创 2022-08-07 11:32:43 · 1581 阅读 · 1 评论 -
X32dbg-查找MFC窗口过程函数-跟踪直到满足条件-条件断点-查看窗口句柄
这时需要介绍下基础知识,在刚进入函数的时候,栈顶指针esp指向的是返回地址,esp+4指向第一个参数的地址(从左向右,右边先入栈),依次类推。逆向分析,添加文件应该是一个WM_COMMAND消息,它来自于窗口的消息函数调用,所以在调用堆栈下面应该有一个就是消息函数。所以调用之前,应该是在栈里压入了4个参数,逐步点击分析,如下所在位置就是MFC的窗口过程函数。然后暂停在目标区域,但是有时会暂停不下,暂时不知道什么原因,多试几次。接下来针对窗口过程函数,就需要介绍条件断点。如有疑问,敬请留言。...原创 2022-08-06 09:34:34 · 3724 阅读 · 0 评论 -
PE文件-C++-SetCurrentDirectory当前工作文件夹编辑-GetCommandLine函数获取当前命令行参数
控制台进程可以通过将它们实现为程序入口点来使用main或wmain函数的argc和argv参数。因此,请为路径指定MAX_PATH -2 个字符,除非包含尾部反斜杠,在这种情况下,请为路径指定MAX_PATH -1 个字符。以类似于标准 C 运行时argv和argc值的方式解析 Unicode 命令行字符串并返回指向命令行参数的指针数组以及此类参数的计数。如果,修改第三方程序,需要获取传进来的命令行参数,这时可以采用这个函数来获取。为了更好的规范当前程序的运行环境,可以设置当前工作目录。...原创 2022-08-06 09:22:07 · 707 阅读 · 0 评论 -
PE文件-C++-MFC-IDA-逆向分析-x32dbg
按shift+enter返回。在IDA中查找对话框初始化函数。如下图所示: 在x32dbg中,对应的模块如下图所示: 在查找初始化函数时,可以先定位初始化函数。然后在虚函数中,有调用原始函数,所以原始函数返回,即为目标函数所在的位置。如下图所示:如果在x32dbg中找到一个地址,可以在IDA中查看,这个函数的代码,如下图所示: 通过交叉参考(XREF)可以知道指令代码互相调用的关系.如下: .text:00401165 loc_401165: ;CODE XREF:sub_4011原创 2022-06-28 15:54:54 · 1784 阅读 · 0 评论 -
x64dbg-常用快捷键-复制汇编指令地址-常用插件功能-前进-后退-断点-调试插件安装-扩展安装
在处理汇编语言代码的过程中,使用最多的概念是地址,如何快捷的复制地址,可以有效提高效率,在x64dbg中,复制地址的方式,就是鼠标中键。如果补丁输出失败,说明虚拟内存对应的文件位置不存在,需要申请新的段,在新段内输入需要输出的指令。AutoExportPatches.dp64:在数据库中自动存储补丁并在重启时恢复它们的插件。x64dbg_AttachHelper:This plugin automatically restores ‘DbgBreakPoint’, ‘DbgUiRemoteBreakin’原创 2022-06-20 08:33:46 · 1465 阅读 · 0 评论 -
汇编语言-函数传参-寄存器-结构体传值
在主程序和子程序中传递参数,通常有3种方法:通过寄存器传递、通过数据区的变量传递、通过堆栈传递。 调用约定简化了:一律使用__fastcall,前四个参数用 RCX、RDX、R8 和 R9传递,除了这四个外加RAX、R10、R11,其他寄存器都是非易失的。 将结构体的地址传入对应寄存器,将值写入栈中。如果能够重现结构体的调用,可以把需破解软件中结构体的内存数据拷贝至重现结构体调试模式数据中,可用内存修改软件如Cheat Engine来修改,这样就可以利用VS的功能来查看结构体的数据,如下图所示:原创 2022-06-17 08:37:21 · 1935 阅读 · 0 评论 -
call指令-X64X86指令区别-jmp指令-寄存器区别
x64系统通用寄存器名称,第一个字母从“E”改为“R”,数量增加了8个,(R8-R15),增加了8个128位XMM寄存器(XMM寄存器用来优化代码)。 栈的基本入栈出栈操作和32位一样,需要注意就是在64位环境下,汇编指令对栈顶其值有要求,因此在VS编译器申请空间的时候,会尽力保证栈顶地址为对其值16。(被16整除) 在逆向中发现栈空间不使用的情况,可能为了实现对齐。 64位应用程序只有1种寄存器快速调用,前4个参数使用寄存器传递,超过4个参数就放到栈里,入栈的顺序是从右往左,前四个寄存器是固定的原创 2022-06-14 09:04:07 · 876 阅读 · 0 评论 -
X64dbg-插件开发-概述-基础知识-接口
文章目录1.基础知识2.出口3.定义4.作者答疑1.基础知识 本页涵盖了 x64dbg 插件开发的基本原则。有关示例插件和模板,请参阅插件页面。2.出口 一个插件至少有一个导出。必须调用此导出pluginit。有关PLUG_INITSTRUCT更多信息,请参阅和插件标头。其他有效的出口是:plugstop:在插件即将卸载时调用。在此处删除所有已注册的命令和回调。还要清理插件数据。plugsetup:插件初始化成功时调用,这里可以注册菜单等GUI相关的东西。CB*_plugin_registerc原创 2022-05-13 08:36:43 · 698 阅读 · 0 评论 -
IDA-导出Map文件-X64dbg-导入Map信息-函数信息
IDA作为强大的静态汇编分析工具,它有出色的信息存储能力,分析好静态代码后,将标注的函数信息导出为map文件,供动态工具调试使用。1.IDA导出map文件 File->Produce file->Create Map file,如下图所示:2.设置合适的参数 如下图所示:3.X64dbg导入 采用SwissArmyKnife导入Map信息,如下图所示: 合理的脚本代码可以有效的提高工作效率,减少重复劳动。4.作者答疑 如有疑问,敬请留言。...原创 2022-05-12 08:12:41 · 1378 阅读 · 2 评论 -
X64dbg-插件基本原理-加载顺序-概述-主目录
文章目录1.概述2.为什么要写插件?3.了解 x64dbg 插件架构4.插件加载顺序5.主目录1.概述 x64dbg 插件软件开发工具包 (SDK) 用于为 x64dbg 调试器创建插件。这篇文章旨在做一些事情:突出显示 x64dbg 插件 SDK 的存在。突出显示用于汇编程序的 x64dbg 插件 SDK 的存在。插件加载顺序的技术概述。涵盖 x64dbg 插件 SDK 的架构和内部工作原理。提供一些插件 SDK 函数的示例代码和结构定义,用于使用 C++ 或汇编程序为 x64dbg 创建插件。2原创 2022-05-11 08:42:08 · 1463 阅读 · 0 评论 -
X64dbg-插件开发-导出函数-导出功能-回调导出的函数和结构
1.pluginit 导出函数 pluginit是 x64dbg 在加载动态链接库(.dp32或.dp64)后调用的第一个导出函数,如果pluginit不存在,则此时插件加载将失败。pluginit将指向PLUG_INITSTRUCT结构的指针作为函数中的唯一参数传递:initStruct。此结构用于向 x64dbg 注册插件并获取有效的插件句柄,以便在未来的 api 调用中使用。PLUG_INITSTRUCT结构定义:typedef struct{ //provided by the d原创 2022-05-11 08:40:37 · 610 阅读 · 0 评论 -
X64dbg-插件开发-字符编码-常用插件函数-回调结构
文章目录1.字符编码2.常用插件函数2.1 _plugin_debugpause2.2 _plugin_debugskipexceptions2.3 _plugin_logprintf2.4 _plugin_logputs2.5 _plugin_menuadd2.6 _plugin_menuaddentry2.7 _plugin_menuaddseparator2.8 _plugin_menuaddseparator2.9 _plugin_menuentryseticon2.10 _plugin_menue原创 2022-05-10 09:58:18 · 1576 阅读 · 0 评论 -
X64位-汇编语言-汇编补丁-参数传递-堆栈对齐
文章目录1.32位指令区别2.64位指令文件执行3.64位调用约定4.当调用子函数时,堆栈指针RSP必须在16字节边界对齐上5.子函数开始预留空间计算6.总结 进行任意软件的汇编补丁开发,需要对汇编语言有一定程度的了解,本人在补丁开发过程中,经常遇到各类问题,究其根本还是源于对汇编的一些规则了解不够,本文整理X64位汇编,为大家做参考。1.32位指令区别 64位指令集是在32位指令集上的扩展和发展,EIP扩展为RIP,EFLAGS扩展为RFLAGS。浮点栈寄存器没有变化,多媒体寄存器多个8个寄存器原创 2022-05-10 09:39:57 · 1859 阅读 · 0 评论 -
PE-64位-重定位表-读取解析-保存修改-代码
重定位表(Relocation Table)用于在程序加载到内存中时,进行内存地址的修正。一个简单程序test.exe需要三个动态链接库dll(a.dll,b.dll,c.dll),假设test.exe的ImageBase为400000H,而a.dll、b.dll、c.dll的基址ImageBase均为1000000H。原创 2022-03-14 10:03:49 · 1771 阅读 · 0 评论