随笔分类 - 逆向
FindResource详解
摘要:#include <iostream> #include <Windows.h> int main() { // 获取当前模块的句柄 HMODULE hModule = GetModuleHandle(NULL); HRSRC hRes = ::FindResource(hModule, MAKEI
PE文件结构
摘要:导入表 typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null import descriptor DWORD OriginalFirstThunk; //
c++ 64位异常还原
摘要:前面可能看一下c++ 32位异常还原比较好 本文中的例子下载地址 https://wwmf.lanzout.com/i8SIl18zs8ne 密码:20w5 确定try的位置 图1 main函数 看到main函数里面有抛出异常代码,所以猜测main函数中有异常处理,我们对main函数进行引用查找 R
c++ 32位异常还原
摘要:本文中的例子下载地址 https://wwmf.lanzout.com/ij4zq18au9yd 密码:2vts 确定try的位置 首先确定try的位置 上面明显是一个SEH结构,在c++异常中,state固定在var_4的位置上,这里state初始化位-1,我们将var_4改名为state 上图为
配置vt调试器插件HyperHide
摘要:### 材料与基础 - 操作系统 win7 - win10 (x64) - 虚拟机 VMware Workstation(推荐) - 处理器 支持 VT-x 和 EPT 的英特尔处理器 ### 配置虚拟机 一定要开启处理器虚拟化 intel vt-x或者amd-v这两个才能保证hyperhide的两
通过IDA分析智能指针源码
摘要:首先我们看一看智能指针的内存结构 ### `std::shard_ptr` ```c++ std::shard_ptr{ T * ptr; std::_Ref_count * Rep; } ``` **`ptr`** 对象的指针 **`Rep`** 引用计数对象的指针 ```c++ std::_Re
code patch hook
摘要:## code patch hook 今天在逆向分析一个程序的时候接触到了code patch hook,其实这个hook技术我在接触逆向之初就已经知道了,但是今天遇到的有点特殊 ### code patch hook 原理是通过修改api的前5个字节,jmp到自己的函数 #### 当用户调用api
stl 常用容器内存结构(持续更新)
摘要:std::string Release struct string{ union Bxty{ char Buf[0x10]; char * Ptr; }; Bxty bxty; #ifdef _WIN64 unsigned __int64 Mysize; unsigned __int64 Myres
从汇编角度识别与还原静态局部变量
摘要:msvc x86 .text:00468FC1 mov eax, large fs:2Ch ;这一段代码不知道有啥用,反正每次都会跳入00469033 .text:00468FC7 mov ecx, TlsIndex .text:00468FCD mov byte ptr [ebp+var_4],
记录第一次使用c++和汇编联合编译
摘要: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
使用ida查看这个函数调用了哪些api
摘要:用ida查看一个函数,如这个叫getDiskInformAndSend的函数,想快速查看这个函数调用了哪些api,怎么做呢? 右键点击函数名称,在选项里选择Xrefs graph from(Xrefs graph from 表示查看有哪些函数是从这个函数调用的 Xrefs graph to 表示查看
st 浮点栈寄存器的存储方式
摘要:问题描述: 我把1转成double压入st(0)中,按道理应该是3FF0000000000000,但x64dbg显示的是3FFF800000000000,我想用windbg看看是不是x64dg显示错误 过程: 我用windbg看了st(0),却发现结果也是3FFF800000000000,看
c++ 类(结构体)内存的对齐方式
摘要:c++ 内存对齐方式其实只要遵守两条定律就行了 当前对齐值 在为结构体或类的数据成员分配内存时,当前的数据成员类型长度为M,指定的对齐值是N,那么当前对齐值就是min(M,N),当前地址要被当前对齐值整除 总体对齐值 如果结构体的数据成员类型的最大值为M,指定的对齐值为N,那么实际的对齐值就是min
查找消息回调函数
摘要:今天通过调试ollydbg的F2打cc断点功能来演示如何查找程序的消息回调函数 其实原理很简单,就是利用RegisterClass获取消息回调函数 ollydbg的版本使用的是110 下载地址 1. [官网](http://www.ollydbg.net/download//odbg110.zip)
python逆向实战:反编译python3 pyc文件
摘要:一般说使用umcompyle6 *.pyc命令就可以,但是也会遇到反编译不出来的情况, core.pyc 这个文件反编译出来的结果是 # uncompyle6 version 3.8.0 # Python bytecode 3.7.0 (3394) # Decompiled from: Python
复制构造函数被自动调用的时机
摘要:对象参数传参时 示例代码 #include <stdio.h> #include <string.h> class Person { public: Person() { name = NULL;//无参构造函数,初始化指针 } Person(const Person& obj) { // 注:
c++ 多重继承
摘要:代码案例 #include <stdio.h> class Sofa { public: Sofa() { color = 2; } virtual ~Sofa() { // 沙发类虚析构函数 printf("virtual ~Sofa()\n"); } virtual int getColor()
release vs 在汇编中堆对象如何确定构造函数的范围
摘要:release vs 在汇编中堆对象如何确定构造函数的范围 #include <stdio.h> class Person { public: Person() { age = 20; } virtual int getAge(){ return this->age; } int age; }; i
IDA交叉引用快速识别基类的直接子类
摘要:判断构造函数 .text:0000000140001030 mov [rsp+arg_8], rdx .text:0000000140001035 mov [rsp+arg_0], ecx .text:0000000140001039 sub rsp, 48h .text:0000000140001