随笔分类 -  逆向

摘要:#include <iostream> #include <Windows.h> int main() { // 获取当前模块的句柄 HMODULE hModule = GetModuleHandle(NULL); HRSRC hRes = ::FindResource(hModule, MAKEI 阅读全文
posted @ 2024-11-05 00:40 乘舟凉 阅读(188) 评论(0) 推荐(0)
摘要:我们以vmp为例 https://wwmf.lanzout.com/i66kC27a0ekj 密码:2hq4 修复跳转表 我们来到OEP 通过运行,我们发现两个API调用 获取这两个API调用的地址,然后在一个具有执行权限的代码段中 写入跳转语句,如下图所示 记住指令之前要相隔一个字节,也就是与6对 阅读全文
posted @ 2024-08-14 00:23 乘舟凉 阅读(341) 评论(0) 推荐(0)
摘要:通过分析OEP的特征码和API 原理 你要熟记各类程序OEP特征,通过这些特征去定位,比如说vs2017 编译的程序 OEP附近有kernelbase.GetSystemTimeAsFileTime,在这个api上打断点,然后不停运行,命中断点后看返回地址是否在.text节区即可,定位到了API,然 阅读全文
posted @ 2024-08-12 01:36 乘舟凉 阅读(285) 评论(0) 推荐(0)
摘要:导入表 typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null import descriptor DWORD OriginalFirstThunk; // 阅读全文
posted @ 2023-11-08 12:00 乘舟凉 阅读(49) 评论(0) 推荐(0)
摘要:前面可能看一下c++ 32位异常还原比较好 本文中的例子下载地址 https://wwmf.lanzout.com/i8SIl18zs8ne 密码:20w5 确定try的位置 图1 main函数 看到main函数里面有抛出异常代码,所以猜测main函数中有异常处理,我们对main函数进行引用查找 R 阅读全文
posted @ 2023-09-20 02:10 乘舟凉 阅读(505) 评论(0) 推荐(0)
摘要:本文中的例子下载地址 https://wwmf.lanzout.com/ij4zq18au9yd 密码:2vts 确定try的位置 首先确定try的位置 上面明显是一个SEH结构,在c++异常中,state固定在var_4的位置上,这里state初始化位-1,我们将var_4改名为state 上图为 阅读全文
posted @ 2023-09-13 20:57 乘舟凉 阅读(225) 评论(0) 推荐(0)
摘要:### 材料与基础 - 操作系统 win7 - win10 (x64) - 虚拟机 VMware Workstation(推荐) - 处理器 支持 VT-x 和 EPT 的英特尔处理器 ### 配置虚拟机 一定要开启处理器虚拟化 intel vt-x或者amd-v这两个才能保证hyperhide的两 阅读全文
posted @ 2023-07-28 10:35 乘舟凉 阅读(3036) 评论(0) 推荐(0)
摘要:首先我们看一看智能指针的内存结构 ### `std::shard_ptr` ```c++ std::shard_ptr{ T * ptr; std::_Ref_count * Rep; } ``` **`ptr`** 对象的指针 **`Rep`** 引用计数对象的指针 ```c++ std::_Re 阅读全文
posted @ 2023-07-13 23:25 乘舟凉 阅读(263) 评论(0) 推荐(0)
摘要:## code patch hook 今天在逆向分析一个程序的时候接触到了code patch hook,其实这个hook技术我在接触逆向之初就已经知道了,但是今天遇到的有点特殊 ### code patch hook 原理是通过修改api的前5个字节,jmp到自己的函数 #### 当用户调用api 阅读全文
posted @ 2023-06-18 23:49 乘舟凉 阅读(90) 评论(0) 推荐(0)
摘要:std::string Release struct string{ union Bxty{ char Buf[0x10]; char * Ptr; }; Bxty bxty; #ifdef _WIN64 unsigned __int64 Mysize; unsigned __int64 Myres 阅读全文
posted @ 2023-04-20 23:08 乘舟凉 阅读(188) 评论(1) 推荐(0)
摘要:ida 中的反汇编窗口像visual studio一样显示反编译代码 阅读全文
posted @ 2023-04-06 23:49 乘舟凉 阅读(71) 评论(0) 推荐(0)
摘要:msvc x86 .text:00468FC1 mov eax, large fs:2Ch ;这一段代码不知道有啥用,反正每次都会跳入00469033 .text:00468FC7 mov ecx, TlsIndex .text:00468FCD mov byte ptr [ebp+var_4], 阅读全文
posted @ 2023-02-20 00:19 乘舟凉 阅读(62) 评论(0) 推荐(0)
摘要:32位 从Ida把目标函数扣出来 toUapper proc near arg_0 = dword ptr 4 push esi mov esi, [esp+4+arg_0] push edi mov edi, esi or ecx, 0FFFFFFFFh xor eax, eax repne sc 阅读全文
posted @ 2022-10-28 23:08 乘舟凉 阅读(133) 评论(0) 推荐(0)
摘要:用ida查看一个函数,如这个叫getDiskInformAndSend的函数,想快速查看这个函数调用了哪些api,怎么做呢? 右键点击函数名称,在选项里选择Xrefs graph from(Xrefs graph from 表示查看有哪些函数是从这个函数调用的 Xrefs graph to 表示查看 阅读全文
posted @ 2022-10-26 22:59 乘舟凉 阅读(759) 评论(0) 推荐(0)
摘要:问题描述: ​ 我把1转成double压入st(0)中,按道理应该是3FF0000000000000,但x64dbg显示的是3FFF800000000000,我想用windbg看看是不是x64dg显示错误 过程: ​ 我用windbg看了st(0),却发现结果也是3FFF800000000000,看 阅读全文
posted @ 2022-10-12 01:33 乘舟凉 阅读(316) 评论(0) 推荐(0)
摘要:c++ 内存对齐方式其实只要遵守两条定律就行了 当前对齐值 在为结构体或类的数据成员分配内存时,当前的数据成员类型长度为M,指定的对齐值是N,那么当前对齐值就是min(M,N),当前地址要被当前对齐值整除 总体对齐值 如果结构体的数据成员类型的最大值为M,指定的对齐值为N,那么实际的对齐值就是min 阅读全文
posted @ 2022-08-26 11:52 乘舟凉 阅读(229) 评论(0) 推荐(0)
摘要:今天通过调试ollydbg的F2打cc断点功能来演示如何查找程序的消息回调函数 其实原理很简单,就是利用RegisterClass获取消息回调函数 ollydbg的版本使用的是110 下载地址 1. [官网](http://www.ollydbg.net/download//odbg110.zip) 阅读全文
posted @ 2022-06-24 00:08 乘舟凉 阅读(266) 评论(0) 推荐(0)
摘要:一般说使用umcompyle6 *.pyc命令就可以,但是也会遇到反编译不出来的情况, core.pyc 这个文件反编译出来的结果是 # uncompyle6 version 3.8.0 # Python bytecode 3.7.0 (3394) # Decompiled from: Python 阅读全文
posted @ 2022-05-08 20:24 乘舟凉 阅读(7657) 评论(0) 推荐(0)
摘要:对象参数传参时 ​ 示例代码 #include <stdio.h> #include <string.h> class Person { public: Person() { name = NULL;//无参构造函数,初始化指针 } Person(const Person& obj) { // 注: 阅读全文
posted @ 2022-04-22 20:53 乘舟凉 阅读(89) 评论(0) 推荐(0)
摘要:代码案例 #include <stdio.h> class Sofa { public: Sofa() { color = 2; } virtual ~Sofa() { // 沙发类虚析构函数 printf("virtual ~Sofa()\n"); } virtual int getColor() 阅读全文
posted @ 2022-04-17 16:49 乘舟凉 阅读(73) 评论(0) 推荐(0)